随着我国经济和信息化技术的快速发展,企业用户量、数据信息量呈爆炸式增长,数据库面临着性能、可用性等诸多挑战,例如:数据库性能是否可横向弹性伸缩、是否能确保业务的连续性、是否具有高透明度…
为应对这一挑战,业界普遍采用数据库集群技术,同时却给用户带来了诸多困惑 :数据库集群相关的技术路线繁多冗杂,全面理解较困难;相关产品鱼龙混杂,当某个数据库技术概念很火热,立刻就冒出许多号称采用该技术的产品,而在实际项目中,不少产品宣称技术先进、包治百病、实际用下来也并非如此,致使用户不知道如何选择符合自己需求又与技术相匹配的产品。
本文笔者就对数据库集群的相关概念、技术,解决问题的能力等关键信息进行阐述,并给出相关方案指导客户进行选型。
数据库集群的关键词!
主备集群、读写分离集群、RAC集群、共享存储(share disk)集群、无共享(share nothing)集群、分布式集群MPP、存储与计算分离多副本、raft、paxos。
为什么引入数据库集群?
所谓集群,简单理解就是一组协同起来,解决某一问题的机器集合;所谓数据库集群,简单理解就是一组协同起来,对外提供数据库服务的机器集合。与其他类型的集群(如应用服务器集群)一样,数据库集群重点帮助用户解决以下问题:
01、高可用,确保业务连续
当数据库在单台计算机上运行,遭到断电或系统升级时,其服务运转就会停止,从而导致业务中断。而使用数据库集群,通过多台相互冗余的计算机可保障单台计算机出故障时其它机器仍继续对外服务,保证业务不中断 。
02、实现横向弹性伸缩,提升处理性能
随着移动互联网、物联网、大数据等技术的发展,出现了对数据库性能要求极高的新型应用,主要体现在:高并发用户数(如12306购票系统)、庞大复杂的计算量(如数据仓库应用)。即便如此,用户对响应时间的要求并不会降低,其中,高并发用户数需求是OLTP类应用、庞大复杂的计算量是OLAP类应用。
针对此情况,除单纯从软件角度提升性能外,利用更多的硬件资源去提升数据库性能也是在所难免的。当我们通过纵向扩展的方式,只提高数据库的硬件配置,不进行软件改造的情况下去提升数据库的处理能力时,会受限于单台计算机的CPU、内存、硬盘等的插槽数量和计算与存储扩展的能力,即使单台计算机采用最高配置也无法满足数据库的性能需求,此时,我们需要通过横向扩展的方式,采用多台计算机协同提供更高性能的数据库服务能力。
如何实现应用对数据库的需求?
针对应用对数据库的性能需求,我们主要通过利用多台计算机分工协同、高可用技术等去实现处理性能的提升,确保系统的连续性,具体方式如下:
01、多台计算机分工与协作的方式
从实现角度看,任何程序从“只支持单用户访问”扩展为“支持多用户访问”,进而从“单机架构”扩展为“集群架构”时,其最大的调整在于新增了更多的执行单元/计算机,由此,程序只有进行调整才能有效组织这些执行单元/计算机之间的分工与协同。而对数据库集群产品而言,这里的分工与协同主要包括两方面:数据管理分工及操作请求分工。
数据管理分工:对数据库中数据的管理分工关系
从集群中不同计算机在数据管理维度的分工来看,数据库集群有如下几种架构:
共享存储集群:此集群架构可使不同的计算机共享同一份外存数据,并且集群中所有计算机都能看到全数据集,而不存在跨节点数据访问问题。也正是由于,所有计算机都有可能对这份数据进行读写,数据库集群必须协同不同的计算机,以避免因并发读写导致数据不一致。
无共享集群(分布式数据库集群):此集群架构,不同的计算机各自负责管理一部分数据,并遵循“谁管理,谁处理”的原则,负责处理自己所管理数据的操作请求。正是由于,集群中每个计算机只能看到部分数据,所以当本计算机A负责处理的一个用户操作请求涉及到别的计算机B负责管理的数据时,A必须请求B协同处理该请求。
另外,本集群架构允许不同计算机所管理的数据重叠(在极端情况下,所有计算机可同时管理全数据集),因此,数据库集群需要确保重叠数据的一致性。
操作请求分工:对用户操作请求的分工处理关系
当用户发起操作请求时,数据库集群可根据用户操作的读写类型来进行分工。典型的分配策略有以下几种:
主备(单活):此情况下,只有一台计算机作为主节点负责读写,其他计算机为备节点,并不接受任何用户操作请求。
一写多读:此情况下,只有一台计算机作为主节点负责读写,其他计算机为只读节点,只接受用户读的操作请求。
对等读写:此情况下,集群中所有计算机都可以处理用户的读写操作请求。
02、操作请求处理加速的方法
为进一步提高数据库集群处理性能,可通过异步执行、并行执行等机制。当一个用户发起操作请求时,数据库集群可以将其处理过程分解为若干组成部分,并将不同的组成部分分工到不同的计算机上执行。典型的加速策略有以下几种:
无加速:以整体操作为单位进行处理,每个操作的具体处理速度相对单机处理而言没有差别。
MPP(Massive Parallel Processing)加速:即大规模并行处理。采用该技术,数据库集群可将一个用户的操作请求拆分到集群中的不同计算机上并行执行,进而缩短查询执行的时间。
存储与计算分离加速:存储与计算分离是近年来随着云数据库的广泛应用,而衍生出的一种新的加速技术。采用该技术,数据库可将由一个进程负责的存储与计算操作拆分到两个进程执行,使系统从存储和计算两个环节分别进行优化,从而提高整体处理效率。
03、高可用保障策略的形式
当系统发生故障时,数据库集群可通过冗余技术将数据切换到冗余节点继续运行,从而确保系统的连续性。具体冗余形式如下:
计算能力冗余:对集群而言,由于计算机是天然存在多个,所以计算能力的冗余也是天然存在的。
数据冗余:为实现数据冗余,主要有两种实现策略:①、基于日志同步+备机重做日志。此技术只能在主数据上进行写操作,通过同步或异步的方式将写操作的日志同步到备机上,并在备机上重做日志,实现对主机数据的冗余。②、实时多副本。在实时维护多个数据副本时,通过raft、paxsos等协议,进而保持多个数据副本的一致性。
典型的集群架构与产品有哪些?
用户如何进行产品选型?
当用户在选型的时候,首先要选择最符合自己需要的架构。上述任何一种架构都有其优劣,没有任何一种架构能够满足所有场景的需要。下表笔者给出了各架构的优劣对比:
上述优劣对比只能给出定性的比较,并且架构不等同于实现,即使用户采用同一架构的产品,其技术指标也可能大相径庭,笔者建议用户回归到需求本身,通过实测可用性指标(RTO/RPO)、性能指标(tpm、qpm、响应时间)及SQL、PLSQL等数据库开发特性的支持范围,从得到的实际数据中选出最符合自己需要的产品。