日期:2014-05-16  浏览次数:20502 次

基于amoeba的mysql分布式数据库学习(二)

???? 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 序列图

amoeba 序列图

?

?

三、启动过程解析

?

?

1.?加载Log4j配置文件,配置日志信息
2.?初始化ProxyRuntimeContext? ,比如加载配置文件,做一些初始化操作,设置一些上下文信息
3.?注册Reporter 功能
4.?创建Mysql客户端代理的连接管理器(该管理器管理客户端到代理服务器和代理服务器到服务端的连接,并调度分配连接)。
5.?读取IP权限表,并注册到Mysql连接管理器中
6.?最后启动服务。启动服务以后,Mysql 连接管理将监听指定的端口,开始提供服务。

?

?

?四、MysqlClientConnectionManager机制

?

???????MysqlClientConnectionManager 的类的继承关系如下:

?

???????

????? 其中Looping在run方法中做两件事情:

  • 执行方法 willStart(),做端口监听的相关信息初始化操作,详细可见: ServerableConnectionManager.willStart() 方法
  • iterate() :  轮询监听端口,以处理响应的网络事件(包括从客户端<--->Mysql代理服务器 和 Mysql代理服务器<-->mysql目标服务器之间的交互事件)

????? MysqlClientConnectionManager 在收到网络事件以后,调用 MySqlCommandDispatcher 对网络事件进行分发处理(详细的分发方法后续详细分析)。

?

?

?

?

?

分享到:? ?
基于NIO实现非阻塞Socket编程(一) ? |? DTO等定义