实际日期08-26
架构设计
下面是Fission的函数架构设计图
对应这个图,其实可以拆解出几个重要的模块
Router(流量接入)
在流量接入层,会根据规则进行流量的拦截、分发(集群、函数、版本层级维度)、统计等操作。此部分还包含一些其他的触发源例如消息队列、定时器等等
Executor(控制模块)
伸缩决策模块
伸缩决策模块,会根据流量接入层的统计数据和用户的配置需求,决定函数应该如何在集群上部署,包括在哪里,部署多少。决策信息会具有一定的提前,以给调度模块时间完成变更。
- 通过滑动窗口避免频繁的变更
- 通过流出安全冗余避免变更不及时
- 通过混合指标,例如访问量、CPU、Memory等,精准预测
调度模块
调度模块,负责将函数计算自己定义的资源CRD(Custom Resource Define)和K8s默认资源根据决策模块的决策信息,调度到位。
- 提前拉镜像文件,压缩容器启动的时间
- 数据流传输的高效性
- 资源池,可用资源池已实现快速的响应
Controller(用户接入模块)
和函数计算的用户进行沟通,包括函数构建、版本的发布等
Function(函数运行实例)
可能是一段可执行代码,也可能是一个容器(不能局限在Fission中,不重视容器充当函数的情况)。在这一层应该给用户访问基础设施服务以很大的便利。
同时在函数运行实例中,也应该包含完善的日志、Metric采集、心跳检测以及流量流监控等功能。