估计使用 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 MySQL:被代理的只有 MySQL 数据库,需要分析 MySQL 网络协议,它的代价比 Aladdin 会小很多,而且性能也较高;
- Amoeba for Aladdin:被代理的可以是目前提供 JDBC 驱动的所有数据库,这些数据库可以同时并存于 Amoeba for Aladdin 后端。
其实我在上一家公司工作的时候也正在研发 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 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。
评论