收藏 分享(赏)

分布式数据库解决方案.pdf

上传人:精品资料 文档编号:10285644 上传时间:2019-10-28 格式:PDF 页数:21 大小:346.55KB
下载 相关 举报
分布式数据库解决方案.pdf_第1页
第1页 / 共21页
分布式数据库解决方案.pdf_第2页
第2页 / 共21页
分布式数据库解决方案.pdf_第3页
第3页 / 共21页
分布式数据库解决方案.pdf_第4页
第4页 / 共21页
分布式数据库解决方案.pdf_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、Amoeba:分布式数据库Proxy解决方案author:陈思儒随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:集中式处理,势必造成性能瓶颈;应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。在这种形势下,集中式数据库将向分布式数据库发展。分布式数据库系统的优点:1、降低费用。分布式数据库在地理上可以式分布的。其系统的结构符合这种分布的要求。允 用在 的 地 用、 、 , 行 ,降低 , 集中式 要

2、高要求的 。 分布式数据库在 台机上数据,其响应速currency1“。2、高系统整可用性。 fi 台数据库的故障 造成fl 的。3、 于扩展处理能和系统规模。分布式数据库系统的结构可以 地扩展系统,在分布式数据库中”一个的点,不影响现系统的 运行。这种方式 扩集中式系统要灵活经。在集中式系统中扩系统和系统“,于 不和 点,“的 和不可行的。Amoeba在分布式数据库系统充 Amoeba在分布式数据库 将 解决数据 分,应 集中式 处理分布式数据。这集中式 一个 , 不 要 种数据的 理 地。 这种出现在 , 分布式数据的 程。CopyRight Struct chenAmoeba Overv

3、iewAmoeba于分布式数据库 理 发 , 于amoeba的数据库分布式 理Amoeba For Mysql。以下在 发、 用、 Amoeba 时,可能 要的 : Amoeba 描述Amoeba 的以及它的 Amoeba For Mysql 介绍如何快速配置Amoeba For Mysql,如何启动Amoeba For Mysql,和必须确保已经具 所先决条 Amoeba 高 用 主要讲述如何利用Amoeba fi标数据库服 创建负责均衡、数据 分、读写分离以及Amoeba 身性能调优方 如何在Amoeba上进行高 发fi其他数据库 发Amoeba 例、数据库 关的函数 发 。CopyRig

4、ht Struct chenAmoeba Amoeba(形虫)项,专注分布式数据库proxy 发。座落与Client、DB Server(s)之间。 透。具负载均衡、高可用性、sql过滤、读写分离、可路 关的query到标数据库、可并发请求多台数据库合并结。主要解决: 降低数据 分带来的 多数据库结构 分规则并降低数据 分规则给应用带来的影响 降低db 与 的连数 读写分离CopyRight Struct chenAmoeba ArchitectureAmoeba fiDataBase Proxy的 发 。 于解决数据 分、读写分离。以下将fi介绍Amoeba Built on Java NI

5、O1. 采用java NIO 无阻塞模式,不像传统的Socket编程在并发的情况非浪费系统资源、可扩展性也差 Reusable Server ConnectionAmoeba 与数据库连的可重用非高,在Amoeba系统内所Database Connection同时共享给所连到Amoeba的 读写分离、数据 分1. 传统的读写分离技术 要 过 或者 关的Database Driver技术才能解决, 的配置也 2. 台Database 性能总 限 的, 于Amoeba上可以寻找一种可线性扩展的多数据库支持。AmoebafiDBA一种非友好的类似SQL语法的数据 分规则同时 不用担心过多的DataB

6、ase Server会给应用带来 多的配置。 支持高可用性、负责均衡1. Amoeba Database 连的异检测与连恢 功能。2. 用 可省 用其他的负载均衡的 ,Amoeba多台Database Server负载均衡策略(轮 、 活动连数)CopyRight Struct chenAmoeba SequenceCopyRight Struct chenAmoeba For MysqlAmoeba For Mysql Amoeba项的子项。要 用Amoeba For Mysql必须确保已符合所先决条 :先决条 :1. Java SE 1.5 或以上 Amoeba 于JDK1.5 发的,采用

