1

我一直在阅读 Finagle 并试图理解代码以弄清楚 Aperture 的子集选择是如何工作的。

我已经看到ApertureLeastLoaded有一个“useDeterministicOrdering”和一个“EndpointFactory”,我想这应该是决定哪些客户端进入子集的关键点。

在阅读Google SRE 书中的“确定性子集”部分时,我了解到从客户端的角度选择服务器子集的最佳方法是了解客户端的总数以及当前客户端的唯一顺序标识符,可以用作子集生成器的种子。

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

我希望有人能启发我

4

1 回答 1

1

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

相比之下,谷歌 SRE 书中提出的子集算法建议操作员选择一个静态子集大小,该大小允许通过分析计算均匀的负载分布,但引入了另一种静态配置,需要随着系统的发展重新审视。

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

我们仍处于 Twitter 生产环境测试的早期阶段,但早期结果看起来非常有希望。在我们收集到更多的经验结果之后,我们希望发布一些关于算法工作原理及其属性的更详细的内容。

于 2017-06-22T17:17:21.447 回答