不改代码也能全面Serverless化,阿里中间件如何破解这一难题?(2)
L2 是通过将应用程序启动后在 RAM 中的指令和数据结构 dump 到磁盘文件,只需要在机器之间拷贝文件即可以达到横向弹性的能力,这个时间消耗主要是数据的网络传输时间+内存拷贝时间,大约在5秒左右就可以完成。L2 的成本开销只有网络磁盘容量,开销极低,可忽略不计。 L2 的每个 SNAOSHOT 对应一个可运行的实例,例如预计一个应用需要最大启动100个实例,那么需要提前生成100个 SNAOSHOT,每个 SNAOSHOT 对应一个运行实例,需要启动时,从远程磁盘加载这个 SNAPSHOT。 此方案通过 L1 和 L2 的组合来达到加速应用启动的目的,在支持一定流量脉冲能力下,可以最大50ms内启动任意应用,平均在10ms内完成。 方案二:应用热复制启动加速方案 L1 采用通过 fork 种子进程达到快速启动的效果,操作系统团队专门为此开发了 fork2 技术,与 Linux Native fork 的关键区别在于可以指定 PID 来 fork 一个进程。
L2 的单个 SNAPSHOT 可以创建多个进程,一对多关系。 两种自研方案的对比
整体来看,方案一的适用场景更广,但是实现成本更高,方案二较适合 FaaS、NBF 这类场景。 和 AWS Lambda 相比 Lambda 为了做到快速扩缩容,要求用户的应用以 Function 为单位开发,Lambda Runtime 动态加载 Function 来快速增加实例。 CSE 则通过将一个应用的多个实例启动后,共享相同的指令数据,抽取出不同的指令数据,每次启动实例只需要加载多实例的差异部分。因此可以透明兼容社区主流技术栈,如 Spring Boot,PHP/Java/Python/Node.JS 等。 CSE 的成本优势 理论模型: Serverless 方式应用占用的实例数随时在变化,因此可以多个应用错峰使用同一台机器。 量化分析: Serverless 的成本优势是可以和 CPU Share &离在线混部等调度技术的成本优势做叠加,能给最终用户一个更优的总体成本。 CSE 的代码样例 HSF demo
Spring Boot demo
CSE 的生产实践 某电商业务 A:Serverless 化后,机器数量从11台降低到2台(2~10台之间波动),某促销节,服务流量峰值从数千瞬间飙到十多万,CSE 瞬间弹性扩容,从2台-->5台-->10台,流量峰值回落后又缩容到2台。 某电商业务 B:Serverless 化后,机器数量从4台到2台(2~10台之间波动)。 某电商业务 C:之前固定4台机器,Serverless 化完成后,机器数量变成1台(1~4台之间波动),预发可实现0 - 1台实例之间波动。 本文作者: (编辑:ASP站长网) |