7、JDK1.5的特性。2. 支持Mysql 协议版 10(mysql 4.1以的版 )。3. 的网络环境至运行一个mysql 4.1以上的服 如何快速配置:1. 配置Server(以下 双核CPU配置,调整线程数可优 性能),配置说:配置项 否必选 默认值 说否 8066 Amoeba Server绑定的 外 口ipAddress 否 空 Amoeba绑定的IPuser 空 连到Amoeba的用 名password 否 空 连到Amoeba所用的 readThreadPoolSize 否 16 负责读 、databa seserver 网络数据 线程数clientSideThreadPoolSi

8、ze 否 16 负责读 行 请求的线程数serverSideThreadPoolSize 否 16 负责处理服 数据 的线程数CopyRight Struct chen2. 配置ConnectionManager要至配置一个ConnectionManager, 个ConnectionManager将 fi一个线程启动,ConnectionManager负责 理所注 在 身的Conneciton、负责他 的空 检测, 检测、IO Event .AuthingableConnectionManager3.配置dbServer , 要至配置一个dbServer, 个dbServer将 理数据库Ser

9、ver的 factoryConfig -标 理数据库 配置情况:配置项 否必选 默认值 说manager 空 表 该dbServer 将注 到 定的ConnectionManagerport 否 3306 标数据库 口ipAddress 否 127.0.0.1 标数据库IPschema 否 空 连 的SchemaCopyRight Struct chen配置项 否必选 默认值 说user 空 用于 标数据库的用 名password 否 空 用于 标数据库的 className空 连 现类(.MysqlServerConnectionFactory)4. poolConfig - 连 配置情况:

10、配置项 否必选 默认值 说className 否 连 现类。默认:.poolable.PoolableObjectPoolmaxActive 否 8 活动连数,如 到 活动连数,则会 maxIdle 否 8 的空 连数,如 过则将会关 多 的空 连minIdle 否 0 的空 连,连 将保持 空 连, 这 连不用testOnBorrow 否 false 连在 用 否检 连可用testWhileIdle 否 fale 否检测空 连,这个数启动的时下2个数才minEvictableIdleTimeMillis否 30分 连空 多时间将currency1“(关 )(time Unit:ms) tim

11、eBetweenEvictionRunsMillis否 -1 用于“空 连间多时间检 一空 连(time Unit:ms)dbServer Tag C.MysqlServerConnectionFactorydefaultManager3301127.0.0.1rootpasswordtestCopyRight Struct .poolable.PoolableObjectP.MysqlServerConnectionFactorydefaultM.poolable.PoolableObjectP.MysqlServerConnectionFactorydefaultM.poolable.Po

12、olableObjectPool20020010600000600000truetrueCopyRight Struct chencom.meidusa.amoeba.server.MultipleServerPool1server1,server2,server35. QueryRouter 路配置配置项 否必选 默认值 说className 空 QueryRouter 现类,Amoeba For Mysql(com.meidusa.amoeba.mysql.parser.MysqlQueryRouter)。functionConfig否 空 用于解sql 函数的配置 ,如不配置则将不解 函

13、数sql或者解的不整。ruleConfig 否 空 数据 分规则配置 ,如不配置则sql数据 分功能将不能用needParse 否 true 否 sql进行parse,如false 则将不能 用数据 分、读写分离 功能defaultPool 空 needParse=false、无法解query、不足 分规则的、writePool|readPool = null情况。所sql 将在默认dbServer上 行。(必选)writePool 否 空 启用needParse 功能,并 ”配到数据 分规则,则update、insert、delete 语将在这个pool中 行readPool 否 空 启用n

14、eedParse 功能,并 ”配到数据 分规则,则select 语将在这个pool中 行LRUMapSize 否 1000 statment cache , sql 解到的statmentCopyRight Struct chenAmoeba 高 用 于 Amoeba 的读写分离 在不影响应用的情况下,引 amoeba将透地解决数据读写分离的技术方案。 于 Amoeba 的数据 分 分(向)数据 数据网 、进行 分, 如用 数据、 数据、 数据、标数据、 数据 个 一个立的数据库或者数据库服 。引 Amoeba将不 要 多的能好地定 这 数据。 于 Amoeba 数据 fi 分 应 多数的 分

15、规则, 解决数据 fi 分。 的数据库系统 具扩展性能。 具 载能。CopyRight Struct chenMaster/Slave 结构之下的读写分离先说一下amoeba mysql proxy在读写分离的 用上的 。在mysql proxy 6.0版 上如 要读写分离并 读集、写集机 多情况下,用mysql proxy 要 的 , mysql proxy现成的lua 。mysql proxy 配置 ,lua 它的fl , lua 方 的。 同 这种 要编写的 才能成一个 的配置。 amoeba 要进行 关的配置可以足 求。:一、Master/Slave 结构读写分离:Master:mas

