关于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 Aladdin (数据库整合、分布式、负载均衡)0.1 发布

Aladdin项目是针对企业数据库整合而产生的另外一种数据库切分、读写分离、负载均衡的中间件产品,是amoeba的子产品。沿袭了amoeba其他产品的特性(amoeba for mysql)。

Aladdin产品简介:

      与Amoeba for mysql 类似,客户端连接aladdin必须用mysql 协议,之所以用mysql协议,主要是想借助mysql使用的广泛程度以及对各种开发语言的支持,因此aladdin对客户端采取了mysql协议以方便适应广泛的使用者。aladdin后端可以同时连接各种数据库。只要这些数据库提供jdbc驱动。aladdin的出现可以解决企业在数据库整合上面提供积极的帮助。使用者不需要知道后端到底使用了什么类型的数据库、数据库的物理地址什么,这些由aladdin来分析sql语句,并且获得相应的要查询的表跟条件,然后由这些规则结合这些条件进行路由到相关的物理数据库。

amoeba for mysql 0.29发布 --解决连接mysql server出现timeout问题

主要解决困扰几个月的timeout问题。

主要是mysql server 要求客户端在认证身份的时候采用老的加密方式,而这个问题恰恰是我没考虑到的,因此导致amoeba 没有收到mysql server返回的ok数据包,直到认证超时。今天总算将这个bug处理了!

在此非常感谢网友刘雅猛的辛苦测试,多次抽出宝贵的时间为amoeba进行测试跟反馈。

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。

Amoeba 0.25发布,附带源代码

前一段时间由于sourceforge 访问很慢,我在开发amoeba的时候经常需要切换svn分支,由于网络影响切换分支的时候导致只切换了一半就失败了,这样就造成我的代码的更新是在2个分支下面。当时没注意到后来一直在这种情形下面开发了将近2个星期。后来发布的时候有用户告诉我,你以前修正过的bug现在在新版本上面又出现了…

现在都有点不敢用sourceforge 的svn来管理源代码了。

0.25版本主要是在重构amoeba代码以更好的支持后面的一个项目:Amoeba for Oracle

目前0.25以及后期版本将都会包含源代码。抱歉前段时间没有附带源代码给研究amoeba的开发者带来不便。

0.25下载: http://www.sourceforge.net/projects/amoeba

Amoeba 开发者博客正式启动

很长一段时间都在寄居在其他网站描述着amoeba的开发进度以及bug修复情况,给一些使用者带来很大的麻烦,很难找到一个关于amoeba升级相关的确切地址。使用其他网站写bugfix以及升级情况的确是一个非常不方便的事情。

今天终于下载了一个WordPress,并且安装了起来。

非常感谢WordPress的开发者 Ryan Boren 和 Matthew Mullenweg 提供了这么好的blog软件。

« Previous Page