当前大多数公司在运营应用产品时,无论是选择公有云还是自建的数据中心,都会面临服务器数量预估、存储容量规划和数据库的选型等问题。同时需要在基础设施之上部署依赖软件,以运行应用程序。当前是否存在一种简单的架构模型能够满足我们这种应用场景?当然,这个架构已经存在许久,它就是今天软件架构世界中很热门的一个话题——Serverless。
现有技术
Serverless 的核心思想是让作为计算资源的服务器不再成为用户所关注的一种资源。其目的是提高应用交付的效率,降低应用运营的工作量和成本。以 Serverless的思想作为基础实现的各种框架、工具及平台,是各种Serverless 的实现(Implementation)。Serverless不是一个简单的工具或框架。用户不可能简单地通过实施某个产品或工具就能实现 Serverless 的落地。但是,要实现 Serverless 架构的落地,需要一些实实在在的工具和框架作为有力的技术支撑和基础。
Serverless技术的发展
CNCF的Serverless工作小组也对目前业界存在的Serverless资源做了一次梳理。基于其中比较成熟的平台和方案,CNCF发布了一份Serverless资源的导览图(Serverless Cloud Native Landscape)
随着 Serverless 的日益流行,这几年业界已经出现了多种平台和工具帮助用户进行 Serverless 架构的转型和落地。目前市场上比较流行的 Serverless 工具、框架和平台 有:
AWS Lambda,最早被大众所认可的 Serverless 实现。
Azure Functions,来自微软公有云的 Serverless 实现。
OpenWhisk,Apache 社区的开源 Serverless 框架。
Kubeless,基于 Kubernetes 架构实现的开源 Serverless 框架。
Fission,Platform9 推出的开源 Serverless 框架。
OpenFaaS,以容器技术为核心的开源 Serverless 框架。
Fn,来自 Oracle 的开源 Serverless 框架,由原 Iron Functions 团队开发。
knative,以kubernetes为依托的云原生serverless框架
列举的 Serverless 实现有的是公有云的服务,有的则是框架工具,可以被部署在私有数据中心的私有云中(私有云 Serverless 框架 OpenWhisk、Fission 、OpenFaaS及knative)。每个 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与云
Serverless与公有云
按照云的运维责任所有人来划分,云服务可以分为公有云(Public Cloud)、私有云(Private Cloud)以及混合云(Hybrid Cloud)其中,公有云优点:
· 更低的开销:在大部分场景下,用户按需购买资源,节约了开支
· 更低的运维成本:用户无须再运维各类计算资源,节省了大量的人力开销
· 高度可扩展:大部分的公有云都有能力提供海量的计算资源,应用可以在短时间内按需迅速扩展
· 高可用:提供遍布世界的站点和高可用区,帮助用户节省了大量用于实现高可用和容灾的时间和精力
Serverless与公有云服务在理念上天然契合。两者都强调将应用服务运营中非核心的要素移出用户的关注范围,简化复杂度,提高效率。Serverless的流行和公有云服务提供商的大力推广有着非常大的关系。其中,AWS在2014年推出AWS Lambda成为这个领域走向高速发展的一个重要标志。
Serverless与私有化部署
· 公有云的优点是节约了用户大量的管理成本,缺点是削弱了用户对基础架构的控制力。此外,许多用户,尤其是大企业,对公有云一直怀有的担忧,便是其安全性
· 和公有云相比,在私有环境中构建Serverless平台,在技术上并没有什么障碍。由于容器技术已比较成熟,通过Docker和Kubernetes这样的技术平台,用户可以在私有的数据中心快速方便地构建和管理庞大的计算集群。因此,当前绝大多数可以在私有云上部署的Serverless平台方案底层都是基于容器技术实现的