16、ter (可读写)slaves:slave1、slave2、(2个fi 的数据库。 读/负载均衡)amoeba读写分离pool 关配置。并 负载均衡配置。可配置slave1、slave2形成一个的virtualSlave,该配置负载均衡、failOver、故障恢 功能com.meidusa.amoeba.server.MultipleServerPool 1 slave1,slave2 如不启用数据 分, 要配置QueryRouter性wirtePool= master readPool=virtualSlave CopyRight Struct chencom.meidusa.amoeba.

17、mysql.parser.MysqlQueryRouter 1500 master master virtualSlave true 到update/insert/delete将query语发到wirtePool,将select发到readPool机中 行。CopyRight Struct chen于Amoeba 数据 分 分(向)数据 数据网 、进行 分, 如用 数据、 数据、 数据、标数据、 数据 个 一个立的数据库或者数据库服 。如一个应用 的 功能模 。 可以 连 应的currency1 分的数据库。 一 的应用 要用到 多的 数据, 及到所的 数据。 分将会给应用带来一定的 , 程

18、发也会一定影响。整个应用的 将上“。Amoeba在其中充 功能, 于 利 。 应用与多个数据库数据 。如何 分功能: 3个数据库:userdb、blogdb、otherdbuserdb: user表blogdb: message、event、otherdb:其他表所在的数据库1、在amoeba 下config/amoeba.xml配置 中,启用ruleConfig配置。这 省略dbServer的配置, 关配置请dbServer 配置 com.meidusa.amoeba.mysql.parser.MysqlQueryRouter$amoeba.home/conf/rule.xml$amoeba

19、.home/conf/functionMap.xml1500otherdbtrue2、rule.xml配置 应配置, schema均fitest下来可以到 应的:CopyRight Struct chenselect * from user where user_name = myname; 将会到userdb 应的数据库上 行。Insert into message(id,gmt_create_time,msg) values(111,now(),only for test);将会在blogdb上 行的配置 可成 于amoeba的数据 分方案。3、amoeba不可以读写分离、 分, 可以结合

20、2者进行在 分上 进行读写分离。以userdb 例:构建master/slave结构master-userdb:可读写的mysql mastervirtual-userdb:可读的的slave(virtual db server 配置请virtual db 配置 )CopyRight Struct chen于Amoeba 数据 fi 分引用 可 性 佳 践:来 eBay 的经验 :功能分 我 的帮助, 凭它还不足以到fl可 的 构。 将功能一一解耦,项功能的资源 求随着时间,仍 可能 出 一系统的能。我 醒 , 分 。在 项功能内 ,我 要能把 负载分解成 多我 能驾驭的 元, 个 元都能 持

21、良好的性能 格 。这 fi分出场的时。在应用层,于eBay将各种交互都 计成无状态的,所以 fi分 之事。用标准的负载均衡服 来路进 的流。所应用服 都 均 的, 任何服 都不会 持事 性的状态,此负载均衡可以任 选择应用服 。如 要 多处理能, 要 地”的应用服 。数据库层的问题 挑战性,原 数据天生 状态的。我 会主要的访问路径 数据 fi分(或称fi sharding”)。例如用 数据 currency1分到20台主机上, 台主机 1/20的用 。随着用 数的,以及 个用 的数据,我 会” 多的主机,将用 分散到 多的机上去。商数据、购买数据、帐 数据 也都用同 的方式处理。用例不同,我

