阿里云原生编程挑战赛--实现一个 Serverless 计算服务调度系统
程序员文章站
2022-07-09 19:53:29
题目简介一个简化的Faas系统分为APIServer,Scheduler,ResourceManager,NodeService(kubelet),ContainerService(container) 5个组件,系统组建可以类比与k8s。APIServer:负责函数库的查询与作业提交ListFunctions:返回所有可调用Function信息InvokeFunction(Function,Event):执行某个Function,传入Event。Scheduler:管理容器的组件,APIS...
题目简介
- 一个简化的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):执行函数。
- 需求:实现Scheduler的AcquireContainer和ReturnContainer API
- 测试集:由平台提供,可能包含但不局限于函数类型分类:helloworld,CPU intensive,内存intensive,sleep等类型;调用模式包括稀疏调用,密集调用,周期调用等;执行时间包括时长基本固定,和因输入而异等
- 测评标准
-
资源使用时间(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
上一篇: (五)字典,集合
下一篇: Eureka服务注册、发现、集群配置