Update serverless
parent
ea32a935b2
commit
9527ec852f
10
README.md
10
README.md
|
@ -4,7 +4,11 @@
|
||||||
|
|
||||||
## 关于本书
|
## 关于本书
|
||||||
|
|
||||||
[![CircleCI](https://circleci.com/gh/rootsongjc/kubernetes-handbook/tree/master.svg?style=svg)](https://circleci.com/gh/rootsongjc/kubernetes-handbook/tree/master)
|
<p align="left">
|
||||||
|
<a href="https://circleci.com/gh/rootsongjc/kubernetes-handbook/tree/master">
|
||||||
|
<img src="https://circleci.com/gh/rootsongjc/kubernetes-handbook/tree/master.svg?style=svg" alt="CircleCI"/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://jimmysong.io/kubernetes-handbook">
|
<a href="https://jimmysong.io/kubernetes-handbook">
|
||||||
|
@ -111,6 +115,4 @@
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/wechat-appreciate-qrcode.jpg" alt="微信赞赏码"/>
|
<img src="images/wechat-appreciate-qrcode.jpg" alt="微信赞赏码"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# 理解Serverless
|
# 理解Serverless
|
||||||
|
|
||||||
No silver bullet. - The Mythical Man-Month
|
> No silver bullet. - The Mythical Man-Month
|
||||||
|
|
||||||
许多年前,我们开发的软件还是C/S(客户端/服务器)和MVC(模型-试图-控制器)的形式,再后来有了SOA,最近几年又出现了微服务架构,更新一点的有Cloud Native(云原生)应用,企业应用从单体架构,到服务化,再到更细粒度的微服务化,应用开发之初就是为了应对互联网的特有的高并发、不间断的特性,需要很高的性能和可扩展性,人们对软件开发的追求孜孜不倦,希望力求在软件开发的复杂度和效率之间达到一个平衡。但可惜的是,NO SILVER BULLET!几十年前(1975年)Fred Brooks就在The Mythical Man-Month中就写到了这句话。那么Serverlss会是那颗银弹吗?
|
许多年前,我们开发的软件还是C/S(客户端/服务器)和MVC(模型-试图-控制器)的形式,再后来有了SOA,最近几年又出现了微服务架构,更新一点的有Cloud Native(云原生)应用,企业应用从单体架构,到服务化,再到更细粒度的微服务化,应用开发之初就是为了应对互联网的特有的高并发、不间断的特性,需要很高的性能和可扩展性,人们对软件开发的追求孜孜不倦,希望力求在软件开发的复杂度和效率之间达到一个平衡。但可惜的是,NO SILVER BULLET!几十年前(1975年)Fred Brooks就在The Mythical Man-Month中就写到了这句话。那么Serverlss会是那颗银弹吗?
|
||||||
|
|
||||||
|
@ -8,6 +8,16 @@ No silver bullet. - The Mythical Man-Month
|
||||||
|
|
||||||
## Serverless介绍
|
## Serverless介绍
|
||||||
|
|
||||||
|
Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。
|
||||||
|
|
||||||
|
Serverless 是云原生技术发展的高级阶段,使开发者更聚焦在业务逻辑,而减少对基础架构的关注。
|
||||||
|
|
||||||
|
![Serverless 在云原生技术中的地位](https://tva1.sinaimg.cn/large/006y8mN6ly1g7gkigih88j30ix0dw74a.jpg)
|
||||||
|
|
||||||
|
下图来自谷歌云平台官网,是对云计算的一个很好的分层概括,其中 serverless 就是构建在虚拟机和容器之上的一层,与应用本身的关系更加密切。
|
||||||
|
|
||||||
|
![从物理机到函数计算](https://ws4.sinaimg.cn/large/006tNbRwgy1fv8y3128tfj30ja0dywf3.jpg)
|
||||||
|
|
||||||
Serverless架构是云的自然延伸,为了理解serverless,我们有必要回顾一下云计算的发展。
|
Serverless架构是云的自然延伸,为了理解serverless,我们有必要回顾一下云计算的发展。
|
||||||
|
|
||||||
### IaaS
|
### IaaS
|
||||||
|
@ -34,6 +44,28 @@ PaaS(Platform as a Service)是构建在IaaS之上的一种平台服务,提
|
||||||
|
|
||||||
PaaS是对软件的一个更高的抽象层次,已经接触到应用程序的运行环境本身,可以由开发者自定义,而不必接触更底层的操作系统。
|
PaaS是对软件的一个更高的抽象层次,已经接触到应用程序的运行环境本身,可以由开发者自定义,而不必接触更底层的操作系统。
|
||||||
|
|
||||||
|
## 什么是 Serverless
|
||||||
|
|
||||||
|
下面将分别从简洁版和进阶版向您展示什么是 Serverless。
|
||||||
|
|
||||||
|
**简洁版**
|
||||||
|
|
||||||
|
就像无线互联网实际有的地方也需要用到有线连接一样,无服务器架构仍然在某处有服务器。开发者无需关注服务器,只需关注代码即可。
|
||||||
|
|
||||||
|
Serverless(无服务器架构)指的是服务端逻辑由开发者实现,运行在无状态的计算容器中,由事件触发, 完全被第三方管理,而业务层面的状态则记录在数据库或存储资源中。
|
||||||
|
|
||||||
|
**进阶版**
|
||||||
|
|
||||||
|
Serverless是由事件(event)驱动(e.g. http,pub/sub)的全托管计算服务。用户无需管理服务器等基础设施,只需编写代码和选择触发器(trigger),(比如rpc请求,定时器等)并上传。其余的工作(实例选择、 扩缩容、部署、容灾、监控、日志、安全补丁等)全部由serverless系统托管。用户只需要为代码实际运行消耗的资源付费——代码未运行则不产生费用。
|
||||||
|
|
||||||
|
Serverless相对于serverful,对业务用户强调noserver(serverless并不是说没有服务器,只是业务人员无需关注服务器了,代码仍然是运行在真实存在的服务器上)的运维理念,业务人员只需要聚焦业务逻辑代码。
|
||||||
|
|
||||||
|
Serverless相比serverful,有以下3个改变(from Berkeley的总结):
|
||||||
|
|
||||||
|
1. 弱化了存储和计算之间的联系。服务的储存和计算被分开部署和收费,存储不再是服务本身的一部分,而是演变成了独立的云服务,这使得计算变得无状态化,更容易调度和扩缩容,同时也降低了数据丢失的风险。
|
||||||
|
1. 代码的执行不再需要手动分配资源。不需要为服务的运行指定需要的资源(比如使用几台机器、多大的带宽、多大的磁盘等),只需要提供一份代码,剩下的交由serverless平台去处理就行了。当前阶段的实现平台分配资源时还需要用户方提供一些策略,例如单个实例的规格和最大并发数,单实例的最大cpu使用率。理想的情况是通过某些学习算法来进行完全自动的自适应分配。
|
||||||
|
1. 按使用量计费。Serverless按照服务的使用量(调用次数、时长等)计费,而不是像传统的serverful服务那样,按照使用的资源(ECS实例、VM的规格等)计费。
|
||||||
|
|
||||||
## Serverless的定义
|
## Serverless的定义
|
||||||
|
|
||||||
Serverless不如IaaS和PaaS那么好理解,因为它通常包含了两个领域BaaS(Backend as a Service)和FaaS(Function as a Service)。
|
Serverless不如IaaS和PaaS那么好理解,因为它通常包含了两个领域BaaS(Backend as a Service)和FaaS(Function as a Service)。
|
||||||
|
@ -54,13 +86,43 @@ FaaS(Functions as a Service)函数即服务,FaaS是无服务器计算的
|
||||||
|
|
||||||
![FaaS应用架构](../images/serverless-faas-platform.jpg)
|
![FaaS应用架构](../images/serverless-faas-platform.jpg)
|
||||||
|
|
||||||
|
### Serverless 中的函数
|
||||||
|
|
||||||
|
下图是 Serverless 中的(FaaS)函数定义,从图中可以看出与容器、12 要素及 Kubernetes 的运行时设计十分契合。
|
||||||
|
|
||||||
|
![Serverless 中的函数定义](https://tva1.sinaimg.cn/large/006y8mN6ly1g7ldey3l7gj31ti0mwta9.jpg)
|
||||||
|
|
||||||
|
下图 FaaS 中函数输入、context 及输出。
|
||||||
|
|
||||||
|
![FaaS 中的函数](https://tva1.sinaimg.cn/large/006y8mN6ly1g7ldhm7bxyj31040u0q5n.jpg)
|
||||||
|
|
||||||
|
以上两张图片根据 CNCF Serverless Whitepaper v1.0 绘制。
|
||||||
|
|
||||||
### 总结
|
### 总结
|
||||||
|
|
||||||
两者都为我们的计算资源提供了弹性的保障,BaaS其实依然是服务外包,而FaaS使我们更加关注应用程序的逻辑,两者使我们不需要关注应用程序所在的服务器,但实际上服务器依然是客观存在的。
|
两者都为我们的计算资源提供了弹性的保障,BaaS其实依然是服务外包,而FaaS使我们更加关注应用程序的逻辑,两者使我们不需要关注应用程序所在的服务器,但实际上服务器依然是客观存在的。
|
||||||
|
|
||||||
当我们将应用程序迁移到容器和虚拟机中时,其实对于应用程序本身的体系结构并没有多少改变,只不过有些流程和规定需要遵守,比如12因素应用守则,但是serverlss对应用程序的体系结构来说就是一次颠覆了,通常我们需要考虑事件驱动模型,更加细化的不熟形式,以及在FaaS组件之外保持状态的需求。
|
当我们将应用程序迁移到容器和虚拟机中时,其实对于应用程序本身的体系结构并没有多少改变,只不过有些流程和规定需要遵守,比如12因素应用守则,但是serverlss对应用程序的体系结构来说就是一次颠覆了,通常我们需要考虑事件驱动模型,更加细化的不熟形式,以及在FaaS组件之外保持状态的需求。
|
||||||
|
|
||||||
## Serverless应用
|
## Serverless 的使用场景
|
||||||
|
|
||||||
|
虽然 Serverless 的应用很广泛,但是其也有局限性,Serverless 比较适合以下场景:
|
||||||
|
|
||||||
|
- 异步的并发,组件可独立部署和扩展
|
||||||
|
- 应对突发或服务使用量不可预测(主要是为了节约成本,因为 Serverless 应用在不运行时不收费)
|
||||||
|
- 短暂、无状态的应用,对冷启动时间不敏感
|
||||||
|
- 需要快速开发迭代的业务(因为无需提前申请资源,因此可以加快业务上线速度)
|
||||||
|
|
||||||
|
Serverless 的使用场景示例如:
|
||||||
|
|
||||||
|
- ETL
|
||||||
|
- 机器学习及 AI 模型处理
|
||||||
|
- 图片处理
|
||||||
|
- IoT 传感器数据分析
|
||||||
|
- 流处理
|
||||||
|
- 聊天机器人
|
||||||
|
|
||||||
|
CNCF Serverless whitepaper 中给出了诸多 Serverless 使用场景的详细描述。
|
||||||
|
|
||||||
我们以一个游戏应用为例,来说明什么是serverless应用。
|
我们以一个游戏应用为例,来说明什么是serverless应用。
|
||||||
|
|
||||||
|
@ -86,9 +148,33 @@ FaaS(Functions as a Service)函数即服务,FaaS是无服务器计算的
|
||||||
|
|
||||||
而在serverless架构中,我们不再需要在服务器端代码中存储任何会话状态,而是直接将它们存储在NoSQL中,这样将使应用程序无状态,有助于弹性扩展。前端可以直接利用BaaS而减少后端的编码需求,这样架构的本质上是减少了应用程序开发的人力成本,降低了自己维护基础设施的风险,而且利用云的能力更便于扩展和快速迭代。
|
而在serverless架构中,我们不再需要在服务器端代码中存储任何会话状态,而是直接将它们存储在NoSQL中,这样将使应用程序无状态,有助于弹性扩展。前端可以直接利用BaaS而减少后端的编码需求,这样架构的本质上是减少了应用程序开发的人力成本,降低了自己维护基础设施的风险,而且利用云的能力更便于扩展和快速迭代。
|
||||||
|
|
||||||
## Serverless的优势
|
## Serverless架构的优点
|
||||||
|
|
||||||
在最前面我们提到了使用IaaS给我们带来了五点好处,FaaS当然也包括了这些好处,但是它给我们带来的最大的好处就是**多快好省**。减少从概念原型到实施的等待时间,比自己维护服务更省钱。
|
> 今天大多数公司在开发应用程序并将其部署在服务器上的时候,无论是选择公有云还是私有的数据中心,都需要提前了解究竟需要多少台服务器、多大容量的存储和数据库的功能等。并需要部署运行应用程序和依赖的软件到基础设施之上。假设我们不想在这些细节上花费精力,是否有一种简单的架构模型能够满足我们这种想法?这个答案已经存在,这就是今天软件架构世界中新鲜但是很热门的一个话题——Serverless(无服务器)架构。
|
||||||
|
>
|
||||||
|
> ——AWS 费良宏
|
||||||
|
|
||||||
|
- **降低运营成本:**
|
||||||
|
|
||||||
|
Serverless是非常简单的外包解决方案。它可以让您委托服务提供商管理服务器、数据库和应用程序甚至逻辑,否则您就不得不自己来维护。由于这个服务使用者的数量会非常庞大,于是就会产生规模经济效应。在降低成本上包含了两个方面,即基础设施的成本和人员(运营/开发)的成本。
|
||||||
|
|
||||||
|
- **降低开发成本:**
|
||||||
|
|
||||||
|
IaaS和PaaS存在的前提是,服务器和操作系统管理可以商品化。Serverless作为另一种服务的结果是整个应用程序组件被商品化。
|
||||||
|
|
||||||
|
- **扩展能力:**
|
||||||
|
|
||||||
|
Serverless架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。从基本的基础设施方面受益最大的好处是,您只需支付您所需要的计算能力。
|
||||||
|
|
||||||
|
- **更简单的管理:**
|
||||||
|
|
||||||
|
Serverless架构明显比其他架构更简单。更少的组件,就意味着您的管理开销会更少。
|
||||||
|
|
||||||
|
- **“绿色”的计算:**
|
||||||
|
|
||||||
|
按照《福布斯》杂志的统计,在商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出。这无疑是一种资源的巨大浪费。随着Serverless架构的出现,让服务提供商提供我们的计算能力最大限度满足实时需求。这将使我们更有效地利用计算资源。
|
||||||
|
|
||||||
|
在上面我们提到了使用IaaS给我们带来了五点好处,FaaS当然也包括了这些好处,但是它给我们带来的最大的好处就是**多快好省**。减少从概念原型到实施的等待时间,比自己维护服务更省钱。
|
||||||
|
|
||||||
**降低人力成本**
|
**降低人力成本**
|
||||||
|
|
||||||
|
@ -118,7 +204,7 @@ FaaS(Functions as a Service)函数即服务,FaaS是无服务器计算的
|
||||||
|
|
||||||
以docker为代表的容器技术仅仅是缩短了应用程序的迭代周期,而serverless技术是直接缩短了创新周期,从概念到最小可行性部署的时间,让初级开发人员也能在很短的时间内完成以前通常要经验丰富的工程师才能完成的项目。
|
以docker为代表的容器技术仅仅是缩短了应用程序的迭代周期,而serverless技术是直接缩短了创新周期,从概念到最小可行性部署的时间,让初级开发人员也能在很短的时间内完成以前通常要经验丰富的工程师才能完成的项目。
|
||||||
|
|
||||||
## Serverless的劣势
|
## Serverless架构的缺点
|
||||||
|
|
||||||
我们知道没有十全十美的技术,在说了serverless的那么多优势之后,我们再来探讨以下serverless的劣势,或者说局限性和适用场景。
|
我们知道没有十全十美的技术,在说了serverless的那么多优势之后,我们再来探讨以下serverless的劣势,或者说局限性和适用场景。
|
||||||
|
|
||||||
|
@ -135,3 +221,44 @@ FaaS(Functions as a Service)函数即服务,FaaS是无服务器计算的
|
||||||
**本地测试**
|
**本地测试**
|
||||||
|
|
||||||
Serverless应用的本地测试困难是一个很棘手的问题。虽然可以在测试环境下使用各种数据库和消息队列来模拟生产环境,但是对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试,并且serverless应用本身也是分布式的,简单的将无数的FaaS和BaaS组件粘合起来也是有挑战性的。
|
Serverless应用的本地测试困难是一个很棘手的问题。虽然可以在测试环境下使用各种数据库和消息队列来模拟生产环境,但是对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试,并且serverless应用本身也是分布式的,简单的将无数的FaaS和BaaS组件粘合起来也是有挑战性的。
|
||||||
|
|
||||||
|
## Kubernetes上的Serverless 架构
|
||||||
|
|
||||||
|
Kubernetes 的蓬勃发展由催生了一系列以它为基础的 Serverless 应用,这是我整理的与 Serverless 相关的开源项目:
|
||||||
|
|
||||||
|
- [dispatch](https://github.com/vmware/dispatch) - Dispatch is a framework for deploying and managing serverless style applications.
|
||||||
|
- [eventing](https://github.com/knative/eventing) - Open source specification and implementation of Knative event binding and delivery.
|
||||||
|
- [faas-netes](https://github.com/alexellis/faas-netes) - Enable Kubernetes as a backend for Functions as a Service (OpenFaaS) https://github.com/alexellis/faas
|
||||||
|
- [firecamp](https://github.com/cloudstax/firecamp) - Serverless Platform for the stateful services [https://www.cloudstax.io](https://www.cloudstax.io/)
|
||||||
|
- [fission](https://github.com/fission/fission) - Fast Serverless Functions for Kubernetes [http://fission.io](http://fission.io/)
|
||||||
|
- [fn](https://github.com/fnproject/fn) - The container native, cloud agnostic serverless platform. [http://fnproject.io](http://fnproject.io/)
|
||||||
|
- [funktion](https://github.com/funktionio/funktion/) - a CLI tool for working with funktion https://funktion.fabric8.io/
|
||||||
|
- [fx](https://github.com/metrue/fx) - Poor man's serverless framework based on Docker, Function as a Service with painless.
|
||||||
|
- [gloo](https://github.com/solo-io/gloo) - The Function Gateway built on top of Envoy.
|
||||||
|
- [ironfunctions](https://github.com/iron-io/functions) - IronFunctions - the serverless microservices platform. [http://iron.io](http://iron.io/)
|
||||||
|
- [knative-lambda-runtime](https://github.com/triggermesh/knative-lambda-runtime) - Running AWS Lambda Functions on Knative/Kubernetes Clusters [https://triggermesh.com](https://triggermesh.com/)
|
||||||
|
- [kubeless](https://github.com/kubeless/kubeless) - Kubernetes Native Serverless Framework [http://kubeless.io](http://kubeless.io/)
|
||||||
|
- [nuclio](https://github.com/nuclio/nuclio) - High-Performance Serverless event and data processing platform.
|
||||||
|
- [openfaas](https://github.com/openfaas/faas) - OpenFaaS - Serverless Functions Made Simple for Docker & Kubernetes https://blog.alexellis.io/introducing-functions-as-a-service/
|
||||||
|
- [openwhisk](https://openwhisk.incubator.apache.org/) - Apache OpenWhisk (Incubating) is a [serverless](https://en.wikipedia.org/wiki/Serverless_computing), open source cloud platform that executes functions in response to events at any scale.
|
||||||
|
- [riff](https://github.com/projectriff/riff) - riff is for functions [https://projectriff.io](https://projectriff.io/)
|
||||||
|
- [serverless](https://github.com/serverless/serverless) - Serverless Framework – Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more! – [https://serverless.com](https://serverless.com/)
|
||||||
|
- [spec](https://github.com/cloudevents/spec) - CloudEvents Specification [https://cloudevents.io](https://cloudevents.io/)
|
||||||
|
- [thanos](https://github.com/improbable-eng/thanos) - Highly available Prometheus setup with long term storage capabilities.
|
||||||
|
|
||||||
|
以上列表来自 https://jimmysong.io/awesome-cloud-native/#serverless。
|
||||||
|
|
||||||
|
## 总结
|
||||||
|
|
||||||
|
Karl Marx说的好,生产力决定生产关系,云计算的概念层出不穷,其本质上还是对生产关系和生产力的配置与优化,生产者抛开场景意味追求高大上的技术将譬如“大炮打蚊子”,小题大做,鼓励大家为了满足大家的好奇心进行折腾,毕竟那么多科学发现和重大发明都是因为折腾出来的,不想要一匹跑的更快的马,而是发明汽车的福特,捣鼓炸药的诺贝尔,种豌豆的孟德尔……同时还是要考虑将技术产业化(或许能改变生产关系),提高生产力。
|
||||||
|
|
||||||
|
## 参考
|
||||||
|
|
||||||
|
- [CNCF Serverless Whitepaper v1.0](https://gw.alipayobjects.com/os/basement_prod/24ec4498-71d4-4a60-b785-fa530456c65b.pdf)
|
||||||
|
- [Serverless Architectures - Martin Fowler](https://martinfowler.com/articles/serverless.html)
|
||||||
|
- [Serverless架构综述](http://dockone.io/article/1460)
|
||||||
|
- [2017年会是Serverless爆发之年吗?](http://www.infoq.com/cn/news/2017/04/2017-Serverless)
|
||||||
|
- [从IaaS到FaaS—— Serverless架构的前世今生](https://aws.amazon.com/cn/blogs/china/iaas-faas-serverless/)
|
||||||
|
- [Introducing Redpoint's FaaS Landscape](https://medium.com/memory-leak/this-year-gartner-added-serverless-to-its-hype-cycle-of-emerging-technologies-reflecting-the-5dfe43d818f0)
|
||||||
|
- [What is serverless free ebook- oreilly.com](http://www.oreilly.com/programming/free/what-is-serverless.csp)
|
||||||
|
- [Serverless Architectures - martinfowler.com](https://martinfowler.com/articles/serverless.html)
|
Loading…
Reference in New Issue