欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

阿里云原生编程挑战赛--实现一个 Serverless 计算服务调度系统

程序员文章站 2022-05-04 08:47:09
题目简介一个简化的Faas系统分为APIServer,Scheduler,ResourceManager,NodeService(kubelet),ContainerService(container) 5个组件,系统组建可以类比与k8s。APIServer:负责函数库的查询与作业提交ListFunctions:返回所有可调用Function信息InvokeFunction(Function,Event):执行某个Function,传入Event。Scheduler:管理容器的组件,APIS...

题目简介

  1. 一个简化的Faas系统分为APIServer,Scheduler,ResourceManager,NodeService(kubelet),ContainerService(container) 5个组件,系统组建可以类比与k8s。
    APIServer:负责函数库的查询与作业提交
  • ListFunctions:返回所有可调用Function信息
  • InvokeFunction(Function,Event):执行某个Function,传入Event。
    Scheduler:管理容器的组件,APIServer通过Scheduler获得可以执行Function的Container。
  • AcquireContainer(Function):获得一个可以执行Function的Container。如果系统有Container可以运行Function,Scheduler可以直接返回Container,否则Scheduler需要通过ResourceManager获得Node,进而在Node上创建Container。
    简单概括:先通过scheduler调度容器,如果没有合适的container通过resourceManager获得node在node上进行创建。
  • ReturnContainer(Container):归还Container。APIServer在调用Container.InvokeFunction后会调用ReturnContainer归还Container。Scheduler可以利用AcquireContainer和ReturnContainer记录Container的使用情况。
    ResourceManager:ResourceManager管理Node的组件,负责申请和释放。可以认为Node对应于虚拟机,占用虚拟机需要一定的成本,因此Scheduler的一个目标是如何最大化的利用Node,比如尽量创建足够多的Container,不用的Node应该尽快释放。当然申请和释放Node又需要一定的时间,造成延迟增加,Scheduler需要平衡延迟和资源使用时间
  • ReserveNode:申请一个Node,该API返回一个Node地址,使用该地址可以创建Container或者销毁Container。
  • ReleaseNode:释放Node。
    NodeService:NodeService管理单个Node上创建和销毁Container,Node可以认为是一个虚拟机,Scheduler可以在Node上创建用于执行Function的Container
  • CreateContainer(Function):创建Container,该API返回一个Container地址,使用改地址可以InvokeFunction。注意一个Node上能创建的Container使用内存之和受Node规格限制。Scheduler可以通过Node.DestroyContainer销毁Container。
  • RemoveContainer(Container):销毁Container。
  • InvokeFunction(Container, Event):执行Node上的某个Container所加载的函数。
  • GetStats():返回该Node下所有Container和执行环境相关指标,比如CPU,内存。
    ContainerService:ContainerService用于执行函数。
  • InvokeFunction(Event):执行函数。
  1. 需求:实现Scheduler的AcquireContainer和ReturnContainer API
  2. 测试集:由平台提供,可能包含但不局限于函数类型分类:helloworld,CPU intensive,内存intensive,sleep等类型;调用模式包括稀疏调用,密集调用,周期调用等;执行时间包括时长基本固定,和因输入而异等
  3. 测评标准
  • 资源使用时间(ND:Node Duration):Node使用时间。获得Node成功后开始计时,同一Node释放成功后结束计时,其差值为资源使用时间。(即尽量减少空闲node的使用)

  • 调度延迟(SL: Schedule Latency):调用Scheduler.AcquireContainer所需时间。

  • 函数执行时间(FD:Function execution Duration):调用ContainerService.InvokeFunction所需时间。

  • 响应时间(RT:Response Time):调度延迟 + 函数执行时间。

  • 请求成功率:调用APIServer.InvokeFunction成功的次数与APIServer.InvokeFunction调用总次数的比值。
    总结:约束条件其实就是有两个,一个是资源使用时间,一个是相应时间。目标就是在保证请求成功率的前提下,尽量减少这两个数。

本文地址:https://blog.csdn.net/EdiosnMa/article/details/107501825