
148-
分布式内存数据库的实现
胡彦斌
(中国联合网络通信有限公司哈尔滨软件研究院,黑龙江哈尔滨150000)
信息技术
摘要:本文提出了一种通过引入内存数据库层,建立两层多分区分布式数据库架构。此方案用于解决海量高并发系统的数据存储和访问问题,也造用于电子商务等数据模型复杂且业务复杂的互联网站。软件源码已由中国联合网络通信有限公司哈尔滨软件研究院实现
关键词:分市式;内存数据库;数据持久化;云计算;互联网应用
1分布式数据库和nosql的区别
这些年互联网站发展迅猛,为应对海量数据下的高并发访间,产生了各种分布式架构设计思想,例如Key-Value引擎,数据分区等。淘宝、阿里巴巴的开效缓存服务(OpenCacheServioe.简称OCS)"就是代表但是电子商务类网站海量数据也有复杂的数据结构及数据之间的关联。这时nosal并不是最合适的。原固有两个方面:
1.1数据模型复杂。淘宝和阿里巴巴的会员、宝贝、供求、订单等核心实体数据模型复杂,属性个数几十到上百个。例如:会员(Memher)就包含基本信息联系、工商、账户等多个域的信息;另外,核心实体之间,外围实体与核心实体之间还存在复杂的关联
1.2业务复杂:模型的复杂源于业务和逻辑的复杂。电子商务网站大量查询场景是结构化查询,例如:
在淘宝上查询"卖家在江渐沪,价格在50-200元的男士T恤",在阿里巴巴上“列出某个会员所有待发货的订单”这类查询(当然,阿里巴)主要针对多个非主键字段,即便对于BigTable、Casandra这样的基于Column的Key-Value数据库,其简单的QueryAPI还无法胜任此类需求。因此在阿里巴巴和淘宝,采用的是云数据库(Relational DatabaseService,即关系型数据库服务,简称RDS)。
2电信业务需要分布式内存数据库
随着电信业务的发展,电信级业务支撑系统为了越来越迅捷的响应业务请求,将越来越多的数据从物理磁盘加载到内存中。为了简化应用系统的数据管理,使其专注于业务的发展,并且使得内存中数据管理的透明化,专业的内存数据库软件便应运而生
联通集团正在将省级业务支撑系统过渡到大区、全国性的集中系统中。面对越来越丰富的业务,越来越多的信息,如何快速准确处理海量信息是每个运营商都要面对的间题。3G4G的业务需要实时快捷的支持。所以,电信业务中数据的海量性、复杂性、多样性、实时计费等特性,决定了简单的nosl缓存式内存管理并不适合,需要的是分布式内存数据库。
3内存数据库tmdb示例
顾名思义内存数据库就是对内存中的数据进行管理。Tmdb通过数据页管理数据库,数据页分为管理页、表数据页、索引数据页。(图1)
tmdb提供终端工具tmsql对数据库进行管理维护。管理类命令: create table,create index ,alter table,alter index,drop table,drop index. sequence,lock。数据操作类命令:select,insert,update,delete。
其中index提供hash、tree,char tree等方式。提供sql_paser.so对sql string语法解析。
提供dbloader工具数据同步。提供tmdbapi外部调用。 4内存数据库的持久化
对内存数据库应用来讲,持久化场景和非持久化场景都有。持久化场景中,数据最终还是要存储到磁盘(Disk)上,内存数据库中的数据变化需要复制到磁盘或磁盘数据库上。这时,从内存向磁盘复制数据的过程可以看作原始写操作的异步操作,显然,异步操作使得前端的写操作显得更快。如图2所示。
在事务型(OLTP)系统中,内存数据库中在启动时需要和磁盘数据库保持一致。因此,内存数据库需要有相同的库表定义;并且在第一启动时,将所需库表数据加载到内存数据库中。
有三种方案实现内存数据库的持久化,每种方案都包括:异步持久化、同步持久化。
先介绍第一种方案。
同步持久化:持久化数据保存在同一台机器的dis上,以文件形式
4et+ p+g* 4s1s ps+e 2
+++ +++ I+tex ?
图1tmdb的内存结构
Disd ri+ We ha+ rit.
图2内存数据库持久化方案图3tmdb集群化示意图
存在。每次对内存数据操作,都对disk上的数据文件操作。
异步持久化:提供dbloader,可以将tmdh中数据和物理数据库数据相互同步
应用场景,主要是rale、billing。第二种方案是日志备份和dhloader 结合使用。第三种方案的前提是,采用分布式内存数据库,相互备份策略。当前只实现了第一种方案。
5内存数据库的集群化
为了实现内存数据库的分布式应用,需要对内存数据库集群化
目前,经典的MySQL集群,通过读写分离,水平切分,实现海量数据存储。为应对海量数据存储,内存数据库回样需要做集群。垂直和水平切分策略,可用性策略与MySQL集群架构设计基本相同。如图3所示,其中接入集群服务器是分布式数据库代理,它进行数据路由等控制。可以和分布式mysql共用。
唯一的不同是,由于内存数据库的高性能,可以不再进行读写分离设计。
6分布式事务
数据库切分架构带来分布式事务间题,对一此事务要求较高的场景,这顾其挑战。目前策略是尽量避免事务操作,如果必须有一致性要求,则转化为异步事务处理。简单说就是采用异步消息机制处理。就像阿里的Notify。我们是通过Ixrs_serv实现的。
参考文献
[1]蛋旭强.沟宝网架构师岳旭强的年度展望[EB/OL]http/www.infoq.com cn;2.
[2]云技术在虚拟运营商中的应用.1.
[3]阿里的Notify介绍.(2013)13.