同事 Struct Chen 的 Amoeba For MySQL 项目已经 出来不短时间了,可一直没有时间好好体验,最近一直在做一些软件和硬件的功能以及性能相关的测试工作,Amoeba For MySQL自然也将被列入计划之内。 对 Amoeba For MySQL 的测试到目前位置主要还是功能方面的测
同事 Struct Chen 的 Amoeba For MySQL 项目已经 出来不短时间了,可一直没有时间好好体验,最近一直在做一些软件和硬件的功能以及性能相关的测试工作,Amoeba For MySQL自然也将被列入计划之内。
对 Amoeba For MySQL 的测试到目前位置主要还是功能方面的测试,配置了一套四台机器的环境:
Server A: Amoeba Server
Server B: MySQL Master
Server C: MySQL Slave1
Server D: MySQL Slave2
软件环境:RHEL5.2 (X86_64),JAVA 1.5.0_16, Amoeba For MySQL 0.31
测试功能:
1、读写分离
2、数据垂直切分
3、数据水平切分
amoeba.xml配置如下:
?xml版本="1.0"编码="gbk"?>
!DOCTYPE变形虫:配置系统“amoeba.dtd”>
变形虫:配置xmlns:amoeba="http://amoeba.meidusa .com/">
服务器>
属性名称="港口">8066属性>
属性名称="ip 地址“>10.0.38.21属性>
属性名称="readThreadPoolSize">500属性>
属性名称="clientSideThreadPoolSize">500属性 >
属性名称="serverSideThreadPoolSize" >500房产>
属性 名称="netBufferSize">200 属性>
属性名称="tcpNoDelay">true属性 >
属性名称=" 用户">用户属性>
属性名称="密码">密码属性>
服务器>
< ;连接管理器列表>
连接管理器名称 ="defaultManager">
类名>com.meidusa.amoeba.net.AuthingableConnectionManager类名>
连接管理器>
connectionmanagerlist>
数据库服务器列表>
数据库服务器姓名="师父">
工厂配置>
类名>com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory类名>
物业姓名="经理“>defaultManager属性>
属性名称="端口“>3306属性>
属性名称="ip 地址“>10.0.38.37属性>
属性名称="架构“>测试属性>
属性名称="用户 ">根属性>
属性名称="密码">密码属性>
工厂配置>
poolconfig>
类名>com.meidusa .amoeba.net.poolable.PoolableObjectPool类名>
属性名称="maxActive">500房产>
属性名称="maxIdle"> 200房产>
属性名称="minIdle">10属性>
属性名称="minEvictableIdleTimeMillis">600000 房产>
房产名称="timeBetweenEvictionRunsMillis">600000房产>
房产名称="testOnBorrow">true属性>
属性名称="testWhileIdle" >true属性>
poolconfig>
数据库服务器 >
数据库服务器名称="slave1">
工厂配置>
类名>com.meidusa.amoeba .mysql.net.MysqlServerConnectionFactory类名>
物业姓名="经理"> defaultManager属性>
属性名称="端口">3306房产>
房产名称="ip 地址">10.0 .38.22财产>
财产名称="架构">测试属性>
<propertyname="user">rootproperty>
<propertyname="password">passwordproperty>
工厂配置>
poolconfig>
类名>com.meidusa .amoeba.net.poolable.PoolableObjectPool类名>
属性名称="maxActive">500房产>
属性名称="maxIdle"> 200房产>
属性名称="minIdle">10属性>
属性名称="minEvictableIdleTimeMillis">600000 房产>
房产名称="timeBetweenEvictionRunsMillis">600000房产>
房产名称="testOnBorrow">true属性>
<propertyname="testWhileIdle">trueproperty>
poolconfig>
dbserver>
<dbservername="slave2">
<factoryconfig>
... ...
factoryconfig>
<poolconfig>
... ...
poolconfig>
dbserver>
<dbservername="virtualSlave"virtual="true">
<poolconfig>
类名>com.meidusa.amoeba.server.MultipleServerPool 类名>
属性名称="负载平衡">1属性>
属性名称="poolNames" >slave1,slave2属性>
poolconfig>
数据库服务器>
数据库服务器列表>
查询路由器>
类名>com.meidusa.amoeba.mysql.parser.MysqlQueryRouter类名> ;
属性名称="ruleConfig">${amoeba.home}/conf/rule.xml房产>
房产名称="functionConfig">${amoeba.home}/conf/functionMap.xml房产>
<房产名称="ruleFunctionConfig">${amoeba.home}/conf /ruleFunctionMap.xml属性>
<属性名称="LRUMapSize" >1500房产>
<属性名称="defaultPool">主人属性>
<属性名称="writePool">主人属性>
<属性名称="readPool" >virtualSlave属性>
<属性名称="needParse">true属性>
< ;/queryrouter>
变形虫>;
rule.xml配置:
?xml版本="1.0"编码="gbk"?>
!DOCTYPE变形虫:规则系统“rule.dtd”>
变形虫:rulexmlns:amoeba="http://amoeba.meidusa .com/">
表规则名称="test_horiz"架构="测试"defaultPools="master" >
规则名称=" 规则1">
参数>ID参数>
表达式> ![CDATA[ ID 100000000]]>表达式>
defaultpools>master默认池>
读取池>slave1 读取池>
写入池>master写入池>
规则>
<规则名称="规则2">
<参数>ID参数>
<表情>< ![CDATA[ ID100000001和200000000 ]]>表情>
<<defaultpools>masterdefaultpools>
<写入池>master2写入池>
<读取池>slave2 读取池>
规则>
<规则名称="规则 3">
<参数>ID参数>
<表达式> ![CDATA[ ID > 200000000 ]]>表达式>
defaultpools>masterdefaultpools>
规则>
tablerule>
tablerule名称="master"架构="测试 "defaultPools="master"/>
tablerule名称="slave1 "架构="测试"默认池="slave1"/>
<表规则名称="slave2"架构="测试"defaultPools= "slave2"/>
表规则名称="master"架构= "t"defaultPools="master"/>
变形虫>
由于第一步主要还只是测试读写分离与数据的垂直切分,所以水平切分的规则设置的很简单,按照ID的范围设置简单的规则。而设置一些更为复杂的规则。
总体测试效果还是比较满意的,预期的功能都一切正常,当然所用于测试的SQL语句也大都比较简单,主要还是根据当前工作中遇到的一些SQL。
这次测试没有进行性能测试,等后面再找时间测试一下,不知道有没有哪位朋友已经进行了相应的性能测试了?性能测试之后就要开始规划应用到上面的某些应用去了
译文地址:Amoeba For MySQL 功能测试让人满意,感谢原作者分享。