本文作者:何文强 — CODING 高级解决方案架构师 具有一线互联网、物联网独角兽、全国股份制银行、新型智慧交通等跨行业从业经历,历任 Java 开发高级工程师、DevOps 技术专家、高级研发经理等职,对微服务、敏捷、DevOps、容器技术有深刻的理解和丰富的实践。
无服务器(Serverless)架构
2012 年,iron.io 首次提出 Serverless 概念。2014 年,AWS 发布 Lambda 开启 Serverless 商业化时代,AWS Lambda,最早被大众所认可的 Serverless 实现。随后各大云厂商争相推出自己的 Serverless 服务、框架或工具。
无服务器架构背景
计算机算力发展演进
计算机发展经历了大型机、小型机、PC 机、虚拟机和云服务器(大多数云服务器也是虚拟机)。
在大型机时代,软硬一体是其鲜明的特征,只有专用的软件才能在大型机上运行,编程语言打多采用机器语言或汇编语言等计算机低级语言。
在 PC 机时代,采用精简指令集的通用处理器开始盛行,伴随着操作系统的出现,软件和硬件开始分离。PC 机上可以运行操作系统支持的各种各样的软件。
在云计算时代,云服务厂商提供 IaaS、PaaS、SaaS 能力,实现从硬件到软件的免托管和开箱即用的能力。
IaaS/PaaS/SaaS
IaaS
把计算基础(服务器、网络技术、存储和数据中心空间)作为一项服务提供给客户。它也包括提供操作系统和虚拟化技术、来管理资源。消费者通过 Internet 可以从完善的计算机基础设施获得服务。
优点:
- 无需关心底层硬件结构原理;
- 可按需扩展基础架构规模,以便支持不断变化的工作负载;
- 灵活、创新而且按需提供的服务。
PaaS
平台即服务(PaaS)提供商将硬件和软件托管在自己的基础架构上,并通过互联网连接以集成解决方案、解决方案堆栈或服务的形式将该平台交付给用户。
PaaS 主要面向开发人员和程序员,它允许用户开发、运行和管理自己的应用,而无需构建和维护通常与该流程相关联的基础架构。
开发人员只需编写代码、构建和管理应用,不再有软件更新或硬件维护方面的麻烦。系统将会提供构建和部署环境。
优点:
- 开发应用,更快地进行交付;
- 只需数分钟,就可以将新的 web 应用程序部署到云中;
- 使用中间件即服务,降低复杂性。
SaaS
软件即服务提供了一种完善的产品,其运行和管理皆由服务提供商负责。人们通常所说的软件即服务指的是终端用户应用程序。使用 SaaS 产品时,服务的维护和底层基础设施的管理都不用用户操心,用户只需要考虑怎样使用 SaaS 软件就可以了。
优点:
- 可以注册并可快速使用创新的业务应用;
- 在任何已连接的计算机上都可以访问应用和数据;
- 数据在云中,如果计算机出现故障,数据也不会丢失;
- 这种服务可以根据使用需要进行动态扩展。
公有云发展
2006 年,Amazon Web Service(AWS)发布第一款计算产品 EC2,拉开了公有云的序幕;2008 年,Google 发布 Google App Engine 平台,宣布 Google 正式进入公有云市场;2009 年,阿里云宣布成立,这是过年最早(也是目前国内市场份额最大)的云厂商;2010 年,微软发布 Microsoft Azure Paas,微软正式进入公有云市场;2010 年,腾讯发布腾讯云品牌,腾讯正式进入公有云市场;2011 年~2016 年,云计算进入快速发展期,越来越的 IT 企业加入云计算的竞争中,例如 IBM、Oracle、HP、Vmware 等;2016 年~至今,公有云市场格局由快速发展走向成熟稳定,国外头部企业主要有 AWS、Azure、Google Cloud,国内头部企业主要有腾讯云、阿里云、华为云。同时一些面向垂直行业的云产商也得到了发展,例如以擅长存储的七牛云、围绕 K8s 生态的青云等。
Serverless 市场述求
- 云计算的普及和应用规模的快速扩张,技术一方面要支撑业务的高速发展,另一方面需要根据业务变化对系统进行抽象、重组和重构,以 PaaS 的方式对大多数企业而言成本高、难度大,因此需要新的方法论和工具来降低平台构建的成本,同时实现快速迭代演进来满足市场需求,保持竞争力;
- 企业交付价值的方式,正在被数字技术重塑。企业在面临巨大的竞争压力和不确定性,快速响应市场变化成为关键,需要一种新的交付模式来降低交付周期,保持市场竞争力;
- 面对多元化的客户诉求和更快速的市场响应,如何在满足用户需求、保持企业竞争力的同时能够有效降低研发支持,成为企业数字化转型面临的必然课题;
- 企业根据自身业务诉求快速获取云产品能力并快速灵活的与企业应用进行集成,实现能力快速按需获取和弹性组合成为新趋势;
- 大多数企业渴望将同质化的、负担繁重的基于服务器等基础设施的开发和运维等工作从未来云上应用开发中移除,借助云上丰富的托管服务能力,以搭积木的方式构建弹性、可靠、低成本的系统或应用。
Serverless 发展历程
Serverless 简介
无服务器架构是指应用程序使用第三方 Function 和服务,但不需要管理服务器。无服务器架构主要包含了 FaaS 和 BaaS。
FaaS(Function as a Service,函数即服务)
包含服务器端业务逻辑的无状态 Function。这些 Function 运行在独立的容器里,基于事件驱动,并由第三方厂商托管,如 AWS Lambda 或者 Azure Functions。
BaaS(Backend as a Service,后端即服务)
使用第三方服务(如 Firebase、Auth0)来达成目的。使用 BaaS 的应用程序通常是富客户端应用程序,如 SPA 或移动 App。客户端负责处理大部分的业务逻辑,其他部分则依赖外部服务,如认证、数据库、用户管理等。
无服务器计算主要供应商
无服务器架构使用场景
- 小程序 / Web / Mobile / API 后端服务;
- 大规模批处理任务处理;
- 短暂、无状态应用,对冷启动实践不敏感;
- 基于事件驱动架构的在线应用和离线数据处理。
无服务器架构的优势和不足
优势
- 降低运营成本
Serverless 是非常简单的外包解决方案。它可以让您委托服务提供商管理服务器、数据库和应用程序甚至逻辑。在降低成本上包含了两个方面,即基础设施的成本和人员(运营/开发)的成本。
- 降低开发成本
IaaS 和 PaaS 存在的前提是,服务器和操作系统管理可以商品化。Serverless 作为另一种服务的结果是整个应用程序组件被商品化。
- 高扩展能力
Serverless 架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。从基本的基础设施方面受益最大的好处是,您只需支付您所需要的计算能力。
- 缩短创新周期
小团队的开发人员正可以在几天之内从头开始开发应用程序并部署到生产。
不足
- 有状态管理复杂
要想实现自由的缩放,无状态是必须的,而对于有状态的服务,使用 serverless 这就丧失了灵活性,有状态服务需要与存储交互就不可避免的增加了延迟和复杂性。
- 延迟高
应用程序中不同组件的访问延迟是一个大问题, serverless 应用程序是高度分布式、低耦合的,这就意味着延迟将始终是一个问题。
- 本地测试
对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试。
无服务器架构发展趋势
- 更细粒度的计算资源
目前主流的 Serverless/FaaS 技术底层的计算环境通常是容器比如 Docker,容器技术是一种比硬件虚拟化更轻量的实现,用户可以在虚拟机上运行大量的容器,可以更大程度的利用计算资源。
而 Serverless 的需求可能是更细粒度的计算资源,比如最近主流云厂商的产品容器的规格已经支持千分之一核,未来 Serverless 在细粒度资源使用上将发挥无限可能。
- 跨云厂商的统一的调度模型
由于云厂商实现方式及不同产品的差异性,容器的调度框架选择不尽相同,比如有的厂商其 Serverless 产品是基于 Kubernetes 管理云主机集群进行容器编排及调度比如华为的 CCI,而有的产品比如阿里云的函数计算产品是基于自研的 Agent 进行容器调度。跨云平台的 Serverless 已成为不可忽视的因素。
- 生态圈多样化,应用场景更加丰富
- 积木式的弹性函数供应
- Serverless 计算将持续提高计算密度,实现最佳的性能功耗比和性能价格比
《数字化 IT 从业者知识体系》背景
数字化和可持续发展是中国企业未来发展的两大主题,掌握数字化知识,具备数字化能力,应用数字化技术是我们 IT 从业者未来核心竞争力所在。《数字化 IT 从业者知识体系》的初衷是为 IT 从业者提供的系统性的数字化知识体系,内容涵盖管理实践、工程实践、技术实践三个层次,涉及软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四大方面。
在接下来的《数字化 IT 从业者知识体系》系列文章,何文强将从软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四个方面,为大家进行逐一分享介绍:
1. 软件开发方法主要包括瀑布、敏捷、精益等;
2. 应用技术架构主要包括微服务架构、服务网格架构、无服务器架构、分布式多运行架构等;
3. 应用部署与管理主要包括但不限于虚拟化技术、容器技术与容器编排等;
4. 软件交付与协作主要包括但不限于 CMMI、ITIL、DevOps 等。
相信该知识体系有利于 IT 从业者构建丰富的技术体系、全面的技术视野和系统的能力建设。欢迎大家前往《数字化 IT 从业者知识体系》话题进行详细阅读。