本文作者:何文强 — CODING 高级解决方案架构师 具有一线互联网、物联网独角兽、全国股份制银行、新型智慧交通等跨行业从业经历,历任 Java 开发高级工程师、DevOps 技术专家、高级研发经理等职,对微服务、敏捷、DevOps、容器技术有深刻的理解和丰富的实践。
无服务器(Serverless)架构
2012 年,iron.io 首次提出 Serverless 概念。2014 年,AWS 发布 Lambda 开启 Serverless 商业化时代,AWS Lambda,最早被大众所认可的 Serverless 实现。随后各大云厂商争相推出自己的 Serverless 服务、框架或工具。
无服务器架构背景
计算机发展经历了大型机、小型机、PC 机、虚拟机和云服务器(大多数云服务器也是虚拟机)。
在大型机时代,软硬一体是其鲜明的特征,只有专用的软件才能在大型机上运行,编程语言打多采用机器语言或汇编语言等计算机低级语言。
在 PC 机时代,采用精简指令集的通用处理器开始盛行,伴随着操作系统的出现,软件和硬件开始分离。PC 机上可以运行操作系统支持的各种各样的软件。
在云计算时代,云服务厂商提供 IaaS、PaaS、SaaS 能力,实现从硬件到软件的免托管和开箱即用的能力。
IaaS
把计算基础(服务器、网络技术、存储和数据中心空间)作为一项服务提供给客户。它也包括提供操作系统和虚拟化技术、来管理资源。消费者通过 Internet 可以从完善的计算机基础设施获得服务。
优点:
PaaS
平台即服务(PaaS)提供商将硬件和软件托管在自己的基础架构上,并通过互联网连接以集成解决方案、解决方案堆栈或服务的形式将该平台交付给用户。
PaaS 主要面向开发人员和程序员,它允许用户开发、运行和管理自己的应用,而无需构建和维护通常与该流程相关联的基础架构。
开发人员只需编写代码、构建和管理应用,不再有软件更新或硬件维护方面的麻烦。系统将会提供构建和部署环境。
优点:
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 生态的青云等。
无服务器架构是指应用程序使用第三方 Function 和服务,但不需要管理服务器。无服务器架构主要包含了 FaaS 和 BaaS。
包含服务器端业务逻辑的无状态 Function。这些 Function 运行在独立的容器里,基于事件驱动,并由第三方厂商托管,如 AWS Lambda 或者 Azure Functions。
使用第三方服务(如 Firebase、Auth0)来达成目的。使用 BaaS 的应用程序通常是富客户端应用程序,如 SPA 或移动 App。客户端负责处理大部分的业务逻辑,其他部分则依赖外部服务,如认证、数据库、用户管理等。
Serverless 是非常简单的外包解决方案。它可以让您委托服务提供商管理服务器、数据库和应用程序甚至逻辑。在降低成本上包含了两个方面,即基础设施的成本和人员(运营/开发)的成本。
IaaS 和 PaaS 存在的前提是,服务器和操作系统管理可以商品化。Serverless 作为另一种服务的结果是整个应用程序组件被商品化。
Serverless 架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。从基本的基础设施方面受益最大的好处是,您只需支付您所需要的计算能力。
小团队的开发人员正可以在几天之内从头开始开发应用程序并部署到生产。
要想实现自由的缩放,无状态是必须的,而对于有状态的服务,使用 serverless 这就丧失了灵活性,有状态服务需要与存储交互就不可避免的增加了延迟和复杂性。
应用程序中不同组件的访问延迟是一个大问题, serverless 应用程序是高度分布式、低耦合的,这就意味着延迟将始终是一个问题。
对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试。
目前主流的 Serverless/FaaS 技术底层的计算环境通常是容器比如 Docker,容器技术是一种比硬件虚拟化更轻量的实现,用户可以在虚拟机上运行大量的容器,可以更大程度的利用计算资源。
而 Serverless 的需求可能是更细粒度的计算资源,比如最近主流云厂商的产品容器的规格已经支持千分之一核,未来 Serverless 在细粒度资源使用上将发挥无限可能。
由于云厂商实现方式及不同产品的差异性,容器的调度框架选择不尽相同,比如有的厂商其 Serverless 产品是基于 Kubernetes 管理云主机集群进行容器编排及调度比如华为的 CCI,而有的产品比如阿里云的函数计算产品是基于自研的 Agent 进行容器调度。跨云平台的 Serverless 已成为不可忽视的因素。
《数字化 IT 从业者知识体系》背景
数字化和可持续发展是中国企业未来发展的两大主题,掌握数字化知识,具备数字化能力,应用数字化技术是我们 IT 从业者未来核心竞争力所在。《数字化 IT 从业者知识体系》的初衷是为 IT 从业者提供的系统性的数字化知识体系,内容涵盖管理实践、工程实践、技术实践三个层次,涉及软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四大方面。
在接下来的《数字化 IT 从业者知识体系》系列文章,何文强将从软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四个方面,为大家进行逐一分享介绍:
1. 软件开发方法主要包括瀑布、敏捷、精益等;
2. 应用技术架构主要包括微服务架构、服务网格架构、无服务器架构、分布式多运行架构等;
3. 应用部署与管理主要包括但不限于虚拟化技术、容器技术与容器编排等;
4. 软件交付与协作主要包括但不限于 CMMI、ITIL、DevOps 等。
相信该知识体系有利于 IT 从业者构建丰富的技术体系、全面的技术视野和系统的能力建设。欢迎大家前往《数字化 IT 从业者知识体系》话题进行详细阅读。