介绍
本篇文章给大家分享的是有关kubernetes中怎么利用map/reduce模式实现优选计算,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<节> <节> <节>
1。设计基础
节> <节> <节> <节> <节>,,,1.1两阶段:单点与聚合
节> 节> 节> 节> <节>在进行优选的时候,除了最后一次计算,在进行针对单个算法的计算的时候,会分为两个阶段:单点和聚合
节> <节>在单点阶段,会根据当前算法针对单个节点计算在聚合阶段,则会根据当前单点阶段计算完成后,来进行聚合
节> <节> <节> <节> <节>,,,1.2并行:节点与算法
节> 节> 节> 节> <节>单点和聚合两阶段在计算的时候,都是并行的,但是对象则不同,其中单点阶段并行是针对单个节点的计算,而聚合阶段则是针对算法级别的计算,通过这种设计分离计算,从而避免多goroutine之间数据竞争,无锁加速优选的计算
节> <节> <节> <节> <节>,,,1.3地图与减少
节> 节> 节> 节> <节>而地图与减少则是针对一个上面并行的两种具体实现,其中地图中负责打单节点分,而减少则是针对地图阶段的打分进行聚合后,根据汇总的结果进行二次打分计算
节> <节> <节> <节> <节>,,,1.4重量
节> 节> 节> 节> <节>map/reduce阶段都是通过算法计算,如果我们要进行自定义的调整,针对单个算法,我们可以调整其在预选流程中的权重,从而进行定制自己的预选流程,
节> <节> <节> <节> <节>,,,1.5随机分布
节> 节> 节> 节> <节>当进行优先级判断的时候,肯定会出现多个节点优先级相同的情况,在优选节点的时候,会进行随机计算,从而决定是否用当前优先级相同的节点替换之前的最合适的节点
节> 节> <节> <节>2。源码分析,
节> <节>优选的核心流程主要是在PrioritizeNodes中,这里只介绍其关键的核心数据结构设计
节> <节> <节> <节> <节>,,,2.1无锁计算结果保存
节> 节> 节> 节> <节>无锁计算结果的保存主要是通过下面的二维数组实现,如果要存储一个算法针对某个节点的结果,其实只需要通过两个索引即可:算法索引和节点索引,同理如果我把针对单个节点的索引分配给一个goroutine,则其去其他的goroutine则就可以并行计算
节> <节><代码>//在计算的时候,会传入节点[]* v1。节点的数组,存储所有的节点,节点索引主要是指的该部分,节> <节> <节> <节> <节>,,,
结果:=([]schedulerapi。HostPriorityList, len (priorityConfigs), len (priorityConfigs))
代码>