介绍
- Serverless的落地与实践需要实实在在的平台、工具以及框架作为技术支撑。通过这些Serverless的实现,用户才能进行Serverless应用的架构设计、部署及运维
Serverless技术的发展
- CNCF的Serverless工作小组也对目前业界存在的Serverless资源做了一次梳理。基于其中比较成熟的平台和方案,CNCF发布了一份Serverless资源的导览图(Serverless Cloud Native Landscape)
Serverless实现导览图
- CNCF基金会还维护了一些关于构建、设计和运行云原生应用的资源导览图
Serverless构建、设计和运行云原生应用的资源导览图
Serverless资源分类
- Serverless平台:提供Serverless应用开发和运维的公有云和私有云平台,如AWS Lambda、Azure Functions、Google Cloud Functions等公有云平台;OpenWhisk、Fission、Kubeless、Fn、OpenFaaS等都可以被部署在私有数据中心的开源Serverless平台。
- Serverless框架:Serverless平台为用户提供了开发和运行Serverless的基础,但是许多Serverless平台应用开发的用户体验还不是很完善。为了方便用户同时在多个不同平台上开发和部署应用,业界出现了一批Serverless框架,以帮助用户降低Serverless应用开发、部署和管理的复杂度,提高效率。比如,一款名为Serverless Framework的框架同时支持AWS、Azure、Google及OpenWhisk等众多平台。
- Serverless工具:各类Serverless应用的辅助工具,简化Serverless应用设计和部署的.architect。如,帮助用户监控管理Serverless应用的日志和性能的Dashbird和IO Pipe,帮助用户对Serverless应用进行持续集成的LambCI。
- 编程语言库:针对某种编程语言的Serverless类库。python-λ是一款基于Python语言的Serverless工具,可以简化基于Python的AWS Lambda应用的开发和部署。
- 后台服务:完整的Serverless应用往往还依赖于第三方的后台服务,以解决安全、数据持久化、消息传递等需求。如安全服务Puresec,为Serverless应用提供安全运行环境(Serverless Security Runtime Environment,SSRE);Snyk提供Serverless应用的安全漏洞扫描服务。
Serverless与公有云
- 按照云的运维责任所有人来划分,云服务可以分为公有云(Public Cloud)、私有云(Private Cloud)以及混合云(Hybrid Cloud)
各种云服务的类型
- 公有云优点
- 更低的开销:在大部分场景下,用户按需购买资源,节约了开支
- 更低的运维成本:用户无须再运维各类计算资源,节省了大量的人力开销
- 高度可扩展:大部分的公有云都有能力提供海量的计算资源,应用可以在短时间内按需迅速扩展
- 高可用:提供遍布世界的站点和高可用区,帮助用户节省了大量用于实现高可用和容灾的时间和精力
- Serverless与公有云服务在理念上天然契合。两者都强调将应用服务运营中非核心的要素移出用户的关注范围,简化复杂度,提高效率。Serverless的流行和公有云服务提供商的大力推广有着非常大的关系。其中,AWS在2014年推出AWS Lambda成为这个领域走向高速发展的一个重要标志。
Amazon Web Services
- Amazon Web Services即AWS,是目前市场份额最大的公有云服务提供商之一。目前它在世界5个大洲都设置有数据中心
Amazon Web Services云服务列表
- AWS Lambda(https://aws.amazon.com/lambda/)是AWS针对Serverless架构推出的FaaS云服务。AWS Lambda自2014年推出以后受到广泛的关注,也使得Serverless架构变得更加触手可及和流行。
- AWS Lambda大获成功的原因除了其设计和技术特性满足了大家对Serverless计算的期望之外,还得益于其所在平台AWS的成功。在AWS推出Lambda之前,AWS平台上已经提供了大量的云服务,这些服务涵盖主机、网络、存储、PaaS、日志、数据库、CDN、负载均衡、身份验证、大数据及人工智能等各个领域。一个完整的Server-less应用,除了应用本身要实现“无服务器”化之外,其所依赖的第三方服务也应该实现“无服务器”化。
函数式计算平台AWS Lambda
- AWS Lambda的优势
- 成熟度高:AWS Lambda是第一个在主流公有云平台上的Serverless FaaS平台,已经有数年的发展和沉淀。其他平台的推出时间相对较晚(Google和Microsoft都是在2016年才推出相对应的产品)
- 用户基数大:AWS Lambda有较大的用户基数,可以查询到的客户参考案例较多
- 活跃的社区:目前开源社区有不少围绕AWS Lambda展开的开源项目,有的项目改善了用户体验,如Serverless Framework;有的则增强了功能,如Apex和LambCI
- AWS的整合:AWS Lambda天然和AWS平台上的服务有良好的集成
Microsoft Azure
- Microsoft Azure是微软公司推出的公有云服务,是目前市场份额位居前列的公有云服务。根据资料显示,目前Azure收入的增长速度超过了其最大的竞争对手AWS
- Microsoft Azure也在2016年推出了事件驱动的函数式云计算服务Azure Functions,Azure Functions支持用户以多种语言进行函数的开发,包括Java、Node.js、PHP、C#、F#、Bash及Microsoft Windows的PowerShell脚本。Azure支持按用量收费,提供灵活的收费模型
函数式计算平台Azure Functions
- Azure Functions除公有云的版本之外还提供私有化(On-premises)部署的版本Azure Functions Runtime。用户可以通过将Azure Functions部署在私有数据中心来搭建Serverless计算平台。
- Azure Functions的功能可圈可点
- 完整性。Azure Functions是一个功能完备的Serverless FaaS平台
- 整合:Azure Functions天然与Azure云平台上各类服务有良好的集成
- 平台:对于使用微软体系产品和工具构建IT能力的企业而言,Azure Functions是Serverless转型的首选平台
- 私有化:提供带商业支持的私有化部署版本,可满足不同用户的需求
Google Cloud Platform
- Google Cloud Platform是Google公司推出的公有云服务。2016年,Google Cloud Platform推出了Google Cloud Functions平台(https://cloud.google.com/functions/)加入Serverless领域的竞争。同为FaaS平台,Google Cloud Functions与AWS Lambda和Microsoft Azure在功能上最大的区别在于Google Cloud Functions目前仅支持JavaScript作为函数开发语言,运行环境为Node.js
AWS Lambda、Microsoft Azure Functions及Google Cloud Functions支持的开发语言
- 2018年7月Google公布了开源项目Knative(https://github.com/knative/)。Knative定位为Kubernetes的Serverless插件。Knative推出后得到了Pivotal、IBM以及Red Hat的支持。Knative提供基于容器的Serverless FaaS平台能力
阿里云
- 阿里云是阿里巴巴旗下的公有云服务,也是目前国内市场份额最大的公有云服务提供商。根据2018年年初的报道,目前阿里云已经成为世界上第五大公有云服务提供商。阿里云是国内第一批推出Serverless平台的公有云厂商
- 阿里云的FaaS平台产品是阿里云函数计算(Function Compute,https://serverless.aliyun.com/)
阿里云函数计算应用架构图
- 阿里云函数计算平台的特点
- 事件触发:阿里云函数计算可以被阿里云上的服务事件触发,如阿里云对象存储(OSS)
- 支持语言:阿里云函数计算目前支持的开发语言为Node.js,并计划后续将支持Java及Python。整个函数代码的部署包大小不能超过50MB,部署包解压后的代码不能超过250MB。代码会在一个受限的Linux环境中执行。阿里云贴心地提供了一个Web Shell环境让用户体验函数的执行环境
- 用户体验:阿里云函数计算提供了基于Web的控制台和SDK。用户可以通过Web控制台管理函数应用,也可以通过交互式的命令行来操作
- 服务规格:一个服务下最多包含50个函数和10个触发器。在运行时,函数最长的运行时间为300s,即5min。一个函数的最大并发数为100
- 服务计费:按函数的执行时间计费。收费最小颗粒度可达100ms。计费有两个维度,一是函数调用次数,二是函数执行时间。每个月的前100万次调用及每月前40万GB免费。如果函数在执行过程中涉及公网的数据传输,相关传输的数据量也将进行计费
- 用户生态:官方文档比较完备,用户手册、开发手册、API文档及演示视频等一应俱全。同时还提供了一些典型场景的案例参考。更多内容可参考阿里云栖社区的博客,其中有一些案例和技术分享
腾讯云
- 无服务器云函数(Serverless Cloud Function,SCF)是腾讯云推出的函数式计算平台(https://cloud.tencent.com/product/scf)。根据官方的资料,腾讯云SCF发布日期是2017年4月26日,而阿里云的Function Compute的发布日期为2017年4月27日
- 腾讯云Serverless平台的特点
- 函数运行时:腾讯云SCF目前支持Python、Java及Node.js作为函数的开发语言。用户可以以压缩包的形式从本地上传代码,也可以引用腾讯云对象存储中的代码文件
- 事件触发:目前腾讯云SCF支持的事件触发源有腾讯云对象存储COS、定时器、腾讯云消息服务CMQ,以及用户手动通过API及控制台触发
- 服务规格:每个函数将在一个基于CentOS Linux的环境中被执行。函数执行的内存范围为128MB至1536MB,单个区域支持的最大函数定义数量为20个,函数执行的最大时长为300秒,最大的并发数为5。如果需要更高的并发则需要联系客服
- 计费方式:和阿里云类似,腾讯云SCF通过资源的使用量(内存的使用量,单位为GB)以及调用的次数进行计算。每个月提供40万GB和100万次调用的免费计算量。
- 用户生态:产品的文档说明比较清晰,也提供了一些入门的教程和示例
- 即将发布的Serverless2.0功能非常值得期待(service、devops、运维监控等)
Serverless与私有化部署
- 公有云的优点是节约了用户大量的管理成本,缺点是削弱了用户对基础架构的控制力。此外,许多用户,尤其是大企业,对公有云一直怀有的担忧,便是其安全性
- 和公有云相比,在私有环境中构建Serverless平台,在技术上并没有什么障碍。由于容器技术已比较成熟,通过Docker和Kubernetes这样的技术平台,用户可以在私有的数据中心快速方便地构建和管理庞大的计算集群。因此,当前绝大多数可以在私有云上部署的Serverless平台方案底层都是基于容器技术实现的
OpenWhisk
- OpenWhisk(https://openwhisk.apache.org)是一个开源的Serverless FaaS平台。这个源于IBM的Serverless平台目前由Apache基金会进行孵化和管理。OpenWhisk是一个功能完备的FaaS平台,包含事件驱动及函数执行时等核心组件。OpenWhisk可以运行在不同的基础架构上,包括各类物理机、虚拟机、容器平台(如Kubernetes)、PaaS(如OpenShift)、公有云(如AWS和Azure等)和私有云(如Open-Stack)环境中
OpenWhisk项目主页
Fission
- Fission( https:// fission.io/)是 Platform9公司推出的一个开源 Serverless框架
Serverless框架Fission
- 用户可以在 Kubernetes集群上运行 Fission以提供 FaaS平台服务。通过 Kubernetes的容器编排能力, Fission对底层的容器化函数执行环境进行调度和编排。Fission目前支持的语言非常广泛,包含各类常见的编程语言,如 Node.js、 Python、 Java、. NET、 Go、 PHP、 Ruby、 Perl及二进制执行文件等,用户还可以根据需要进行扩展。Fission还提供了函数的编排能力。通过 Fission Workflows,用户可以定义并执行函数调用链
Fission技术架构图
Kubeless
- 和 Fission相似, Kubeless也是运行在 Kubernetes平台之上的 FaaS。Kubeless官方强调其是 Kubernetes原生( Kubernetes native)的 Serverless实现。Kubeless在设计之初就引用了许多 Kubernetes原生的组件,如 Service、 Ingress、 HPA( Horizontal Pod Autoscaler)等。目前 Kubeless支持的编程语言有 Python、 Ruby、 Node.js和 PHP。用户可以通过定制容器镜像来自定义函数的执行环境
Serverless框架Kubeless
OpenFaaS
- OpenFaaS( https:// github.com/ openfaas)是一个基于容器技术构建的 Serverless FaaS平台。和 Fission、 Kubeless不同的是, OpenFaaS除了支持 Kubernetes外,还支持 Docker Swarm
Serverless FaaS平台OpenFaaS
OpenFaaS支持Docker Swarm
- Fission和 Kubeless都倾向于向用户隐藏底层容器技术的细节。在 OpenFaaS中函数是以容器的形式定义的,容器对用户而言并不是抽象的,用户在定义函数时将指定具体的容器镜像。这对于一些容器技术爱好者而言是一个优点
- OpenFaaS项目还维护了一个应用市场 OpenFaaS Store,用户可以从这个软件市场上查找和快速部署社区验证过的函数应用
OpenFaaS函数应用市场
Fn
- 是 IronFunctions团队成员加盟 Oracle后的产物。Fn项目的特点是基于容器技术( Container native),支持多个不同的容器编排平台,包括 Kubernetes、 Docker Swarm及 Mesosphere,支持在不同的私有云和公有云平台上进行部署
- Fn可以兼容 AWS Lambda的函数代码,用户可以将 AWS Lambda的代码导入 Fn中运行。不难想象,当 Oracle在其云服务 Oracle Cloud上提供以 Fn为基础的 FaaS服务时,用户可以更容易地将他们的 Serverless应用从 AWS Lambda上迁移到 Oracle Cloud
Serverless平台Fn
小结
私有化部署的 Serverless平台对比
- 容器技术已成为当前云计算的一个重要基石,也是 Serverless实现的一个重要技术手段。通过容器,用户可以很方便地打包各种编程语言的运行环境。通过容器编排, Serverless平台可以很快速地将其部署到庞大的计算集群中去
Serverless框架和工具
- 当前 Serverless还没有建立通用的行业规范,每个 Serverless平台的用户接口都不尽相同。用户在同时使用多个 Serverless平台时变得困难重重。这些因素都让 Serverless应用的开发和调试变得相对困难。为了解决这个问题,社区出现了一批框架和工具,以帮助用户降低 Serverless应用开发、调试和部署的复杂度,提高 Serverless应用开发的工作效率。
Serverless Framework
- Serverless Framework( https:// github.com/ serverless/ serverless)是一款帮助用户构建、部署和管理在不同 Serverless平台之上应用的命令行工具。
- Serverless Framework是由 Node.js编写的一个命令行工具。通过这个命令行工具,用户可以选择不同 Serverless平台的应用模板快速创建出一个 Serverless应用的框架。通过简单的命令,用户可以将应用发布到指定的 Serverless平台上
Serverless Framework示例
- 当前 Serverless Framework支持的平台有 AWS Lambda、 Azure Cloud Functions、 Google Cloud Functions、 IBM OpenWhisk、 Kubeless以及 Webtask等。
Chalice
- Chalice( https:// github.com/ aws/ chalice)是 AWS官方支持的开源项目。Chalice是基于 Python实现的一个简单框架,用于简化用户定义和部署 AWS Lambda应用。
- 用户通过命令行可以快速建立一个名为 helloworld的项目的框架。
$ pip install chalice
$ chalice new-project helloworld
$ ls-la
drwxr-xr-x .chalice
-rw-r--r-- app.py
-rw-r--r-- requirements.txt
- Chalice让用户可以用 Python的语法定义 AWS Lambda和 API Gateway的对象。下面示例项目的代码定义了一个 AWS Lambda应用及一个函数,并将 URL路径“/”与该函数进行了关联。
from chalice import Chalice
app = Chalice( app_name =" helloworld")
@app.route("/")
def index():
return {" hello": "world"}
- 通过 Chalice命令行,用户可以快速地将这个应用部署到远端的 AWS Lambda平台上。部署完毕后,就可以马上访问这个 Serverless应用了。
$ chalice deploy
...
Initiating first time deployment...
https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/
$ curl https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/
{"hello": "world"}
小结
Serverless框架与工具比较
Serverless后台服务
- 在 Serverless架构中,除了应用的无服务器化外,应用所依赖的第三方服务的无服务器化也是一块庞大的内容。它们的一个共同特点就是无须用户运维,用户无须关心这些服务底层的基础设施。
- 公有云服务:对用户而言无疑是管理成本最低的选择。AWS的数据库服务 DynamoDB、 Azure的数据库服务 Cosmos DB、 Auth0等服务都是 Serverless后台服务的典型例子。随着时间的推移,各大公有云平台的服务类型日趋丰富,用户构建 Serverless应用所用的后台服务的选择也越来越多。
- 私有云服务:开源的领军公司 Red Hat公司推出了基于 Docker和 Kubernetes的 PaaS平台 OpenShift。通过像 OpenShift这样的容器 PaaS,用户可以快速实现 Everything-as-a-Service或者 xPaaS。这使得在私有数据中心搭建 Serverless后台服务的复杂度大大降低
小结
- 虽然公有云是 Serverless的主战场,但是私有化的 Serverless实现仍然有一定的市场空间。随着容器技术的日益成熟,用户在私有化环境中构建和管理大规模计算集群的门槛变得空前低下。OpenWhisk、 Fission、 Kubeless和 OpenFaaS等开源项目可以让容器平台快速获得 Serverless FaaS的能力,从而实现私有环境的 Serverless FaaS平台。
资料
- Serverless相关资源列表:https://github.com/anaibol/awesome-serverless
- Serverless导览图的参考地址:https://github.com/cncf/wg-serverless
- CNCF基金会维护的关于构建、设计和运行云原生应用的资源导览图,地址:https://github.com/cncf/landscape
- 公有云市场份额报告参考来源:https://www.skyhighnetworks.com/cloud-security-blog/microsoft-azure-closes-iaas-adoption-gap-with-amazon-aws/
- Google公布了开源项目Knative(Kubernetes的Serverless插件,https://github.com/knative/)
- OpenShift是 Red Hat支持的一个开源容器平台项目,项目主页:https:// www.openshift.org