估计使用MySQL Proxy的很多数据库技术人员都已经熟悉了,前不久国内也有开发者发布了一个Amoeba(变形虫)项目,这个项目专注分布式数据库Proxy开发,引起了数据库社区广泛的关注。DBA notes网站站长冯大辉(Fenng)有幸代表InfoQ中文站采访了该项目的架构师和主要开发者陈思儒。
Fenng:思儒你好,很高兴能接受我代表InfoQ中文站对你采访,简要介绍一下自己吧。
陈思儒:我目前是盛大计算机(上海)有限公司的一位高级研究员。在职业生涯中从事过分布式消息系统、分布式应用、多层框架设计、规则引擎开发框架研究,以及Java 2D MMORPG框架研究。
Fenng:说一下当初开发Amoeba项目的缘由,估计其中也会有不少小故事吧?我可是非常好奇。
陈思儒:其实Amoeba的前身是网络数据包分析代理。Amoeba之所以能够快速稳定发展,也是因为我个人在前期使用这些技术分析过一些游戏的数据包(这儿不方便透露一些细节,都只是个人爱好而已,并没有破坏那些被我研究过的游戏^_^)。
为什么会有Amoeba这个产品,这个话题的确非常有意思,我关注MySQL Proxy也有一段时间了。MySQL Proxy的这种想法做的非常棒,它能够根据自己的想法去构造目标的MySQL Proxy应用,比如监控SQL执行、数据流量、读写分离等。但由于有时我们使用MySQL Proxy并不能非常轻易地解决一些问题(如读写分离、数据切分、水平切分、负载均衡等),而是需要写大量的Lua脚本,这些Lua并不是现成的,而是需要自己去写。这个工作对于并不熟悉MySQL Proxy内置变量和MySQL Protocol的人来说是非常困难的。
因此,带着这个想法我就设想做一个非常容易使用、可移植性非常强的软件。Amoeba就因此诞生了。为什么叫Amoeba呢?其实这个想法我是突然想到的,Amoeba的中文意思是“变形虫”,Amoeba被设想为数据库代理的开发框架,它可以为符合Amoeba框架的任何数据库开发代理层。因此也比较象“变形虫”一样能够变成目标数据库的代理层软件。
Fenng:我观察到Amoeba与Oracle交互的时候似乎还是模拟MySQL的驱动器,实际情况是否如此?
陈思儒:目前Amoeba有2个产品:Amoeba for MySQL和Amoeba for Aladdin。这2个产品有不同的适用范围:
其实我在上一家公司工作的时候也正在研发Amoeba for Oracle,这个产品目前还处于研发状态。其产品性能也跟Amoeba for MySQL一样出色。
就Amoeba for Aladdin产品来说,后端的任何数据与Aladdin交互采用JDBC驱动。对于Aladdin说,数据库的协议是透明的,而应用跟Aladdin的交互则采用MySQL协议,这个做法很多人有不明白,其实做这个决定主要是想借助MySQL被使用的广泛程度以及对各种开发语言的支持。因此对前端的应用来说,Aladdin其实就是一个虚拟的MySQL数据库。你这个问题应该是问在使用Aladdin的时候。
Fenng:是的,这是我在看了你的Aladdin架构图后所产生的疑惑。你比我严谨多了(^_^)。能否冒昧问一下Amoeba项目当前的局限?
陈思儒:虽然Amoeba能够很好地解决水平切分、垂直切分等,但还是会存在一些局限性,产生这些局限性的原因是,我们在设计目标数据库架构的时候就必须考虑到未来数据库的框架(可以线性扩容的数据库架构)。因此它将不支持有些查询,比如跨数据库服务器进行Join,我们要尽量避免类似的业务出现,这类问题可以通过多次查询来解决。
Fenng:你在前面也说到了MySQL Proxy,能否简单地说说Amoeba与MySQL Proxy的区别?
陈思儒:其实说与MySQL Proxy的区别应该是Amoeba for MySQL与MySQL Proxy的区别,在上面表述的第二点应该都涉及到了。Amoeba只是目标数据库代理的开发框架,Amoeba for Aladdin是另外一个类似Amoeba for MySQL的产品。他们的共同点是都可以做负载均衡(HA、ROUNDROBIN,WEIGHTBASED)、读写分离、数据切分(垂直、水平)和failOver等。
Fenng:据说你也分析过Oracle的TNS协议,你认为可靠性如何?
陈思儒:的确,我在上一家公司为做Amoeba for Oracle分析过TNS协议,它的可靠性以及安全方面都没什么问题,Oracle还提供了一些网络层的性能参数,用来改变Oracle的网络吞吐量。但是Oracle的数据部封包做法让我和老同事在分析Oracle数据包的时候伤透脑筋, 我觉得Oracle如果想在协议上面升级版本将不是一件容易的事情。而MySQL的协议封包的做法我比较赞同。
Fenng:对于分析TNS的可行性,我的看法倒是和你类似。顺便问一下,现在Amoeba是否已经有了成功案例, 方便的话能否举几个?
陈思儒:Amoeba for MySQL成功案例,目前就网友直接跟我说的有几个,但我还没具体了解他们公司的具体名称,以后知道了我再透露。
Fenng:到时候千万要通知我一下。对了,能否说一下Amoeba 项目的愿景以及下一步的目标?
陈思儒:目前距离Amoeba的发展目标还有一点距离,Amoeba未来将会更加容易使用、可管理、可动态装载配置、Amoeba集群等。
如果可行的话,未来我将补充MySQL协议,做一个用于负载均衡的“重定向路由器”(类似F5功能,但它只是做连接跳转)。
Fenng:在开发者主要是你一个人? 是否还有其他维护者 ?
陈思儒:Amoeba 框架、Amoeba for MySQL、Amoeba for Aladdin等产品目前的开发就我一个人。
Fenng:很高兴你接受我的采访。期待Amoeba项目取得更大的成就,也祝你工作愉快!
陈思儒:客气!也希望有更多的开源爱好者或是数据库技术爱好者加入到这个项目的开发中来。关于Amoeba项目的进展我会在“Amoeba 开发者博客”上更新: http://amoeba.meidusa.com,欢迎订阅。
作者简介:冯大辉,就职于阿里巴巴集团旗下支付宝(中国)网络科技有限公司(Alipay.com),担任数据库架构师,负责支付宝数据库架构规划、解决方案等相关工作。2007年国内首批Oracle ACE,网上 ID 为“Fenng”,业余时间关注Web 2.0网站架构技术。个人Blog:http://www.dbanotes.net。
志愿参与InfoQ中文站内容建设,请邮件至[email protected]。也欢迎大家到InfoQ中文站用户讨论组参与我们的线上讨论。