《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 一种云数据库的设计与实现
一种云数据库的设计与实现
2014年微型机与应用第16期
裴文斌,马 军,石 辉,方 伟
西安雷迪维护系统设备有限公司,陕西 西安 710075
摘要: 云数据库是把各种关系型数据库看成一系列简单的二维表,并基于简化版本的SQL或访问对象进行操作的数据库。云数据库能够为多个用户同时提供类似于单节点数据库的服务。在当前云计算技术不断发展中,数据库不断发展进化,从原始的单节点数据库逐渐发展成为云数据库,数据存储能力相对于过去提高了数倍。目前云数据库服务不断增多,在此背景下,讨论了一种云数据库的设计与核心子系统的实现。
Abstract:
Key words :

  摘  要云数据库是把各种关系型数据库看成一系列简单的二维表,并基于简化版本的SQL或访问对象进行操作的数据库。云数据库能够为多个用户同时提供类似于单节点数据库的服务。在当前云计算技术不断发展中,数据库不断发展进化,从原始的单节点数据库逐渐发展成为云数据库,数据存储能力相对于过去提高了数倍。目前云数据库服务不断增多,在此背景下,讨论了一种云数据库的设计与核心子系统的实现。

  关键词: 云数据库;云计算;数据分布高可用;一致性hash

  随着计算机网络的飞速发展以及网络带宽的不断增长,利用网络技术来建立云数据库中心已经成为可能。近年来,云数据库已经成为数据库发展的新趋势。云数据库可以将分散在各个数据中心的数据库资源有效地组织利用起来,构成海量数据存储中心。云数据库能够更快地、更好地解决各个客户海量数据的存储问题,能够打破传统的单节点数据库的网络带宽和磁盘I/O的限制,为客户提供高带宽、高I/O、高并发的数据连接服务。同时,云数据库中心具有系统设备利用率高、数据节点扩容方便、数据的多备份、数据高可用等特点。本文对云数据库的各功能模块进行研究,并分析了各功能模块的实现方式。

1 云数据库的设计

  云数据库建立在互联网上的数据库中心,能够同时为多个客户提供数据库服务,并且其互相之间不影响。系统整体框图如图1所示。

001.jpg

  云数据库对外提供统一的API,统一的API能够屏蔽云数据库内部实现的细节。对外提供一种统一的数据库连接协议,使用户能够通过不同的编程语言、不同的连接工具进行连接使用。

  云数据库的核心服务是为用户提供数据库服务,其主要功能有:

  (1)用户检测。引进用户认证系统检测多用户状态,认证系统在用户登录、退出时进行状态记录,在用户每次进行数据操作时,必须确定该操作是否安全。

  (2)安全检测。安全系统全程监控用户的操作,以确认用户的操作对数据库中其他用户和数据库整体安全没有影响,以及检测来自网络上的各种数据库的攻击。

  (3)多租户。云数据库多租户服务是为解决多个用户同时接入云数据库系统而设计实现的。多个用户同时接入云数据库,不仅要求各个用户之间互相隔离,而且要求各个用户之间的数据互不影响,各个用户只能访问自己的数据库。

  (4)数据分布。为了存储用户的海量数据,将用户的数据分布在数据库集群中不同的节点上,这样不仅方便系统的扩容,而且数据I/O操作被分配到多个节点上。数据的分布使用一致性hash[1]算法,保证在加入节点时,数据库中的数据以最小的代价扩展到新节点中。

  (5)数据高可用。云数据库中的数据每份至少需要存在于3个副本中,3个副本进行实时同步,当某一数据节点宕机出现故障时,数据能够在其他节点正常读取。多副本的存在,还可以使用负载均衡算法,把数据I/O操作分散到负载低的数据节点[2]。

  (6)缓存。基于大数据的负载特性,以内存作为存储介质,用以解决数据查询性能延迟的问题[3]。使用Memcached或者Redis缓存系统[4],将数据放入内存,读写时若能命中,系统的I/O能力至少能够提高8~10个数量级。

  (7)数据快照。数据快照功能能够在某个时间点给用户数据生成快照,该快照能够供用户下载保存,同时用户能够把数据回滚至该快照。

  数据库节点集群提供用户数据实际的保存位置,该集群一般由多个数据库中心组成,各个数据库中心的数据互相备份,以保证在一个或多个数据库中心遭到灾难性损坏时,云数据库依然能够正常运行。当各个数据库中心的节点无法提供足够容量时,可以动态地、无需关机地添加数据节点至云数据库中心。

