【Mysql数据库之Amoeba介绍】

一、Amoeba介绍

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。

Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS原则的思想。

 

 

估计使用MySQL Proxy的很多数据库技术人员都已经熟悉了,前不久国内也有开发者发布了一个Amoeba(变形虫)项目,这个项目专注分布式数据库Proxy开发,引起了数据库社区广泛的关注

为什么叫Amoeba呢?其实这个想法我是突然想到的,Amoeba的中文意思是“变形虫”,Amoeba被设想为数据库代理的开发框架,它可以为符合Amoeba框架的任何数据库开发代理层。因此也比较象“变形虫”一样能够变成目标数据库的代理层软件。

二、Amoeba优势

Amoeba主要解决以下问题:

a). 数据切分后复杂数据源整合

b). 提供数据切分规则并降低数据切分规则给数据库带来的影响

c). 降低数据库与客户端连接

d). 读写分离路由

三、Amoeba不足

a)、目前还不支持事务

b)、暂时不支持存储过程(近期会支持)

c)、不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)

d)、暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致:

 

 

Amoeba for MySQL:被代理的只有MySQL数据库,需要分析MySQL网络协议,它的代价比Aladdin会小很多,而且性能也较高;

Amoeba for Aladdin:被代理的可以是目前提供JDBC驱动的所有数据库,这些数据库可以同时并存于Amoeba for Aladdin后端。

四、如何实现mysql读写分离                                                                     

通常来说有两种方式:    

1,应用程序层实现                                                                                                            

2,中间件层实现  

应用层实现

应用层实现是指在应用程序内部及连接器中实现读写分离。

例如:

com.mysql.jdbc.replicationdriver

mysqlnd_ms

优点:

程序内部实现读写分离,安装即可使用

减少部署难度。

访问压力在一定级别以下,性能很好。

缺点:

架构一旦调整,代码要更这变, 不够灵活。

难以实现高级应用,如自动分库,分表

无法适用于更大型的应用场景。

目前还不支持事务

中间件层实现:

中间件层实现是指外部中间件程序实现读写分离

mysql-proxy

amoeba

TDDL(TAObao)

CObar(alibaba)

Atlas(qihoo360)

优点:

架构设计上更加灵活、

读库的负载均衡

可在程序上实现一些高级控制,failover,流量控制

依靠一些技术可以实现mysql性能提升,如连接池

对业务代码侵入性少

缺点:

需要有一定的开发实力和运维团队的支持

猜你喜欢

转载自gaojingsong.iteye.com/blog/2358122