日期:2014-05-16 浏览次数:20502 次
???? Amoeba 作为DataBase Proxy的开发框架。致力于解决数据切分、读写分离。以下将为您介绍
一、Amoeba 框架简介
? Built on Java NIO
????? 1. 采用java NIO 框架无阻塞模式,不像传统的Socket编程在大量并发的情况非常浪费系统资源、
而且可扩展性也较差
? Reusable Server Connection
?????? Amoeba 提供与数据库连接的可重用度非常高,在Amoeba系统内所Database Connection同时共享
给所有连接到Amoeba的客户端
? 提供读写分离、数据切分
????? 1. 传统的读写分离技术需要通过客户端或者相关的Database Driver技术才能解决,而且客户端的
配置也比较复杂
??????2. 单台Database 性能总是有限制的,基于Amoeba上面可以寻找一种可线性扩展的多数据库支持。
Amoeba为DBA提供一种非常友好的类似SQL语法的数据切分规则同时客户端不用担心过多的
DataBase Server会给应用带来更多的配置。
? 支持高可用性、负责均衡
????? 1. Amoeba 提供Database 连接的异常检测与连接恢复功能。
????? 2. 用户可节省使用其他昂贵的负载均衡的硬件设备,Amoeba提供多台Database Server负载均衡策略
(轮询、当前活动连接数量)
?
二、amoeab 序列图
?
?
三、启动过程解析
?
?
1.?加载Log4j配置文件,配置日志信息
2.?初始化ProxyRuntimeContext? ,比如加载配置文件,做一些初始化操作,设置一些上下文信息
3.?注册Reporter 功能
4.?创建Mysql客户端代理的连接管理器(该管理器管理客户端到代理服务器和代理服务器到服务端的连接,并调度分配连接)。
5.?读取IP权限表,并注册到Mysql连接管理器中
6.?最后启动服务。启动服务以后,Mysql 连接管理将监听指定的端口,开始提供服务。
?
?
?四、MysqlClientConnectionManager机制
?
???????MysqlClientConnectionManager 的类的继承关系如下:
?
???????
????? 其中Looping在run方法中做两件事情:
????? MysqlClientConnectionManager 在收到网络事件以后,调用 MySqlCommandDispatcher 对网络事件进行分发处理(详细的分发方法后续详细分析)。
?
?
?
?
?