22、 分数据的方案也不同: 主键 取模(ID尾数fi1的到第一台主机,尾数fi二的到下一台,以此类推), ID的 间分(1-1M、1-2M ), 用一个 找表,还 综合以上的策略。不过具的分方案如何,总的思 支持数据分及重分的 础 施在可 性上远 不支持的优越。ebay的数据 fi 分案应该 家都能 到的, 数据 分以我 如何访问我 的应用,我应用如何规则做 时的数据 分 在应用层还 其他层 这个题可以托 给amoeba来解决。Amoeba dba非友好的数据 分规则表 式。 我 messagedb 要 据id hash进行 fi 分,我 可以 据hash范围分成2台:规则1:abs(hash(i

23、d) mod 2 = 0 blogdb-1规则2:abs(hash(id) mod 2 =1 blogdb-2这 abs、hash 都 amoeba 规则中 用到的函数,amoeba允 发人员”的规则函数。CopyRight Struct chen具规则配置(下blogdb-1、blogdb-2配置请dbserver 配置 ): IDblogdb-1IDblogdb-2Xml tableRule.rule.parameters tag介绍:parameters 这 的 sql表 式里的where 条 中的cloumn字段。如:rule1中数ID。 select * from message w

24、here id=12 多个parameters采用 分据上的数据 分规则:1、select * from message where id=1的时,amoeba将从blogdb-2中获取数据反馈给 。2、select * from message where id in(1,2,3,4,5) amoeba将从blogdb-1、blogdb-2同时发起请求,并 合并结, 将数据反馈给 。Amoeba多数据 分规则函数,也支持非 的数据 分规则。 如:1、ID 4 or CREATE_TIME between to_date(2008-11-12 00:00:00.0000) and to_dat

25、e(2008-12-10 00:00:00.0000)具amoeba所支持的规则默认函数表请sqljep CopyRight Struct chenAmoeba性能调优1、内 数 置JVM option Meaning -Xms initial java heap size -Xmx maximum java heap size -Xmn the size of the heap for the young generation -Xss the stack size for each thread 一般在server 的应用程序上 置-Xms -Xmx的值一 将“应用程序的性能。-Xms 于

26、 于-Xmx的值。如修amoeba启动 :DEFAULT_OPTS=“-Xmx512m -Xms512m -Xmn100m -Xss1024k“ 用 反映无法修线程堆栈 ,则 受 系统 ,linux则可以 过命令行 行或者/etc/profile 中添”: ulimit -s 20482、如何“amoeba并发响应速。 多线程配置这个问题经currency1及到。Amoeba响应速主要取决机性能 amoeba的配置以及网络条 。在amoeba.xml 中server 的配置里:readThreadPoolSize 用于处理 连发过来的数据, 数据库服 的数据的线程数这个可以 据 连数来调整。c

27、lientSideThreadPoolSize 在读线程读 的请求数据 以,这个线程将会手处理具的 ( 如:parse sql、query route)serverSideThreadPoolSize 在server 读取数据库 的数据 ,合并多数据库 的数据,将数据 发到 。 网络数配置netBufferSize 数主要 置SendBufferSize、ReceiveBufferSize 。1、SendBufferSize 性 置在SocketChannel.Write 方法的调用中期望发的字数。 际上,CopyRight Struct chen此性的 象 fi发 所分配的网络缓冲 空间。网

28、络缓冲 应至与应用程序缓冲同 ,这 才能确保在一 中能 和发所 的数据。 用SendBufferSize 性 置此 。如应用程序要发批数据, fiWrite 方法足够的应用程序缓冲 。如网络缓冲 于给Write 方法的数据,则 Write 方法的 调用都将多 行网络发 。 过确保网络缓冲 至与应用程序缓冲 同 ,可获 的数据吞吐。2、ReceiveBufferSize 性获取或 置希望在收缓冲 中fi 读 的字数。 际上,此性的 象 fi收传 数据所分配的网络缓冲 空间。网络缓冲 应至与应用程序缓冲 同 ,这 才能确保在调用SocketChannel.Read 方法时所 的数据 可用的。用Re

29、ceiveBufferSize 性 置此 。如应用程序将要收批数据,应fiRead 方法非的应用程序缓冲 。如网络缓冲 于在Read 方法中所请求的数据,将无法在一读取 中检索到所 的数据。这将导 ” Read 方法的调用数,进 ”系统 销。3、TcpNoDelay如禁用延迟,则fitrue;否则fifalse。默认值fifalse。如NoDelay fifalse,则 到TcpClient 收集到 数的输出数据之,它才会 过网络发数据 。于TCP 段中系统 销的数,发数据时率 低。 ,也 在这 情况:可能要发极的数据或者期望立 从发的 个数据 到响应。的决定应取决于网络率与应用程序要求之间的 重要性。CopyRight Struct chenThanksCopyRight Struct chenAbout authorauthor:struct chen 职于阿里巴巴(中国)网络技术限公司从事分布式消 系统、分布式应用、多层 计、规则引擎 发 研究,以及java 2d mmorpg 。可以 过siru.chenalibaba- 与我联系Amoeba 下载地址: http:/ Struct chen

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报