基于Ice的分布式MySQL数据库服务设计

2016-06-17 19:10杨志宇
电脑知识与技术 2016年11期
关键词:中间件

杨志宇

摘要:分布式数据库在性能、扩展性和可用性上有许多优点,构建分布式数据库要解决数据一致、位置透明和负载均衡等问题。针对构建分布式MySQL数据库系统的应用场景,利用MySQL复制构建了一主多从的数据库集群,提供了解决主从数据一致的方法,设计了一种基于Ice的分布式数据库中间件,实现了数据库访问服务的位置透明,利用IceGrid特性实现了数据库访问的负载均衡,具有良好的扩展性和可用性,提高了开发效率。

关键词:Ice;中间件;分布式数据库;MySQL

中图分类号:TP392 文献标识码:A 文章编号:1009-3044(2016)11-0012-03

Abstract: Distributed database system has many advantages on the performance, scalability and availability, while it also has problems such as data consistency, location transparency and load balancing to be solved. A middleware which based on ICE has been designed, using IceGrid features for database access load balancing and distribution services and using MySQL replication mechanism for data consistency. The distributed database cluster within one-master-multi-slave architect and Ice middleware implemented the location transparency and load balancing. The experimental data shows that, the distributed database architecture has good scalability and availability, significantly improved the development efficiency.

Key words: Ice; middleware; distributed database; MySQL

随着互联网业务的不断增长,传统的集中式数据库难以满足企业级应用的需求。首先,在读写流量增长到一定水平时,集中式数据库会产生性能瓶颈问题;其次,集中式数据库部署在一台服务器上,一旦该服务器发生故障,则整个系统不可用;再次,集中式数据库的规模和配置都不够灵活,难以应对频繁的业务变动。

因此,为解决集中式数据库难以满足的需求,分布式数据库的应用越发重要。分布式数据库是指使用多台服务器共同提供数据存储、查询服务的数据库系统。相比集中式数据库,分布式数据库有以下优点:1)分布式数据库能够满足更高的性能要求。2)分布式数据库有更高的可靠性,分布式数据库将数据分布在不同的机器上,同时有冗余存储,可以有效避免单节点故障,提高系统可靠性。3)分布式数据库具有良好的可扩展性,可以根据业务规模的变化灵活配置,使系统维持在高效率状态。

分布式数据库可以将数据分片,然后保存在不同的节点上,每个节点的数据不完全一致;数据也可以不分片,即每个节点都拥有完整的数据集,节点之间数据一致。对于各节点数据不完全一致的系统,需要管理数据与节点的对应关系。无论数据是否分片存储,只要存在冗余,就需要解决数据一致的问题。

分布式数据库通常通过复制实现数据更新,将数据从一台主服务器拷贝至一台或多台从服务器上。由于复制是异步的,主从数据库在一定的时间段内存在同步延迟,分布式数据库在处理读请求时必须保证主从数据库的数据一致。针对这一问题,本文以MySQL数据库为例,提出合理化的解决方案。

同时,分布式数据库的实现还要解决位置透明性和负载均衡的问题:分布式数据库应作为一个整体为客户端提供统一的接口,即数据存储的物理位置对客户端是透明的;分布式数据库内部应该将读写操作合理地分配给各服务器,以提高整体效率。在分布式数据库的实际应用中,通常通过使用数据库中间件的方式来解决这两个问题,本文采用ICE中间件实现分布式数据库。

本文的结构如下:第1章介绍目前已有的分布式数据库中间件,比较几种中间件开发的平台;第2章针对构建分布式MySQL数据库,提供了保持主从数据一致的解决方法;第3章介绍了Ice中间件平台的基本概念和特性;第四章详细介绍如何基于Ice构建一种分布式MySQL数据库的中间件,使整个数据库集群能够实现位置透明和负载均衡;最后,总结这种构建分布式数据库服务解决方案的特点。

1 相关工作

为了实现高可用的分布式数据库系统,企业需要选择合适的DBMS以及数据库中间件。首先,在DBMS(数据库管理系统)的选择上,MySQL因为开源和良好的可扩展性,一直是构建分布式数据库集群的流行解决方案之一。其次,在数据库中间件的选择上,有许多为MySQL扩展提供支持的开源项目可以作为参考。Amoeba项目于2008年发布了Amoeba for MySQL,该中间件在应用层访问MySQL时充当SQL路由,专注于分布式数据库代理层开发。阿里巴巴于2012年正式对外开源了数据库中间件Cobar。Cobar前身源于Amoeba,在稳定性、性能和可靠性上做出了改进。Mycat是另一款源于Cobar的分布式数据库中间件。

Ice是ZeroC公司提供的一套开源中间件平台,是目前最流行的分布式应用解决方案之一。在主要的几种分布式解决方案中,.Net只支持windows平台,COBRA的实现复杂,学习和实施成本高,WebService在性能和安全性上均有缺陷。Ice源于解决其他中间件的不足,它不仅支持不同的系统,如windows、Linux,还支持不同的开发语言,如C++、Java、Python等。Ice为分布式应用提供了一整套强大的特性和功能支持,如负载均衡、软件分发、数据同步等,同时,在性能和安全性方面也十分出色。

