Finagle孔径算法如何选择"非重叠"子集?

时间:2017-06-20 04:36:01

标签: scala rest subset finagle twitter-finagle

我一直在阅读有关Finagle的文章,并尝试了解代码以了解Aperture的子集选择是如何工作的。

我已经看到ApertureLeastLoaded有一个" useDeterministicOrdering"和#34; EndpointFactory"我认为这应该是决定哪些客户接受子集的关键点。

在阅读"确定性子集" Google SRE's book的一节,我理解从客户端角度选择服务器子集的最佳方法是知道可以使用的客户端总数和当前客户端的唯一顺序标识符作为子集生成器的种子。

在Finagle中,我无法理解这个过程是如何完成的(我对Scala并不是非常熟悉)以及网站和代码中的文档,解释了光圈范例的工作原理,但是不太清楚如何选择初始子集

我希望有人可以启发我

1 个答案:

答案 0 :(得分:0)

Aperture的一个独特属性是它的窗口根据客户端提供的负载动态调整大小。也就是说,客户端具有内置控制器,可以在运行时扩展或缩小其窗口。此属性非常重要,因为它允许客户端更高效地运行并更好地适应不断变化的环境,但它确实使得在服务器之间实现统一的负载分配变得更加复杂。

相比之下,Google SRE手册中提出的子集化算法表明,运营商选择静态子集大小,允许分析计算均匀负载分布,但引入了另一个静态配置,需要在系统发展时重新访问

在我们所知的情况下,确定性孔径是一种新颖的算法,用于在保持上述窗口尺寸的动态特性的同时实现均匀的载荷分布。从高层次来看,客户构建其对等集群的拓扑(这使它们具有排序和接近感),然后从拓扑中导出服务器的唯一的每客户端排列,使得每个服务器在排列中均匀地表示。

我们仍处于Twitter测试阶段的早期阶段,但早期的结果看起来很有希望。在我们收集到更多实证结果之后,我们希望发布一些关于算法如何工作及其属性的更详细的内容。