WRY

Where Are You?
You are on the brave land,
To experience, to remember...

0%

关于Serverless的一些思考

架构设计

下面是Fission的函数架构设计图

对应这个图,其实可以拆解出几个重要的模块

Router(流量接入)

在流量接入层,会根据规则进行流量的拦截分发(集群、函数、版本层级维度)、统计等操作。此部分还包含一些其他的触发源例如消息队列、定时器等等

Executor(控制模块)

伸缩决策模块

伸缩决策模块,会根据流量接入层的统计数据和用户的配置需求,决定函数应该如何在集群上部署,包括在哪里,部署多少。决策信息会具有一定的提前,以给调度模块时间完成变更。

  • 通过滑动窗口避免频繁的变更
  • 通过流出安全冗余避免变更不及时
  • 通过混合指标,例如访问量、CPU、Memory等,精准预测

调度模块

调度模块,负责将函数计算自己定义的资源CRD(Custom Resource Define)和K8s默认资源根据决策模块的决策信息,调度到位。

  • 提前拉镜像文件,压缩容器启动的时间
  • 数据流传输的高效性
  • 资源池,可用资源池已实现快速的响应

Controller(用户接入模块)

和函数计算的用户进行沟通,包括函数构建、版本的发布等

Function(函数运行实例)

可能是一段可执行代码,也可能是一个容器(不能局限在Fission中,不重视容器充当函数的情况)。在这一层应该给用户访问基础设施服务以很大的便利。

同时在函数运行实例中,也应该包含完善的日志、Metric采集、心跳检测以及流量流监控等功能。