Archive for the 'Amoeba' Category

Amoeba for mysql 1.1.0-BETA发布

Amoeba for mysql 1.1.0-BETA发布

主要解决以下问题:

1、解决amoeba运行一段时间以后可能出现阻塞

2、修复个别sql解析问题

3、重构了ConnectionManager,去除之前读取数据包采用线池的方式,改成目前采用MultiConnectionManagerWrapper,采用多个(具体多少默认由可用的cpu 核数量决定)ConnectionManager进行负责网络IO, 而每个ConnectionManager都是一个单线程

注意:与之前的amoeba.xml在配置上有点出入(defaultManager 的配置与之前不一样了)

sf 主页下载: http://sourceforge.net/projects/amoeba/

Amoeba for mysql 1.0.2 beta版本发布

修复bug列表:

1、修复无法解析抛出unknown statement(1.0.0新bug)。将无法解析得sql默认在defaultPool中执行

2、修复union关键字无法解析问题

3、修复函数前面! 无法解析问题

4、修复order by 、group by 后面带表达式得sql

下载地址: http://downloads.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/amoeba-mysql-1.0.2-BETA.zip

最近sourceforge页面调整,导致有些下载链接无法显示

amoeba for mysql 1.0.0-beta版本下载地址 : http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/1.0.0-BETA/amoeba-mysql-1.0.0-BETA.zip/download

 amoeba for aladdin 0.7.0-beata 版本下载地址:http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20Aladdin/0.7.0-BETA/amoeba-aladdin-0.7.0-BETA.zip/download

关于使用mysql ODBC驱动

很多人使用mysql odbc驱动来连接amoeba。在其中出现各种问题

amoeba目前只解析mysql 协议10 以上版本,或者是mysql 4.1以上版本。

mysql ODBC 3.51 (ODBCAD32.exe)测试通过

mysql ODBC 5.1  (ODBCAD32.exe)测试通过(建议使用)

请大家别用其他连接参数,比如压缩流(个别版本会引起工作不正常)

Amoeba xml配置文件格式改动

即将发布的amoeba for mysql 0.32 / amoeba for aladdin 0.4 在配置文件上面做了升级,目前只有function.dtd做了不兼容的改动

修改的项目:

1、connectionManager、factoryConfig、poolConfig、queryRouter 增加classs属性,即将去除 className

<connectionManager name=”defaultManager” class=”com.meidusa.amoeba.net.AuthingableConnectionManager”>

<className>com.meidusa.amoeba.net.AuthingableConnectionManager</className>

 </connectionManager >

2、property元素增加bean element,如下格式。这种设置除server中的property。
    <property name=”runnerParameters”>
         <bean class=”java.util.Properties”>
              <property name=”xmlTable”>${amoeba.home}/conf/table.xml</property>
       </bean>

   </property>

3、rule.xml dtd格式改动,parameters增加 excludes属性,如下
  <rule name=”rule1″>
   <parameters excludes=”NAME”>ID,AGE</parameters>
   <expression><![CDATA[ ID <= 1000000 and age > 12]]></expression>
   <defaultPools>server1</defaultPools>
   <readPools>server1</readPools>
   <writePools>server1</writePools>
  </rule>

   该设置主要是当sql条件中包含了name=’abc’ ,而name又可以作为另外一个规则的时候,这个时候这条规则将被忽略

关于amoeba 性能测试注意的几点

首先感谢很多amoeba for mysql的使用者对amoeba投入了生产环境的使用,也有些正在做一些性能上面的测试,这儿我建议能够提升amoeba性能的几点:

1、在可用性测试已经完成的情况下,建议将log4j.xml 中关于日志输出level为debug的全部设置成warn或者error 级别。

 日志是非常消耗系统性能的,在没有必要的情况下可以不使用debug。

2、性能测试环境: amoeba 对 cpu的要求比较高,建议将amoeba配置在多核/多cpu的机器上面。

3、amoeba多线程配置,默认只有20~30个线程,在多核/多cpu 的情况下建议开大。

