阿里巴巴|阿里云 FaaS 架构设计

阿里巴巴|阿里云 FaaS 架构设计

文章图片

阿里巴巴|阿里云 FaaS 架构设计

文章图片

阿里巴巴|阿里云 FaaS 架构设计

文章图片

阿里巴巴|阿里云 FaaS 架构设计

文章图片

阿里巴巴|阿里云 FaaS 架构设计

文章图片


一、基于 ECS 的 FaaS 【阿里巴巴|阿里云 FaaS 架构设计】在阿里云传统架构 , 用户通过互联网进入到负载均衡系统中 , 再通过负载均衡把系统的请求调度到不同的机器上去 。 这种传统的架构带来的问题比较多 , 一方面是多应用配比比例容易失衡 , 造成资源浪费;另一方面是镜像升级比较繁琐 , 整个过程的开机速度在分钟级 , 扩容速度也相对较慢 。
(1)架构设计
基于 ECS 的 FaaS 架构设计同样也是通过互联网进入 , 落到 SLB 负载均衡上 。 SLB 负载均衡这个系统是部署在阿里云内部的 , 主要用于抵挡 DDoS 攻击及请求均衡到多台 api_server 上 。 api_server 再发起函数的 CRUD 操作 , 并向 Scheduler 申请容器 。
Scheduler 管理容器在 worker 的放置 , 请求落在容器上的调度分发 。 用户所在 worker 就是我们称之为的计算节点 , 如果需要访问用户的 VPC 环境则在计算节点上通过 ENI 网卡打通到用户 VPC 环境 。

(2)多租户多应用部署的支持
namespace 是 linux 前几年推出的一个资源隔离方案 , 可以在内核层面做一些设置指定一部分进程固定 。 并且可以在 cgroup 的这一套设置方案里设置 , 控制资源的访问 。 在 namespace、cgroup 整套方案下 , 衍生出了 container , 社区中常用的的 Docker 方案把镜像操作系统中的很多细节包装成一个方案 , 用户看到了一个相对比较完整的操作系统 , 把用户当成一个单个用户放置在虚拟机当中 。 这就是一个 vm , 相当于说一台 ECS , 这里就是操作系统层面 , 把整个 cpu、memory、包括设备全部给屏蔽掉 , 在上面用 cgroup 封一层 , 对应的就是 Docker 容器 。

应用放置策略包括用户独占虚拟机、同 VPC 独占虚拟机、资源访问权限一致的 APP 混部在同机器 。 把两个不同的用户混在一个 vm 下 , 也就是 ECS 上面 , 对于用户之间来说是存在风险的 。 为了屏蔽掉共用 kernel 带来的风险 , ECS 上的实现 , 我们单个 ECS 只有一个租户 , 这样处理也存在一些问题 , 最突出的就是对于低频调用函数资源使用率低 。
(3)快速水平弹性扩容
如何做到水平弹性扩容?
① 通过应用容器部署 , 可以定制一些特别的语言、Runtime容器、通用LIB/SDK , 并保持社区生态一致 , 这样就不需要另外去下载 , 用户用起来也比较方便 , 启动速度也非常快 。
② 通过设置公共容器镜像、容器镜像写入ECS镜像、ECS镜像启动机器、快速补充机器池等控制机器资源池 , 从而能够兼顾性能与成本 。
③ 在池化的机器中池化容器创建、代码目录延迟挂载、提前启动runtime、提前health check , 用户请求来临的时候需要启动的时间会变得更短 。
④ 通过限制用户应用大小、鼓励拆分业务逻辑、内置SDK/Lib来控制应用大小 。
⑤ 通过P2P镜像分发、避免对下载服务造成冲击、按需加载、降低下载延迟、提升启动速度等完成P2P镜像下载加速 。