从广义上说,负载均衡是运行时的 Orleans 支柱之一。 运行时 Orleans 会尝试保持一切平衡,因为均衡可最大限度地利用资源,避免热点,提高性能,并有助于弹性。 负载均衡 Orleans 适用于多个位置。 下面是运行时执行均衡的非详尽列表:
- 默认执行者放置策略是随机的;新激活会随机分布在各个节点之间。 实现平衡放置,并在大多数情况下防止热点。
- 更高级 ActivationCountBasedPlacement 的策略尝试均衡所有孤岛上的激活次数,从而在孤岛之间形成更均匀的分布。 这对于弹性尤其重要。
- 粒度目录服务基于分布式哈希表构建,该表本质上是平衡的。 目录服务将Grain对象映射到激活。 每个孤立系统都持有全局映射表的一部分,而且通过虚拟桶的一致性哈希,在所有孤立系统之间以均衡的方式进行全局分区。
- 客户端连接到所有网关,并通过均衡的方式分散其请求。
- 提醒服务是分布式分区运行时服务。 负责哪个提醒的服务器的分配在所有服务器之间通过一致性哈希进行平衡,就像grain目录一样。
- 接收器中的性能关键组件已分区,并且它们之间的工作是本地均衡的。 这样,存储筒仓运行时就可以充分利用所有可用的 CPU 核心,并避免筒仓内的瓶颈。 这适用于所有本地资源:例如将工作分配给线程、套接字、调度职责、队列等。
- QueueBalancerBase 平衡了在群集中不同独立单元间从持久性队列中拉取事件的责任。
平衡不一定意味着失去局部性。 可以在保持良好的局部性的同时实现平衡。 例如,当均衡涉及分片/分区时,可以在每个分区中保持本地性的同时,划分特定逻辑任务的责任。 这同时适用于本地和分布式均衡。