一、什么是分布式系统

分布式系统是指其组件分布在网络上,组件之间通过传递消息进行通信和动作协调的系统。它的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。主要特点如下。

透明性:分布式系统对于用户来说是透明的,一个分布式系统在用户面前的表现就像一个传统的单处理机分时系统,可让用户不必了解其内部结构就能使用。

扩展性:分布式系统的最大特点是可扩展性,它能够根据需求的增加而扩展,可以通过横向扩展使集群的整体性能得到线性提升,也可以通过纵向扩展单台服务器的性能(上升空间有限,使用不多)使服务器集群的性能得到提升。

可靠性:分布式系统不允许单点失效的问题存在,它的基本思想是,如果一台机器坏了,则其他机器能够接替它进行工作,具有持续服务的特性。

高性能:高性能是人们设计分布式系统的一个初衷,如果建立了一个透明、灵活、可靠的分布式系统,但是它运行起来像蜗牛一样慢,那么这个分布式系统是失败的。

分布式系统在拥有众多优点的同时自然有其缺点。

1.1、在节点通信部分的开销比较大,线程安全问题也变得复杂,需要在保证数据完整性的同时兼顾性能。

1.2、过分依赖网络,网络信息的丢失或饱和将会抵消分布式系统的大部分优势。

1.3、有潜在的数据安全和网络安全等安全性问题。

分布式系统与集中式系统的区别:

首先,简单地讲,分布式系统采用并行计算,而集中式系统采用串行计算,这是二者本质上的区别;

其次,分布式系统的性价比高,对于处理大规模数据而言,最节约成本的办法是在一个系统中使用集中在一起的大量的廉价CPU;

然后,分布式系统的可靠性高,通过把负载分散到众多机器上,单个芯片发生故障时最多会使一台机器停止运行,而其他机器不会受到影响;

另外,分布式系统比集中式系统的可扩展性强,可根据业务量的增长逐渐扩展系统的计算能力;最后,从性能上讲,分布式系统的计算能力比单个大型主机更强。

二、分布式数据库应用的必然条件

分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。物理上分布是指分布式数据库的数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库节点之间在逻辑上是一个整体,并由统一的数据库管理系统管理。不同的节点分布可以跨不同的机房、城市甚至国家。

分布式数据库的主要特点如下:

透明性:用户不必关心数据的逻辑分区和物理位置分布的细节,也不必关心重复副本(冗余数据)的一致性问题,同时不必关心在局部场地上数据库支持哪种数据模型。对于系统开发工程师而言,当数据从一个场地移到另一个场地时不必改写应用程序,使用起来如同一个集中式数据库。

数据冗余性:分布式数据库通过冗余实现系统的可靠性、可用性,并改善其性能。多个节点存储数据副本,当某一节点的数据遭到破坏时,冗余的副本可保证数据的完整性;当工作的节点受损害时,可通过心跳等机制进行切换,系统整体不被破坏。还可以通过热点数据的就近分布原则减少网络通信的消耗,加快访问速度,改善性能。

易于扩展性:在分布式数据库中能够方便地通过水平扩展提高系统的整体性能,也能够通过垂直扩展来提高性能,扩展并不需要修改系统程序。

自治性:各节点上的数据由本地的DBMS管理,具有自治处理能力,完成本场地的应用或局部应用。

说明:

分布式数据库还具有经济、性能优越、响应速度更快、灵活的体系结构、易于集成现有系统等特点。

三、分布式数据库的实现原理

具体来讲分布式数据库应有4个优势:数据分片及复制管理、具有事务的可靠性存取、良好的性能、易于扩展,所以分布式数据库在设计上需要实现分布式数据库的目录管理、数据分片、分布式查询处理、分布式并发控制、分布式锁管理、分布式存储、分布式网络架构、分布式安全管理等。

1.分布式数据库的目录管理

分布式数据库的目录存放着系统元数据及数据库的元数据的全部信息,这些数据的存在是为了正确、有效地访问数据。数据的增、删、改、查操作都需要用到目录,用户授权、安全管理及并发控制等也都需要用到目录,目录结构的合理性直接影响数据库的性能。目录一般包括各级模式的描述、访问方法的描述、关于数据库的统计数据和一致性信息等,系统根据这些信息将用户查询转换为物理数据库上的查询,选择一条最佳的存取路径进行事务管理及安全性、完整性检查等。