4、amoeba与数据库连接数配置:在性能测试并且客户端并发量不大的情况下,建议将amoeba与数据库的连接数跟客户端与mysql的并发连接数尽量相等,这样保证一个客户端连接可以获得一个数据库连接。

Amoeba for Mysql 0.27 released

Amoeba for  Mysql 0.27 已经发布.

主要在性能上面提升了将近20%

目前在多核/多cpu上面进行测试,性能比以前的版本均有很大的提升.

与mysql-proxy性能相比,我目前不好作出评价. 目前整体性能比较不错.

另外0.27修复了一个小bug在第一次访问amoeba的时候返回的错误字符集编码,第二次访问就正确了,目前此bug已经修复.

amoeba 目前进展方面:

amoeba for oracle 在与oracle认证这块协议已经分析完毕.

Oracle协议分析难度相当的大,在没有源代码跟相关的协议文档情况下, 目前Amoeba for Oracle 对于OCI驱动协议包还不完善,无法兼容OCI驱动.

希望以后能够得到Oracle支持,将协议的分析完善.

下一阶段将设计Amoeba Manager.

Amoeba for Mysql 0.26 发布

0.26主要修正bug:

* 修复当sql语句采用preparedstatment 并且参数超过8个的时候出现初始化ExecutePacket 异常.

非常感谢kdfly 提供的bug信息.

希望大家支持Amoeba 发展

Amoeba 发布已经有一段时间了,多少收到amoeba使用的反馈,但反馈还是比较少。如果说bug不多那我很庆幸,还是希望大家遇到bug能够及时跟我联系并且能够反馈自己遇到的问题包括:

Amoeba版本、mysql Server版本、客户端使用的Mysql Driver 跟版本、操作系统、以及当时出现问题的logs文件夹

这样我会在第一时间处理这些bug,更期待代码捐献的人。

 我的email : amoeba.meidusa at gmail.com 或者 piratebase at sina.com

 感谢支持Amoeba发展.

Mysql 在线 DDL操作引起锁表问题

在MySQL 中在线对表对象做 DDL 操作是要锁表的,对可用性要求比较高而且应用变化又比较频繁的环境,这是个非常很糟糕的。

有同事在讨论Amoeba的时候提起了这个事情,并且给了一个很好的建议。

客户端与Amoeba的Connection (这儿称为ClientConnection) 跟Amoeba与mysql的Connection (这儿称为ServerConnection)是完全不同的Connection,他们之间并没有存在关系,只有在确定一条sql 路由到具体的mysql Server的时候。那么ClientConnection 才与ServerConnection建立一种Session。他们所有数据交互都通过这个Session进行数据包转发,这种query语句结束以后,他们之间的关系也将断开,ServerConnection也就回到了ConnectionPool等待下一次任务。

在Amoeba内部有一个虚拟的ConnectionPool,这个虚拟Pool负责多个ConnectionPool的负载均衡、failOver。 

 那么利用这个优点,Amoeba 虚拟Pool可以将即将做DDL 操作的 mysql从这个虚拟Pool中disable掉。所有的query将转发至虚拟Pool中的其他Pool。DDL完毕以后,将其Enable回来。

传统的F5设备为什么无法做到这种方式呢?

对于客户端采用连接池直接连接mysqlServer的客户端来说,即使F5 Disable即将Online DDL操作的mysqlServer。也无法将存在的连接断开。除非强制性断开或者等待Pool的收缩(时间可能会相当长,时间不可控制)

对非采用保持连接的方式倒是可以采用F5设备来控制,当不采用保持连接在应用性能上面将非常低下。创建连接的时间往往比一次普通的query时间要多上好几倍甚至10多倍。

 Amoeba 要如何解决这个问题?

目前有一个想法,由Amoeba Manager来统一管理一组配置相同的Amoeba。

Amoeba 启动的时候将从Amoeba Manager读取配置。并且能够在Amoeba Manager上面进行实时对多台Amoeba进行管理(动态添加dbServer、disable/enable 虚拟Pool中的DBPool,动态修改QeuryRouter规则)。

那么在Online DDL的时候首先将其从虚拟Pool中disable掉,DDL操作完毕以后将其Enable。

Next Page »