2 云数据库的实现

  云数据库为了实现高扩展性,所有子系统均由单独模块构成,所有模块均可由新的相关功能模块代替。云数据库核心模块包括:安全审计模块、通信模块、SQL解析模块、路由管理模块、消息分发模块、策略管理模块、缓存模块、消息处理、结果集处理模块、数据快照模块。

  2.1 系统核心流程

  应用系统发送数据库请求,云数据库通过通信管理模块接收到请求,调用安全审计模块进行安全审计[5]。安全审计模块负责所有云数据库连接的安全管理。通信管理模块管理内部消息的编码解码工作,管理着内部所有的连接对象。

  连接对象将消息转发给消息转换模块;消息转换模块将发送过来的消息进行包协议处理,然后发送给SQL解析模块;SQL解析模块生成相应的SQL对象。SQL解析模块有SQL解析和SQL过滤功能,能够过滤掉SQL中非法的字符串等。

  SQL对象将数据流交给路由管理模块。路由管理模块进行SQL路由解析、SQL分发等SQL操作。同时,路由管理模块监控数据库节点池中的数据库节点和数据节点的心跳信息。路由管理模块的配置只能由云数据库管理员进行操作,其中配置规则包括:路由规则、虚拟节点规则、物理数据库节点规则和数据快照规则。同时,数据快照功能直接作用于路由管理模块,通过路由管理模块的消息分发功能把快照命令发送到物理数据库节点中。

  策略管理模块管理物理数据库节点中的数据切分规则。数据切分规则使用一致性hash算法进行数据切分,当添加新的数据库节点到数据节点池中时,能够以最小的代价把数据迁移至新节点中。同时,云数据库服务能够保证在不影响用户使用的情况下能够完成节点的加入以及数据的迁移。

  消息分发模块接收来自路由管理模块发送的消息队列,把消息队列中的消息按照规则发送至相应的数据库节点中,进行相应的数据节点操作。把数据库操作完成返回的信息通过结果集返回给结果集合并器,结果集合并器将合并的结果返回给通信管理模块,最终响应应用系统的请求。当然,如果云数据库接入缓存系统,消息分发器首先会从缓存中查询是否有需要的数据信息。如果有,直接操作缓存中的数据并返回给应用系统;如果没有,则从数据节点中查询出需要的数据,并保存至缓存系统中,以备下次使用。

  云数据库核心数据流图如图2所示。

002.jpg

  2.2 核心子系统的实现

  本文所描述的云数据库多租户技术采用共享数据、隔离数据库的架构。物理数据库使用数据库集群中的数据库。当初始化一个用户时,默认会创建一个新的数据库实例分配给该用户使用,该用户所有数据操作都在此数据库中进行。用户可以创建新的数据库实例,为了确保系统资源的合理使用,用户创建的数据库实例数量是一定的。如果两个用户创建的数据库实例名称相同,云数据库可以根据用户的信息和用户输入的信息进行md5值计算,使用md5值作为创建数据库实例的名称。云数据库把用户信息、用户输入的信息和生成的md5值进行对应保存,每次访问时进行相应的转换。

  云数据库中数据的存放方式是根据数据不同的存放方式进行设置的。本文在此提出一种经过大量实践总结而得出的切分方式,该切分方式可以保证云数据库在不减少性能损失的情况下,高效、快捷地切分数据。同时,在增加新的数据库节点时,能够使数据的迁移代价降到最低。

  一致性hash算法的出现就是为了解决分布式系统中数据分布的问题。要使用一致性hash算法,首先,将需要映射的数据节点通过hash算法计算出其hash值,并分布在hash环上;其次,将需要存储的数据经过hash算法,获得其hash值,并映射到hash环上;最后,从数据映射到的位置顺时针开始查找,将数据保存在找到的第一个数据库节点中。232与0重合,超过232则从0位置开始寻找数据库节点,如图3所示。

003.jpg

  例如,存放数据的物理数据节点数为4个,则计算这4个数据节点的hash值,并分布在hash环上。一条数据写入后,系统首先生成其唯一的ID,并计算该ID值对应的hash值,根据hash值映射到hash环上,顺时针寻找第一个遇到的数据库节点,将数据保存至该节点中。假设该hash值落在数据库节点1与数据库节点2之间,则顺时针找到的第一个数据库节点为2,数据最终会被保存在节点2中。

  如果,在数据库节点2和数据库节点3中增加一个数据库节点5,则数据库节点2到数据库节点5中间的数据需要重新映射到数据库节点5中。数据库节点3删除数据库节点2到数据库节点5之间的数据,如图4所示。

