云函数架构无服务器云函数技术路径及架构实现
作者:云社区
2020-08-30 23:27
1.云函数的定位
什么是云函数?云函数是提供了一种直接在云上运行,无状态的、短暂的、由事件触发的代码的能力。
2.云函数与微服务的关系
· Serverless 的概念是一个比较大的范畴,Serverless 既包括计算,也包括存储、数据库、中间件等各种服务。Serverless = FaaS(函数即服务) + BaaS(后端即服务)。其中Serverless计算一般指FaaS,即云函数。
· 云函数和微服务不是取代关系。微服务是一种架构模式,而云函数是实现微服务的一种方式。微服务可以用云函数实现,也可以用K8S + 容器,或者VM实现。
· 判断选择用什么来实现微服务,要从可靠性、成本、性能、工程效率、安全性等维度出发。不同的场景有不同的取舍。
· 当前的的Serverless计算服务还有很多限制,而阿里云函数计算2.0解决了这些痛点,目标是提供在可靠性、成本、性能、工程效率上最具竞争力的计算服务。所以我们并不能取代这些微服务,而是成为支撑微服务最好的平台。)
一个单体应用可以按业务模块拆分成多个微服务,一个微服务也可以按使用场景
拆分成多个云函数。比如一个广告微服务,至少可以拆分出实时竞价、展示计数、报表查询等云函数。也就是说,云函数和微服务中的API是同一粒度的。但不同于API,每个云函数都是独立部署,按需执行。
3.云函数的特点
理论上,只要符合下列条件,任何现有业务模块都可以改造成云函数的方式:
Q:请问代码怎么部署到docker中?
A:直接将代码下载至母机,再将代码目录挂载至Docker
Q:云函数是通用的 还是只能在云平台运行?
A:云提供了云函数服务,自己也可搭建,目前github上有不少开源云函数平台,比如openlambda,iron.io等,建议直接使用云的服务,因为可以和多个云产品打通,单靠云函数自身难以构建完整服务。
Q:事件传递使用的是队列吗?
A:异步事件用了CMQ消息队列持久化存储,同步事件未使用
Q:请问云函数对开发语言有限制否?如果有,目前对Go语言的支持如何?
A:目前支持python 2.7/3.6, node.js 4.3/6.10, Java8,如果有通用的用户需求,可以支持其它语言,比如php,go等
Q:有系统函数调用吗?自定义函数的颗粒度有何建议?
A:绝大部分的系统调用都可调用,除了一些危险操作,比如关机,重启,网络服务监听等,函数颗粒度可参考微服务的设计原则,将功能尽量拆细
Q:可落地吗?
A:已有不少用户案例,后续会做些分享,不妨亲自试试,当前是免费的,会一直提供免费包,有需求直接给我们提
Q:云函数支持kotlin语言吗?
A:之前没用户反馈需要这种语言的支持,不过我个人挺看好,会持续保持关注
Q:请问将请求调度函数实例,这个调度算法的实现?
A:其实这里就是通用的负载均衡和扩缩容算法,这里比较复杂的是提前预测需要扩容,后续会详细分享。
Q:能介绍下 将请求调度到函数实例的实现吗?
A:这里有个invoker模块对每个函数维持有一个请求队列,目前没设置优先级,按照先来先到的顺序依次调度,调度时会从函数所有可用的函数实例中,选择一个下发。函数实例里有个循环接受请求,收到时传递参数调用用户函数。
Q:代码可以下云落地吗?
A:代码里一般会涉及其它云产品的调用,所以一般对云平台有一些依赖,可以关注下开源的serverless框架,在公有云云函数上封装了一层,用来解除依赖,实现在各个云平台的平滑迁移。
Q:云函数的代码有哪些限制?比如什么样的函数不可以调用,什么样的库不能import?
A:可以基本认为无限制,但会禁止恶意行为,比如关机,重启,端口扫描等;也会禁止端口监听,因为常驻进程不符合云函数按需启用的原则。如果预装库不符合要求,可以自行将依赖库打包至zip里上传。
如果您发现本站中涉嫌抄袭的内容,欢迎发送邮件至:liping@yovole.com(邮件中#请改为@)进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
什么是云函数?云函数是提供了一种直接在云上运行,无状态的、短暂的、由事件触发的代码的能力。
2.云函数与微服务的关系
· Serverless 的概念是一个比较大的范畴,Serverless 既包括计算,也包括存储、数据库、中间件等各种服务。Serverless = FaaS(函数即服务) + BaaS(后端即服务)。其中Serverless计算一般指FaaS,即云函数。
· 云函数和微服务不是取代关系。微服务是一种架构模式,而云函数是实现微服务的一种方式。微服务可以用云函数实现,也可以用K8S + 容器,或者VM实现。
· 判断选择用什么来实现微服务,要从可靠性、成本、性能、工程效率、安全性等维度出发。不同的场景有不同的取舍。
· 当前的的Serverless计算服务还有很多限制,而阿里云函数计算2.0解决了这些痛点,目标是提供在可靠性、成本、性能、工程效率上最具竞争力的计算服务。所以我们并不能取代这些微服务,而是成为支撑微服务最好的平台。)
一个单体应用可以按业务模块拆分成多个微服务,一个微服务也可以按使用场景
拆分成多个云函数。比如一个广告微服务,至少可以拆分出实时竞价、展示计数、报表查询等云函数。也就是说,云函数和微服务中的API是同一粒度的。但不同于API,每个云函数都是独立部署,按需执行。
3.云函数的特点
- 零运维:不再需要管理底层资源的服务器。
- 秒级部署:运行无状态,轻易实现快速迭代。
- 自动触发:完全由事件触发,空闲时没有资源在运行。
- 聚焦代码逻辑:开发者只关心最核心的代码片段,跳过复杂的、无聊的其他工作。
- 无穷弹性计算能力:根据请求自动平行调整服务资源,拥有近乎无限的扩容能力。
理论上,只要符合下列条件,任何现有业务模块都可以改造成云函数的方式:
- 触发响应:双向通信的场景,本质都可以用一方轮询来解决。
- 无状态:所有的状态,都可以下沉至BaaS。
Q:请问代码怎么部署到docker中?
A:直接将代码下载至母机,再将代码目录挂载至Docker
Q:云函数是通用的 还是只能在云平台运行?
A:云提供了云函数服务,自己也可搭建,目前github上有不少开源云函数平台,比如openlambda,iron.io等,建议直接使用云的服务,因为可以和多个云产品打通,单靠云函数自身难以构建完整服务。
Q:事件传递使用的是队列吗?
A:异步事件用了CMQ消息队列持久化存储,同步事件未使用
Q:请问云函数对开发语言有限制否?如果有,目前对Go语言的支持如何?
A:目前支持python 2.7/3.6, node.js 4.3/6.10, Java8,如果有通用的用户需求,可以支持其它语言,比如php,go等
Q:有系统函数调用吗?自定义函数的颗粒度有何建议?
A:绝大部分的系统调用都可调用,除了一些危险操作,比如关机,重启,网络服务监听等,函数颗粒度可参考微服务的设计原则,将功能尽量拆细
Q:可落地吗?
A:已有不少用户案例,后续会做些分享,不妨亲自试试,当前是免费的,会一直提供免费包,有需求直接给我们提
Q:云函数支持kotlin语言吗?
A:之前没用户反馈需要这种语言的支持,不过我个人挺看好,会持续保持关注
Q:请问将请求调度函数实例,这个调度算法的实现?
A:其实这里就是通用的负载均衡和扩缩容算法,这里比较复杂的是提前预测需要扩容,后续会详细分享。
Q:能介绍下 将请求调度到函数实例的实现吗?
A:这里有个invoker模块对每个函数维持有一个请求队列,目前没设置优先级,按照先来先到的顺序依次调度,调度时会从函数所有可用的函数实例中,选择一个下发。函数实例里有个循环接受请求,收到时传递参数调用用户函数。
Q:代码可以下云落地吗?
A:代码里一般会涉及其它云产品的调用,所以一般对云平台有一些依赖,可以关注下开源的serverless框架,在公有云云函数上封装了一层,用来解除依赖,实现在各个云平台的平滑迁移。
Q:云函数的代码有哪些限制?比如什么样的函数不可以调用,什么样的库不能import?
A:可以基本认为无限制,但会禁止恶意行为,比如关机,重启,端口扫描等;也会禁止端口监听,因为常驻进程不符合云函数按需启用的原则。如果预装库不符合要求,可以自行将依赖库打包至zip里上传。
如果您发现本站中涉嫌抄袭的内容,欢迎发送邮件至:liping@yovole.com(邮件中#请改为@)进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。