`

专访 Amoeba 项目开发者陈思儒

阅读更多

原文 http://www.dbanotes.net/arch/amoeba_interview.html

 

可能 MySQL Proxy 很多数据库技术人员都比较熟悉了,在前不久,国内也有开发者发布了一个Amoeba(变形虫)项目 (http://sourceforge.net/projects/amoeba),这个项目专注分布式数据库 Proxy 开发,引起了广泛的关注。 DBA notes ( http://www.dbanotes.net ) 站长Fenng 有幸采访了阿米巴项目的开发者陈思儒,以下是采访全文。

Fenng :你好,思儒,很高兴能接受采访,简要介绍一下自己吧?
陈思儒 : 我目前是盛大计算机(上海)有限公司的一位高级研究员。 在就业生涯中从事分布式消息系统、分布式应用、多层框架设计、规则引擎开发框架研究,以及 Java 2D MMORPG框架研究。

Fenng : 说一下当初开发 Amoeba 项目的缘由如何,估计其中也会有不少小故事吧? 我可是非常好奇。
陈思儒 : 其实 Amoeba 的前身是网络数据包分析代理,之所以 Amoeba 能够快速稳定发展也是因为个人在前期使用这些技术分析过一些游戏的数据包(这儿不方便透露一些细节,这些都只是个人爱好而已,并没有破坏那些被我研究过的游戏 :D )。

为什么会有 Amoeba 这个产品,这个话题的确非常有意思,我关注 MySQL Proxy 也有一段时间了。MySQL Proxy 的这种想法做的非常棒,它能够根据自己的想法去构造目标的 MySQL Proxy 应用,比如监控 SQL 执行、数据流量、读写分离。但由于我们使用 MySQL Proxy 并不能非常轻易的解决一些问题(读写分离、数据切分、水平切分、负载均衡),而是需要写大量的Lua Script,这些 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 driver的所有数据库,这些数据库可以同时并存于Amoeba for Aladdin后端。

其实在我上一家公司的时候也正在研发 Amoeba for Oracle,这个产品目前还正在研发状态。这个产品性能也跟 Amoeba for MySQL 一样出色。

就 Amoeba for Aladdin 产品来说,后端的任何数据与 Aladdin 交互采用 JDBC Driver. 对于 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 开发者博客 "上更新,欢迎订阅。

分享到:
评论

相关推荐

    amoeba-mysql-binary

    "amoeba-mysql-binary" 是一个与MySQL数据库相关的开源项目,其主要功能是提供一种分布式解决方案,用于扩展MySQL服务器的能力,提升数据库的可扩展性和可用性。Amoeba这个名字来源于生物学中的变形虫,寓意该系统...

    amoeba-aladdin-binary

    标签“amoeba”表明这与Amoeba项目有关,Amoeba通常是一个分布式数据库管理系统,它将单个数据库透明地分割成多个部分,分布在网络的不同节点上,以实现水平扩展。Amoeba Aladdin可能是Amoeba系统的一个组件,专注...

    amoeba.pdf

    此外,Amoeba还支持对已有实例进行性能调优,并提供了API和开发指南,以便开发者可以基于Amoeba为其他数据库开发新的实例或进行数据库相关的函数开发。 Amoeba项目的目标是简化客户端操作分布式数据的复杂性,通过...

    Amoeba搞定mysql主从读写分离

    在Java项目中,需要下载Amoeba的JAR包并将其添加到项目的类路径中。配置文件通常包含主库和从库的信息,如IP地址、端口、用户名和密码等。此外,还需要设置Amoeba服务器的启动参数,如监听端口、日志级别等。 在...

    amoeba 详细配置文档

    Amoeba是一款分布式数据库代理,主要用于实现数据的分片和读写分离,尤其适用于需要处理大规模数据的场景。本文档详细介绍了Amoeba的配置、安装、使用和优化,适用于那些希望利用Amoeba提升数据库性能和服务扩展性的...

    amoeba-mysql-binary-2.2.0.tar.gz

    amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gzamoeba-mysql-binary-2.2.0.tar.gz amoeba-mysql-binary-2.2.0.tar.gz ...

    amoeba-mysql-binary-2.2.0.tar

    标题中的"amoeba-mysql-binary-2.2.0.tar" 指的是一种名为Amoeba MySQL二进制分发版的软件包,版本号为2.2.0,其存储格式为tar档案。Amoeba是一个分布式数据库中间件,它能够将一个MySQL实例透明地扩展到多个节点,...

    amoeba集群文档+Amoeba使用指南pdf+mysql主从同步

    标题中的“amoeba集群文档+Amoeba使用指南pdf+mysql主从同步”是指一系列关于Amoeba中间件和MySQL数据库集群的知识资源,包括Amoeba的集群部署、使用方法以及MySQL的主从同步策略。这些文档将帮助读者理解如何构建高...

    amoeba-mysql-1.2.0-RC3.zip

    7. src:源代码目录,包含了Amoeba的源代码,对于开发者来说,可以查看和修改源码。 8. doc:文档目录,可能包含用户手册、API参考等资料。 9. lib:库文件目录,存放Amoeba运行时所需的依赖库。 10. logs:日志文件...

    Amoeba使用指南 20110928 pdf

    ### Amoeba 使用指南知识点概览 #### 一、Amoeba简介 - **Amoeba** 是一种用于实现数据库代理服务的软件解决方案,旨在帮助用户处理大规模数据存储时遇到的分布式问题。它通过提供一系列的功能和服务,如数据分片、...

    amoeba-mysql

    Amoeba项目致力于解决这个问题,它提供了一种透明的数据分片策略,使得数据库能够被分割成多个小的部分,分布在网络中的不同节点上。这样不仅可以提高数据处理的效率,还能实现数据的水平扩展,以适应业务的快速增长...

    amoeba[1]分布式数据库解决方案.pdf

    5. **AmoebaForMysql子项目**:AmoebaForMysql是基于Amoeba框架的MySQL专用代理,它继承了Amoeba的所有优点,并针对MySQL进行了优化。使用前需确保满足Java环境等先决条件。 #### 结论 综上所述,Amoeba作为一款...

    amoeba_mysql读写分离部署说明.docx

    Amoeba MySQL 读写分离部署说明 Amoeba 是一款专为 MySQL 设计的中间件,用于实现数据库的读写分离和负载均衡。它的主要功能是接收应用程序的 SQL 请求,根据预设规则将这些请求转发到合适的 MySQL 实例上执行,...

    MySQL搭建Amoeba_读写分离.docx

    MySQL 搭建 Amoeba 读写分离 在本文中,我们将详细介绍如何使用 Amoeba 实现 MySQL 读写分离的配置过程。Amoeba 是一个基于 MySQL 的 proxy,能够集中地响应应用的请求,并根据用户事先设置的规则,将 SQL 请求发送...

    amoeba配置详解

    Amoeba提供了一个框架,支持开发者为不同类型的数据库开发Amoeba实例,包括为数据库相关功能进行开发。Amoeba的目标是减少客户端直接与多个数据库服务器交互的复杂度,通过代理层来简化客户端操作。 Amoeba适用于...

    Amoeba-art.pdf

    AMOEBA项目源自于对于高性能、高可用分布式系统的需求。随着互联网业务规模的不断扩大,单一数据库系统难以应对海量数据的存储和处理需求,因此需要一种能够有效管理多个数据库实例,并能在它们之间进行智能路由的...

    Amoeba:分布式数据库Proxy解决方案

    Amoeba作为一个专注于分布式数据库代理开发的项目,旨在解决数据切分、读写分离等问题,为用户提供高性能、高可用性的解决方案。 #### 二、分布式数据库系统的优势 分布式数据库系统相比于传统的集中式数据库系统...

    amoeba-n.zip

    在这个场景中,amoeba-n.zip 文件包含的是Amoeba中间件和Java Development Kit (JDK)的安装包,它们是实现MySQL集群读写分离的关键组件。 **Amoeba中间件:** Amoeba 是一个开源的MySQL分片系统,它允许数据库水平...

    用amoeba配置mysql代理.pdf

    【标题】: 使用Amoeba配置MySQL代理 【描述】: 安装并配置Amoeba作为MySQL代理,实现数据库的高可用性和负载均衡。 【标签】: 教育 【正文】: Amoeba是一种分布式数据库中间件,用于MySQL数据库的高可用性和负载...

    Amoeba mysq代理

    Amoeba MySQL 代理是一种高性能、轻量级的MySQL中间件,主要设计用于实现数据库的读写分离,提高系统的可扩展性和并发处理能力。在分布式系统中,读写分离是常见的优化策略,它能有效减轻主数据库的压力,提高读取...

Global site tag (gtag.js) - Google Analytics