004.jpg

  数据库节点保存的数据都有多个备份,以防止单点的出现。同时,在数据库节点增加或删除时,可以使用备份节点提供服务,从而使得整个云数据库系统无需停机就能够完成节点的扩展、移除。

  云数据库中的通信管理系统负责整个云数据库中应用系统到云数据库之间通信过程的检测。安全审计检测系统使用了防火墙技术,同时结合了数据过滤、包过滤技术。其核心是安全审计规则,规则配置得是否合理是安全审计系统能否正常、高效运行的基础。

  为了兼容多种应用使用不同的连接方式连接至云数据库,云数据库中通信管理系统配置了多种消息编码、解码规则。当使用不同数据库协议进行连接时,通信管理系统调用不同的规则进行编码、解码后,数据信息存放到数据节点中。例如,当使用MySQL协议连接云数据库时,云数据库系统通信管理模块使用MySQL协议解码连接,当需要发送给应用系统结果时,通信管理模块使用MySQL协议进行编码。使用其他协议连接时,其过程相同。为了使云数据库兼容更多的协议,不能使用某个数据库的方言,应该使用基于标准的SQL语言。

  云数据库中存放数据的物理节点可以使用多种不同的数据库系统。当不同的数据库系统接入云数据库时,云数据库使用后端中对应的连接协议连接数据库。使用该方法能够使云数据库兼容多种数据库系统,提高系统的可用性。

  路由管理模块是云数据库核心模块之一。数据节点分为虚拟节点、物理节点。物理数据库节点组成虚拟节点,多个虚拟节点组成更大的虚拟节点。每个虚拟节点对云数据库来说就是一个数据存储点,云数据库对数据的存取就是对虚拟节点的操作。虚拟节点中一般有多个物理数据库节点,并且数据互为备份。当其中某个物理数据库节点宕机,路由管理模块中的心跳检测机制能够立即获得节点掉线信息,并且把该物理数据库节点操作分散到备份节点中。

  路由管理模块能够把SQL解析器解析的SQL对象分发到不同的数据节点中。路由管理模块的核心是路由规则,在该规则中,记录该管理器下所有的节点配置信息,包括连接数、连接时长、超时时长等所有基本信息。同时,路由管理器还提供用户虚拟数据节点、物理节点及用户数据库容量使用接口API查询的功能。

3 性能测试

  测试环境为:(1)云数据库服务平台:IBM高性能服务器,磁盘≥100 GB,内存≥16 GB,网络≥100 Mb/s,数量1台;运行环境:Linux。(2)数据库节点:IBM刀片机,磁盘空间≥1T,内存≥4 GB,网络≥100 Mb/s,数量4台,运行环境:Linux。

  测试环境架构图如图5所示。

005.jpg

  测试采用4台数据库节点服务器,两两备份,云数据库数据按照数据生成ID切分,分别写入节点数据库1和节点数据库3。节点数据库2和节点数据库4作为读数据库。表1是100线程并发数测试结果,表2是500线程并发数测试结果。

006.jpg

  从测试结果可以总结出,云数据库中单个用户的并发数在500以下,不存在性能瓶颈问题;云数据库的性能与服务器的配置存在很大的关系;云数据库节点的增加对于服务的读性能有很大提高,基本成水平增长;数据库节点的写性能在不开通事务的情况下也随着节点数量的增加而增加,在开通事务时,对写性能的影响很大。

  参考文献

  [1] DARGER D, LEHMAN E, LEIGHTON T, et al. Consistent hashing and random trees: distributed caching protocols for relieving hot spots on the world wide Web[C]. ACM Symposium on Theory of Computing, 1997. 1997:654-663.

  [2] 张青凤, 张凤琴, 王磊. 多数据中心的数据同步模型研究与设计[J].微型机与应用,2013,32(12):60-62.

  [3] Jia Zhen, Wang Lei ,Zhan Jianfeng, et al. Characterizing data analysis workloads in data centers[C]. In Workload Characterization(IISWC), 2013 IEEE International Symposium on. IEEE, 2013.

  [4] 曾超宇,李金香.Redis在高速缓存系统中的应用[J].微型机与应用,2013,32(12):11-13.

  [5] 梁钢,茅秋吟.云计算IaaS平台的信息安全和运维服务设计[J].电子技术应用,2013,39(7):68-70.


此内容为AET网站原创,未经授权禁止转载。