因此,本文基于Ice,提供一种构建分布式MySQL数据库服务的解决方案:基于MySQL搭建一主多从的数据库集群,同时为解决数据一致性问题提供方案;基于IceGrid的特性开发数据库中间件,使客户端可以通过统一的接口读写数据库集群,实现位置透明,将客户端请求合理分配到集群内的各个节点,实现负载均衡。

2 构建分布式MySQL数据库应用

MySQL支持一台主服务器同时向多台从服务器进行复制,利用MySQL复制可以构建一主多从的数据库集群。MySQL复制的过程如下:

(1) 主库(master)执行更新操作、提交事务(commit)、记录二进制日志(binlog)、标记事务成功,同时将binlog发送给从库(salve);

(2) slave的IO线程接收binlog,转存至中继日志(relay log);

(3) slave 的SQL线程读取relay log,重做更新操作。

在构建企业级的分布式数据库应用时,MySQL复制有可能出现同步延时和主从不一致的问题。原因在于, MySQL复制在主库上执行(1)和在从库上执行(3)是异步的。有数据显示,master的QPS达到1万左右时,slave重做relay log的QPS只有2000,产生延迟的主要瓶颈在slave重做relog log上。

MySQL为了保证主从一致,提供了半同步复制。使用半同步复制后,master在写入binlog后,通知所有slave接收该事务,等待至少一个slave写入relay log并成功刷新到磁盘后,再标记事务成功。这样master可以保证集群内,至少有一台slave的数据是和master是一致的。

为了解决主从延迟问题,MySQL5.6开始支持多线程复制,slave上的SQL线程作为协调者将重做relay log任务分配给多个worker。MySQL5.7开始支持并行复制,一个组提交的事务可以并行回放,大大减少了同步延时。

在构建分布式MySQL数据库应用时,保证数据库集群的数据一致的解决方案如下:

(1) 对于MySQL5.7版本的系统,使用并行复制;

(2) 对于MySQL5.6版本的系统,在复制时使用GTID;

(3) 对实时性要求高的数据在主数据库上查询,实时性要求不高的数据在从数据库上查询;

(4) 使用半同步复制,使用SSD硬盘等优化方法。

3 Ice中间件

Ice是一种构建面向对象的客户端-服务器应用的中间件开发平台。Ice将实现某种功能的应用称为IceObject,将应用在服务端的实现称为服务Servant。IceObject与Servant通过Adapter关联,Adapter包含通信端点等信息,屏蔽了远程调用过程中的底层通信,即:IceObject包含了业务实现Servant和通信信息Adapter。客户端通过服务代理Proxy调用IceObject内的方法。

IceGrid是Ice提供的分布式解决方案,包含文件分发、负载均衡、快捷部署等功能。一个IceGrid域由一个Registry(注册表)和任意数量的Node(节点)构成。Node节点负责装载和启停服务实例,采集node节点的负载信息等;Registry负责维护各节点的信息和任务调度,并将这些信息持久化。

利用IceGrid的支持,可以实现分布式数据库服务的负载均衡。IceGrid创建复制组replica-group,每个replica-group与多个相同的Ice服务实例绑定。客户端调用服务时,根据一定的策略将服务请求分发到Ice实例。负载均衡的策略分为4种:1、Random(随机方式),Registry随机选择一个服务实例,不检查实例的负载。2、Adaptive(自适应方式),Registry从所有实例中选择一个负载最轻的实例供客户端调用。3、Round-Robin(最近最少使用方式),Registry返回最近的最少被调用的实例。4、Ordered(顺序方式):Registry根据实例优先级,从高到低顺序选择一个实例返回。

利用Ice的间接代理,可以实现分布式数据库服务的位置透明。客户端调用服务时,不会直接访问某个服务实例,而是先访问Register服务。Register记录所有实例的通信端点,Register按一定的策略将一个可用的服务实例返回给客户端代理。客户端根据Register返回的端点跟远程服务实例建立连接,实现调用。因此,客户端在调用数据库服务时,并不需要知道自己调用的是哪台服务器上的哪个实例,可以将服务本身作为一个整体使用。

4 基于Ice的分布式MySQL数据库访问服务

4.1 服务的总体架构

总体架构如图1所示:

(1) 数据库访问服务客户端

客户端首先获得数据库访问服务的代理Proxy,然后通过代理Proxy提供的方法远程调用数据库访问服务。

(2) 数据库访问服务

a) 监听客户端的数据库访问请求,连接MySQL数据库,执行查询或更新操作,将结果集返回客户端。

b) 维护MySQL连接池,对于同一客户端的请求,复用数据库连接,减少建立数据库连接的次数。

c) 缓存查询结果,对于重复查询直接返回查询结果,提高查询效率。

根据Ice的Slice语法,定义数据库访问服务DBOperator的接口如下:

