集群调度系统除了解决资源调度的问题之外,还解决服务使用计算资源的问题。正如《Software Engineering at Google》一书中提到的,集群调度系统作为Compute as a Service中关键组件之一,既要解决资源调度(从物理机拆解到CPU/Mem这样的资源维度)和资源竞争(解决“吵闹邻居”),还需要解决应用管理(实例自动化部署、环境监控、异常处理、保障服务实例数、确定业务需求资源量、不同服务种类等)。而且从某种程度上来说应用管理比资源调度更重要,因为这会直接影响业务的开发运维效率和服务容灾效果,毕竟互联网的人力成本比机器成本更高。复杂的有状态应用的容器化一直是业界难题,因为这些不同场景下的分布式系统中通常维护了自己的状态机。当应用系统发生扩缩容或升级时,如何保证当前已有实例服务的可用性,以及如何保证它们之间的可连通性,是相较无状态应用复杂许多的棘手问题。虽然我们已经把无状态服务都容器化了,但我们还没有充分发挥出一个良好的集群调度系统的全部价值。如果要想管好计算资源,必须管理好服务的状态,做到资源和服务分离,提升服务韧性,而这也是Kubernetes引擎所擅长的。我们基于美团优化定制的Kubernetes版本,打造了美团Kubernetes引擎服务MKE:
在离线混部能力建设。在线业务集群的资源利用率提升是有上限的,根据Google在论文《Borg: the Next Generation》中披露的2019年数据中心集群数据,刨去离线任务,在线任务的资源利用率仅为30%左右,这也说明了再往上提升风险较大,投入产出比不高。后续,美团集群调度系统将持续探索在离线混部,不过由于美团的离线机房相对独立,我们的实施路径会与业界的普遍方案有所不同,会先从在线服务和近实时任务的混部开始,完成底层能力的构建,再探索在线任务和离线任务的混部。