到目前为止,我们讨论的系统中,假设了所有的机器都会存储所有数据,在前面讨论复制的章节中,主节点在收到客户端的写入请求时,将全部数据分别保存在本地以及其它的从节点上,这样的存储方式存在以下的问题:
可扩展性:如果使用主备方式进行数据复制,所有的工作都落在主节点上,在负载很大的情况下,主节点很快会成为系统的瓶颈;
单机瓶颈:单台机器由于其物理硬件的能力(硬盘、内存、CPU等),总会遇到处理的上限。
故障隔离:如果一部分数据出现故障,会影响所有数据的访问,降低了系统的整体可用性。例如,如果能够将不同城市的数据保存在不同的节点上,当某个地区的服务出现异常时,就不会影响其它地区的数据。
在系统需要进行扩展时,通常有两种不同的扩展方案。如图6.1所示:
垂直扩展(Vertical Scaling):也称为"Scale Up",通过在单一服务器上增加更多资源(如更快的 CPU、更多的 RAM、更大的硬盘)来提升处理能力。
水平扩展(Horizontal Scaling):也称为"Scale Out",通过增加更多的服务器来分担负载,将它们组成一个集群共同工作。
垂直扩展方案只需要扩展单台机器的处理能力,有以下的优点:
简单:管理和维护一台机器远比管理一个集群简单。
数据一致性强:所有数据都在一台机器上,不需要处理分布式系统中的数据同步和一致性问题,事务处理简单。
低延迟:进程间通信(IPC)在单机内部非常快,没有网络开销。
对应用透明:应用代码通常不需要做大的改动来适应更强的硬件。
然而,任何机器的CPU、内存扩展都有其物理上限,无法无限制一直提升下去。同时由于存在单点问题,服务器一旦宕机,整个服务将完全中断,可用性低,也给维护单台机器带来很大挑战,通常需要停机维护。
对比而言,水平扩展通过增加机器扩展系统的处理能力,有以下的优点:
理论上无限扩展:当负载增加时,只需向集群中添加更多标准…
( 2
min )