分布式数据库的目录可分为全局目录、分布式目录、全局与本地混合目录。

2.数据分片

当数据库过于庞大,尤其是写入过于频繁且很难由一台主机支撑时,我们还是会面临扩展瓶颈。我们将存放在同一个数据库实例中的数据分散存放到多个数据库实例(主机)上,进行多台设备存取以提高性能,在切分数据的同时可以提高系统整体的可用性。

数据分片是指将数据全局地划分为相关的逻辑片段,有水平切分、垂直切分、混合切分三种类型。

2.1、水平切分:按照某个字段的某种规则分散到多个节点库中,每个节点中包含一部分数据。可以将数据的水平切分简单理解为按照数据行进行切分,就是将表中的某些行切分到一个节点,将另外某些行切分到其他节点,从分布式的整体来看它们是一个整体的表。

2.2、垂直切分:一个数据库由很多表构成,每个表对应不同的业务,垂直切分是指按照业务将表进行分类并分布到不同的节点上。垂直拆分简单明了,拆分规则明确,应用程序模块清晰、明确、容易整合,但是某个表的数据量达到一定程度后扩展起来比较困难。

2.3、混合切分:为水平切分与垂直切分的结合。

3.分布式查询处理

分布式查询处理的任务就是把一个分布式数据库上的高层次查询映射为在本地数据库上的操作,查询的解析必须拆分为代数查询的关系运算序列,将要查询的数据定位到各节点,使得查询在各节点进行,最后通过网络通信的操作汇聚查询结果。

4.分布式并发控制

并发控制是分布式事务管理的基本任务之一,其目的是保证分布式数据库中的多个事务并发高效、正确地执行。并发控制用来保证事务的可串行性,也就是说事务的并发执行等价于它们按某种次序的串行执行,从而为用户提供并发的透明性。进行并发控制的方法主要有三种:加锁并发控制、时间戳控制、乐观并发控制。加锁并发控制应用广泛,但是容易发生死锁;时间戳控制消除了死锁,一旦发生冲突便会重启而不是等待,需要有全局的统一时钟;乐观并发控制对于冲突较少的系统较为适合,对于冲突多的系统则效率低下。

总体来看,实现分布式数据库不仅仅是如此简单的几个方面,在实际设计中还需要解决网络架构、分布式存储等问题。每个模块都可以作为一个课题去研究,本节仅是抛砖引玉。

四、Mycat 1.6正在开发的功能如下。

(1)对子查询的支持。

(2)数据一致性的增强:采用分布式事务或消息队列实现;全局表的一致性保证。

(3)基于ZooKeeper协调的主从切换。

(4)引入测试框架,可以配置用例和进行自动化测试。

(5)新增自动迁移功能,实现不停机迁移时不丢数据。

Mycat 1.6对系统稳定性的开发任务如下。

(1)解决全局自增ID列无法作为分片字段的问题。

(2)解决分片表与对应分片规则的一致性检查问题。

(3)解决DirectMemory的管理问题。

(4)完善reload config,支持不丢事务

其架构设计如图:

多中心支持如图:

五、其他数据库中间件

1、Mango

2、Cobar

3、Heisenberg

4、Atlas

5、Amoeba

六、Mycat的优势

Mycat 现在由一支强大的技术团队维护,吸引和聚集了一大批业内大数据和云计算方面的资深工程师,参与者都是有 5 年以上经验的资深软件工程师、架构师、DBA,优秀的技术团队保证了Mycat 的产品质量。Mycat 不依托于任何一家商业公司,因此不像某些开源项目将一些重要的特性封闭在其商业产品中,Mycat 的发展和壮大主要基于开源社区志愿者的持续努力。

Mycat 还形成了一系列周边产品,比较有名的是 Mycat-web、Mycat-NIO、Mycat-Balance等,已成为一个比较完整的数据处理解决方案,而不仅仅是中间件

七、Mycat的适用场合

1、高可用性与MySQL读写分离

2、业务数据分级存储保障

3、100亿大表水平分片,集群并行计算

4、数据库路由器

5、整合多种数据源