架构 0 期 -week5- 学习总结
1.虚拟节点一致性 hash
在听课的时候,我一直以为一个 key 在 hash 环中找到对应的虚拟节点是较复杂的计算点,但事实却不仅如此。
找 key 应该放在哪个虚拟节点,有现成的实现,即 Map 中寻找 key 大于等于某值的 `SortMap.tailMap`
而带虚拟节点的一致性 hash 算法,更应该考虑的是按真实节点,寻找合适的虚拟节点数,追求更均衡的缓存分布。
以下是寻找最小标准差的步骤:
按每个节点扩展到 i 个虚拟节点,构建虚拟节点(的 hash 值)对应真实节点的映射
把 keyCount 个 key 分布到真实节点上去,得到真是节点分配的 key 数量
计算真实节点分配到的 key 数量的样本标准差
寻找最小标准差及虚拟节点数
2.mq 解耦
mq 除了常规的异步消息作用,这里想介绍一点在我平时开发用得最多的一点特性:解耦。
一般随着业务发展,一个功能会涉及到越来越多的边际能力,比如发个短信、发封邮件、发个推送等等。
这些功能对一致性和可靠性要求不高,这时候就可以利用 mq 进行异步解耦,这些边际功能放在 consumer 里处理。
评论