
状态
|
91
用的服务器。相反,它必须记住哪些请求属于哪个副本集。当有状态的服务
被扩展出来时,它通常被分割成多个分区。一个副本集被限制在一个单一的
分区中。当系统需要为副本集召集新的服务器时,它只在同一分区的服务器
中搜索。这使得管理复制集合的效率更高,尤其是在大集群中。
我们可以选择多种分区策略,包括静态和动态。按区域
ID
进行分区是静态分
区的例子,按一致性哈希进行分区是动态分区的例子。动态分区可以随着可
用服务器数量的变化而调整。当有新的服务器加入集群时,分区将被重新分配,
以利用额外的容量;当集群缩小时,分区将被压缩到剩余的资源中。
当使用分区时,分区
ID
可被放置在请求路径以协助进行路由选择。例如,到
被分区的
foo
服务的请求路径可能是:
https://<host>/<partition>/foo
。
这种路由方案要求负载均衡器支持按分区路由。如果负载平衡器不支持按分
区路由,可能会出现额外的跳转。例如,如果一个准备发往
A
分区的请求被
路由到
B
分区的服务器,那么该服务器需要将请求转发到
A
分区服务器。
分区上的工作负载可能会变得不平衡。一些繁忙的分区被请求淹没,而其他
闲置的分区却保持休眠状态,浪费计算资源。某些高级调度器支持资源平衡,
它可以动态地重新安排服务器节点上的分区,使服务器的负载均匀。不过,
移动分区的成本很高,因为它必须携带其状态数据。所以调度器必须在减少
移动次数和保持各服务器的资源消耗平衡之间寻找平衡点。
关键是,扩展有状态服务也非常困难。
2.1.4
将有状态服务转换为无状态服务
将有状态服务转换为无状态服务很简单 ...