客户端通过代理连接数据库,可以像使用本地方法一样,使用数据库访问服务实例上的方法,进行数据库操作。数据库访问服务实现了MySQL集群的读写分离。通过读配置文件,找到Master数据库的端口信息,将写操作(数据库更新)重新定向到Master节点所在的数据库访问服务上。对于读操作,则直接访问本地的MySQL数据库。同时,在数据库服务中实现了MySQL连接池和缓存,提高了数据库访问服务的性能。

(3) MySQL数据库

MySQL数据库被配置为“一主多从”的数据库集群。主服务器Master负责处理服务端发来的更新操作,并将更新操作复制到从服务器Slave上;从服务器Slave负责响应服务端实例发来的查询操作,重做Master发来的数据更新,保持主从数据一致。

(4) Node节点

a) 负责装载和启停服务。

b) 负责采集当前Node节点的负载信息,上报至Register,为负载均衡提供信息。

(5) Register(注册表)、集群的管理、监控和日志等

a) Register负责客户端请求到服务端实例的路由,按照某种负载均衡策略,为客户端的数据库服务代理返回一个可用的服务端实例。

b) Register收集Node节点上报的负载信息,将负载信息持久化。

c) 监控和管理IceGrid域内的每个Node和Server的状态。

d) 收集与分析各节点的日志。

4.2. 服务的处理时序

(1) 客户端访问数据库服务,向register请求获得数据库服务的代理Proxy。

(2) Register根据当前负载均衡策略,选择一个合适的数据库服务实例,将实例的端点(endpoint)信息返回给客户端的代理,供业务模块调用。

(3) 业务模块在获得代理Proxy后,根据Proxy的接口调用服务实例的数据库访问方法,如:建立数据库连接,执行查询或更新,关闭数据库连接等。

(4) 数据库服务实例响应Proxy的请求。如果当前查询结果在缓存中存在,数据库服务实例直接返回结果集。否则,服务实例连接MySQL,执行查询或更新操作。

(5) 数据库服务实例将MySQL的结果集加入缓存,返回给客户端。

(6) 业务模块由代理Proxy得到结果集。

4.3 服务的分布部署

Host1服务器部署Register、MySQL数据库的Master实例、数据库服务实例、Node节点等。Host2上的Registry作为Host1上的主Register的备份,在主Registry失效后工作。Host3是一个典型的处理读操作的服务节点。根据业务量的需求,可以通过增加和Host3一样的服务器来提高整个分布式数据库的性能,可以根据服务器的资源,在Host上增加数据库服务实例。

5 结语

针对构建分布式MySQL数据库的应用场景,本文提供了一种基于Ice中间件平台的分布式数据库服务解决方案,具有以下特点:

(1) 基于MySQL,搭建一主多从的数据库集群,给出了保证数据一致的解决方案。

(2) 基于Ice跨平台、跨语言的特性,数据库服务的客户端和服务端程序可以使用不同语言实现,提高了灵活性和兼容性。

(3) 基于Ice的间接代理和IceGrid提供的动态配置,数据库访问服务可以实现位置透明。

(下转第16页)

(上接第14页)

(4) 基于IceGrid提供的负载均衡策略,使数据库访问请求合理分配到各节点,是一种简捷高效的分布式数据库访问服务的实现手段。

(5) 数据库访问服务提供的接口,使开发人员可以专注于业务逻辑的实现,简化了数据库访问操作。

从系统运行的效果来看,这种分布式MySQL数据库服务可以适应频繁的增减设备和业务逻辑变更,有效提高了开发效率,降低了维护成本。

参考文献:

[1]Henning M, Spruiell M. Distributed Programming with Ice[M].2009.

[2]蒋跃军,郭建康.基于ICE中间件的分布式搜索服务[J].电脑知识与技术,2009,5(22).

[3]张俊军,章旋.ICE中间件技术及其应用研究[J].计算机与现代化,2012(5):168.

[4]卢罡,徐勤良,许南山,郭俊霞.复杂网络松耦合分布式计算框架的设计和实现[J].计算机工程,2015,41(11).

[5]丁云亮,谷利泽,杨榆.基于分布式中间件ICE的应用架构研究[J].计算机应用,2009,29(28).

[6]丁东京,周明天.基于ICE的局域网监控设计与实现[J].计算机工程与设计,2007,28(10):2466.

[7]吴治辉.ZeroC Ice权威指南[M].北京:电子工业出版社,2015.6.

[8]张伟丽,江春华,魏劲超.MySQL复制技术的研究及应用[J].计算机科学,2012,39(11A):168.

[9]张飞,姜劲磊,李庆虎.利用MySQL构建分布式应用[J].计算机工程与应用,2001,37(18):102.

猜你喜欢
中间件
RFID中间件技术及其应用研究
基于VanConnect中间件的设计与开发
基于Android 平台的OSGi 架构中间件的研究与应用
中间件在高速公路领域的应用
基于SAF规范的高可用电信中间件设计
一种支持智能环境构建的中间件