读《MySQL性能调优与架构设计》笔记之MySQL可扩展设计的基本原则

一、什么是可扩展性

        首先,我们需要清楚一个数据库据系统的扩展性实际上是主要体现在两个方面,一个是横向扩展,另一个则是纵向扩展,也就是我们常说的Scale Out 和Scale Up。

        Scale Out 就是指横向的扩展,向外扩展,也就是通过增加处理节点的方式来提高整体处理能力,说的更实际一点就是通过增加机器来增加整体的处理能力。

        Scale Up 则是指纵向的扩展,向上扩展,也就是通过增加当前处理节点的处理能力来提高整体的处理能力,说白了就是通过升级现有服务器的配置,如增加内存,增加CPU,增加存储系统的硬件配置,或者是直接更换为处理能力更强的服务器和更为高端的存储系统。

        通过比较两种Scale 方式,我们很容易看出各自的优缺点。

◆Scale Out 优点:

1.成本低,很容易通过价格低廉的PCServer 搭建出一个处理能力非常强大的计算集群;

2.不太容易遇到瓶颈,因为很容易通过添加主机来增加处理能力;

3.单个节点故障对系统整体影响较小;也存在缺点,更多的计算节点,大部分时候都是服务器主机,这自然会带来整个系统维护复杂性的提高,在某些方面肯定会增加维护成本,而且对应用系统的架构要求也会比Scale Up 更高,需要集群管理软件的配合。

◆Scale Out 缺点:

1.处理节点多,造成系统架构整体复杂度提高,应用程序复杂度提高;

2.集群维护难以程度更高,维护成本更大;

◆Scale Up 优点:

1.处理节点少,维护相对简单;

2.所有数据都集中在一起,应用系统架构简单,开发相对容易;

◆Scale Up 缺点

1.高端设备成本高,且竞争少,容易受到厂家限制;

2.受到硬件设备发展速度限制,单台主机的处理能力总是有极限的,容易遇到最终无法解决的性能瓶颈;

3. 设备和数据集中,发生故障后的影响较大;

        从短期来看,ScaleUp 会有更大的优势,因为可以简化运维成本,简化系架构和应用系统的开发,对技术方面的要求要会更简单一些。

        但是,从长远影响来看,ScaleOut 会有更大的优势,而且也是系统达到一个规模之后的必然趋势。因为不管怎样,单台机器的处理能力总是会受到硬件技术的限制,而硬件技术的发展速度总是有限的,很多时候很难跟得上业务发展的速度。而且越是高处理能力的高端设备,其性价比总是会越差。所以通过多台廉价的PC Server 构建高处理能力的分布式集群,总是会成为各个公司节约成本,提高整体处理能力的一个目标。虽然在实现这个目标的时候可能会遇到各种各样的技术问题,但总是值得去研究实践的。

下面我们先看看在设计一个具有很好的Scalability的数据库应用系统架构方面,需要遵循一些什么样的原则。

二、事务相关性最小化原则

        就目前来说,分布式事务主要存在的一些解决方案主要有以下三种:

        1. 进行Scale Out 设计的时候合理设计切分规则,尽可能保证事务所需数据在同一个MySQL Server 上,避免分布式事务。不过,即使我们的切分规则设计的再高明,也很难让所有的事务所需的数据都在同一个MySQL Server 上。

        2. 大事务切分成多个小事务,数据库保证各个小事务的完整性,应用控制各个小事务之间的整体事务完整性。也就是说,应用程序自己需要具有一定的事务能力,这无疑会增加应用程序的技术难度。

        3. 结合上述两种解决方案,整合各自的优势,避免各自的弊端。比如我们可以在保证部分核心事务所需数据在同一个MySQL Server 上,而其他并不是特别重要的事务,则通过分拆成小事务和应用系统结合来保证。而且,对于有些并不是特别重要的事务,我们也可以通过深入分析,看是否不可避免一定需要使用事务。通过这样相互平衡设计的原则,我们既可以避免应用程序需要处理太多的小事务来保证其整体的完整性,同时也能够避免拆分规则太多复杂而带来后期维护难度的增加及扩展性受阻的情况。

三、数据一致性原则

        那我们又如何在ScaleOut 的同时又较好的保证数据一致性呢?很多时候这个问题和保证事务完整性一样让我们头疼,也同样受到了很多架构师的关注。经过很多人的实践,大家最后总结出了BASE 模型。即:基本可用,柔性状态,基本一致和最终一致。这几个词看着挺复杂挺深奥,其实大家可以简单的理解为非实时的一致性原则。

        也就是说,应用系统通过相关的技术实现,让整个系统在满足用户使用的基础上,允许数据短时间内处于非实时状态,而通过后续技术来保证数据在最终保证处于一致状态。

        如何让系统中的不一致数据达到最终一致?一般来说,我们必须将这类数据所设计到的业务模块和需要实时一致数据的业务模块明确的划分开来。然后通过相关的异步机制技术,利用相应的后台进程,通过系统中的数据,日志等信息将当前并不一致的数据进行进一步处理,使最终数据处于完全一致状态。对于不同的模块,使用不同的后台进程,既可以避免数据出现紊乱,也可以并发执行,提高处理效率。如对用户的消息通知之类的信息,就没有必要做到严格的实时一致性,只需要现记录下需要处理的消息,然后让后台的处理进程依次处理,避免造成前台业务的拥塞。

四、高可用及数据安全原则

        要确保高可用及数据安全原则,最好的办法就是通过冗余机制来保证。所有软硬件设备都去除单点隐患,所有数据都存在多份拷贝。这样才能够较好的确保这一原则。在技术方面,我们可以通过MySQL Replication,MySQL Cluster 等技术来实现。

猜你喜欢

转载自blog.csdn.net/lihuayong/article/details/45111495