最近因为一个大作业,我需要建立一个分布式数据库系统。Oracle和DB2固然强大,但巨大的资源占用以及软件授权的限制让我放弃选择它们。我的目标是寻找轻量级的、免费(最好是开源)的解决方案,最终目标锁定在国产的amoeba上。
amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。有关amoeba的更多信息可以参考其文档或作者blog。google出来的相关信息并不多,不过作者的这个帖子(含回复)倒是值得一看。
下面说说我的理解:
1、amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。
2、由上一条,建议使用MySQL的Replication机制建立Master-Slave来做副本。我一开始理解有误,使用了amoeba的virtual DB(负载均衡pool)做writePool,结果使得本应插入同一个表中的数据被拆分地写入了不同的物理数据库中。这样自然与副本的语义不符了。
3、amoeba已经实现了数据的垂直切分与水平切分。水平切分方面,粒度是行。使用SQLJEP语句可以设计出复杂的切分规则,个人认为是比较强大的。垂直切分的粒度是表,可以把针对不同表的请求发送到不同的节点上执行,但不能以列作为分片粒度。从作者的说法看,amoeba不做SQL解析和重写。在目前的机制下似乎是难以实现同一个表不同的列在不同节点上的分布。不过对开发人员来说,设计良好的表结构应该可以实现简单的基于关系属性的负载均衡的。
要说这个项目最大的不足,我想可能是文档方面的:
1、软件的文档(0.31版)主要在讲解配置文件怎么修改,却没有说怎么运行amoeba。我以前没有MySQL Proxy以及Java工程方面的经验,下载解压amoeba之后,第一感觉这是一个数据库中间件,要通过Java API编程使用,所以我还纳闷文档中为什么没有API的说明。仔细一看才发现bin目录下有启动脚本。回到文档,发现只在最后的“amoeba性能调优”一节才提到了“amoeba启动脚本”。希望作者改进下一版的文档,让新手不要再疑惑。
2、文档的“amoeba for aladdin”一节说“(amoeba for aladdin)其性能比MySQL Proxy也好,但比amoeba for mysql微微差了点”,看起来性能优劣是“amoeba for mysql>amoeba for aladdin>MySQL Proxy”;但在这个帖子的回复中,作者又说“(amoeba for mysql)比官方的MySQL Proxy性能大致低10%~20%左右”,两处似乎有矛盾。继续翻这个帖子,才发现原来在0.27版本以后,amoeba的性能逐渐超过了MySQL Proxy。所以,希望作者可以完善一下文档,并在官方网站或blog的显著位置说明最新版本的特性,以免引起误会。
3、amoeba是一项优秀的工作,有必要提供完整的英文文档,以便国际推广。
分享到:
相关推荐
amoeba[1]分布式数据库解决方案.pdfamoeba[1]分布式数据库解决方案.pdf
Mysql+drbd+heartbeat+amoeba集群配置详解
第三十九章:DRBD+Keepalived+Mysql+Amoeba双主双从高可用集群1
Amoeba在分布式数据库领域将致力解决数据切分,应付客户端“集中式”处理分布式数据。这 儿集中式是一个相对概念,客户端不需要知道某种数据的物理存储地。避免这种逻辑出现在业务端, 大大简化了客户端操作分布式...
提供mysql数据库读写分离的最佳方案 减轻mysql数据库压力,使用分布式数据库。为企业提供最佳解决方案。
互联网的蓬勃发展,业务驱动技术不断升级,在系统越来越庞大,技术越来越复杂,应用部署集群化,所有压力全部指向数据库,数据量巨大,数据库优化也到极限了,数据库的运维难以为继,在这种情况下,分布式数据库似乎...
amoeba集群文档+Amoeba使用指南pdf+mysql主从同步,看了包会,不会联系我,在线给你支持
Amoeba+mysql 读写分离 Keepalived+mysql 配置 无软件包
#资源达人分享计划#
Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性...
Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性...
MySQL搭建Amoeba_读写分离.docx
这个软件基于Java致力于MySQL的分布式数据库前端代理层,处于在应用和数据库之间,对客户端透明,它主要在应用层访问MySQL的时候充当SQL路由功能,解析应用传递过来的SQL语句,专注于分布式数据库代理层(Database ...
Amoeba属于分布式数据库代理开发框架,专注于分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户 端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请 求...
Amoeba搞定mysql主从读写分离
windows平台用amoeba+mysql-5.7.17.msi实现读写分离。
Amoeba:分布式数据库Proxy解决方案 随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用 已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:集中式处理,势必...
amoeba+mysql-mmm+mysql 高可用,读写分离,双主多活
Amoeba在分布式数据库领域将致力解决数据切分,应付客户端“集中式”处理分布式数据
介绍Amoeba Amoeba在分布式数据库领域将致力解决数据切分,应付客户端“集中式”处理分布式数据