Serverless无服务器架构详解

本文对serverless架构的基础概念,工作原理,应用场景以及具体产品进行详细解析 。
基础概念serverless:无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是云原生架构的核心组成部分 。
通俗来说,如果将购买一台物理服务器比作 买车 ,购买云服务器就类似于 租车 (租赁期间需要驾驶和维护,且即使闲置也需付费),那么serverless则类似于 出租车 (只需乘坐,按里程计费) 。
从技术层面来说,我们可以简单理解为: serverless = FaaS + BaaS  。一个完整的serverless应用一般由FaaS层负责无状态的计算,由BaaS层负责状态的存储:

  • FaaS(函数即服务,Function as a Service):将函数代码托管给云产商,以服务形式运行,支持事件触发 。代表产品有腾讯云SCF、AWS Lambda等 。
  • BaaS(后端即服务,Backend as a Service):指云平台提供的后端组件整合,开发者无需开发和维护后端服务,通过API/SDK的调用便可获得例如数据存储(对象存储、云数据库、云中间件等)、消息推送、账号管理、地图定位、AI、IoT等能力 。

Serverless无服务器架构详解

文章插图
 
特点及优势:
  1. 免运维 :无需管理基础设施 —> 可以专注业务开发
  2. 按量计费 :闲时不计费 —> 降低成本
  3. 弹性伸缩 :峰时自动扩容 —> 无需考虑可用性问题
劣势及适用场景:
  1. 冷启动延迟: 一定时间内的首次调用可能需要冷启动(如进行加载代码、拉起容器等任务)—> 适合对响应速度要求不是太高的接口,更适合异步任务,不适合启动耗时久的JAVA项目
  2. 开发和管理设施: serverless应用的调试、测试、排障、发布等设施暂不成熟 —> 目前更适合后端逻辑不太复杂的轻量级应用
  3. 云产商绑定: 不同云产商提供的组件(如存储)接口不同,可能增加未来迁移成本 —> 使用标准化框架,并在设计时尽量隔离通用逻辑层和BaaS依赖层
工作原理各个平台对云函数的实现在原理上基本相似,核心都是动态的启动实例去执行函数代码,且完成后实例会保留一定时间窗口 。大致的底层架构如下图,其中步骤(1) (2) (3) (4) 为冷启动调用流程,(5) 为非冷启动调用 。
Serverless无服务器架构详解

文章插图
 
1.函数注册用户在控制台(或命令行)提交函数代码到云平台,并进行函数配置 。代码一般会被作为静态资源保存(如对象存储),而函数的元信息会被存入数据库中(如MySQL) 。
2.函数触发云函数的触发可以分为同步和异步两种情况:
  • 如果是同步请求则等待函数执行结果后返回
  • 如果是异步请求则可以投递到队列后直接返回
3.函数执行云函数的执行可以分为窗口内首次执行(冷启动)和非首次执行两种情况:
  • 如果是首次执行,则需要进行宿主机调度,在宿主机拉起容器实例,下载函数代码,然后执行代码 。
  • 首次执行完毕后Docker容器不会立即关闭,会等待一定时间周期,如果此时有新的请求进来,会被分配到该容器,直接运行代码 。
从执行的原理也可看出,云函数理论上是支持无限自动扩容的 。
冷启动问题由于serverless按量计费的特点,其实现机制就必须要在函数调用时才去启动运行环境,也就是冷启动问题 。虽然保留一定时间可以让后续的请求无需加载,但如果在极短时间内并发大量请求,还是会同时启动多个容器,影响首个请求的响应时间 。前面也说到,云函数的特性和机制决定了它的应用场景,对于同时要求高并发、低时延的场景并不是特别适合 。
对于冷启动问题,下面以腾讯云的 


    推荐阅读