Serverless架构模式简介
一. 简介
Serverless是一种无服务的架构,类似aws lambda。Serverless与跟传统架构不同,由开发者实现的服务端逻辑运行在无状态的计算容器中,它是由事件触发,短暂的(可能只存在于一次请求过程中),完全被第三方管理。另一种思考方式,这是函数服务‘Functions as a Service / FaaS’。
其实Serverless和FaaS是在不同维度概括述这个新架构的特性。Serverless从部署运维形态角度,强调其无需关注底层执行环境的优势;而FaaS则是描述是它以服务化的方式提供函数式计算能力。
在这个领域 AWS Lambda是先行者,随后其他厂商相继推出了自己的函数服务,比如Google Cloud Functions和阿里云函数服务等等。
二. 架构分析
Serverless应用通常基于的Event-driven编程范型。它的开发方式和经典的Event-condition-action (ECA)非常类似。其通常包含如下方面
- 事件(Event)的触发器:用于描述触发应用逻辑
- 事件处理器: 应该是无状态、原子化的任务,并能够从系统的上下文中进行数据交换。
- 事件的派发和调度:开发者可以声明事件处理器对底层计算资源需求,由系统根据需求自动分配计算资源并调度执行。
和过于技术范的“Functions as a Service”相比,Serverless显然更容易深入人心,然而这个名词也容易给人带来误解。Serverless应用并非不需要服务器作为计算资源,正确的理解是应用开发人员无需关注计算资源的获取和运维,由平台来按需分配计算资源,并保证应用执行的SLA。
正因为上述目标,Serverless/FaaS平台对底层计算环境的提出了特殊要求:
- 快速启动:需要对事件请求快速响应,能够在亚秒级完成启动
- 弹性扩展:可以按照应用需求,自动在群集上分配资源,按需伸缩,无需人工干预。
- 良好的隔离性:不同应用之间不相互干扰
- 健壮性:应用逻辑执行失败后,可以快速调度并重新执行
看到这里,我们可以看到容器技术(LXC, CGroup等)非常适合用于提供Serverless的计算环境。每次系统接收到事件,动态启动容器来执行业务逻辑即可。
下面介绍一个基于Docker的
Serverless平台的一个高层次的参考架构,要点如下:
- Docker容器作为事件处理的计算环境运行
- 将函数化事件处理逻辑打包成为Docker镜像,利用镜像仓库进行管理和分发
- 事件调度器配合Docker集群来调度事件处理执行
利用Docker容器的方法实现Serverless平台,有如下优势:
- 利用Docker提供的轻量级OS虚拟化能力,能够敏捷地创建事件执行运行环境,并提供基本的资源、安全隔离能力
- 使用Docker镜像和镜像仓库,简单标准地对事件处理逻辑进行打包和在分布式环境下进行软件分发;通过Docker镜像的版本管理和追踪能力,可以管控应用发布,保证应用在大规模分布式环境中部署的一致性。
- 在Docker容器内部,开发人员可以自由选择使用不同的语言和框架进行事件处理,容器之间不会相互干扰。
- Docker容器提供了标准化的外界环境交互的能力,应用逻辑可以通过环境变量、文件卷或者网络来访问上下文状态信息。
- 对不同实现的Docker容器进行统一的标准化运维处理,大大减少运维的复杂性,可以更好地实现自动化运维
- 基于Docker编排技术(比如阿里云容器服务等)提供的集群管理和编排能力,可以大大简化事件调度器的实现
- 受益于成熟的Docker的DevOps流程,可以大大提升开发交付效率
版权声明:本文为chenglinhust原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。