zoukankan      html  css  js  c++  java
  • 远哥Amoeba源码分析之:核心类说明

    同事喜欢叫我远哥,所以我把这个笔记称为远哥系列,今天有兴趣分析一下Amoeba的源码,并且在此记录一下,并且随时更新。

     

    Amoeba目前一共有三个项目产品,分别是:

     

    Amoeba for MySQL

    为MySQL提供了一种数据库代理的解决方案,可以实现多台MySQL之间的读写分离,具有负载均衡、高可用性、Query过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 在Amoeba上面你能够完成多数据源的高可用、负载均衡、数据切片的功能。

     

    Amoeba for Aladdin

    类似“Amoeba for MySQL”,不同的是“Amoeba for MySQL”只支持MySQL数据库,“Amoeba for Aladdin”支持多种数据库,同时还可以在后台使用多种混合数据库。

     

    Amoeba for MongoDB

    实现对NoSQL数据库MongoDB的代理功能,具备心跳检测、负载均衡、故障转移、查询聚合等功能。

     

    从目前Amoeba的系列产品来看,都是针对数据库存储应用在分布式群集负载场景下的解决方案,覆盖了常用的数据库种类。

     

    本系列源码分析都是真对Amoeba for MySQL的,其它两个项目其实都是基于Amoeba for MySQL之后,改变而来的,所以,读懂了Amoeba for MySQL,也就读懂了其他两个项目。

     

    如何获得源码:

    Amoeba的源码目前放在Google上,可以使用SVN拉下来,地址为:http://amoeba.googlecode.com/svn/trunk

     

    首先看一下源码的项目列表:

    注意:自己建立Maven项目,然后把项目代码用Maven关联起来,上图是我自己加好之后的,如果需要,我可以将我加好的Maven项目提供下载,你只要导入就可以了。

     

    主要的几个类:

     

    包名:com.meidusa.amoeba.server

    类名:AmoebaProxyServer

    职责:Amoeba启动主入口,注意,为了很好的扩展性,这个类在Amoeba核心项目中,而不是在amoeba-mysql项目中(不管是Amoeba for MySQL还是Amoeba for Aladdin,主入口都是这个类)

      

    包名:com.meidusa.amoeba.mysql.handler

    类名:QueryCommandMessageHandler (继承 com.meidusa.amoeba.mysql.handler.CommandMessageHandler)

    职责:SQL的查询命令处理者,对于分库分表查询结果的合并逻辑,在其父类 CommandMessageHandler.mergeMessages 方法中

     

    包名:com.meidusa.amoeba.mysql.parser

    类名:MysqlQueryRouter

    职责:MySQL的路由解析器,根据SQL语句来获得符合路由规则中的线程池对象

     

    包名:com.meidusa.amoeba.mysql.handler

    类名:MySqlCommandDispatcher (实现接口 com.meidusa.amoeba.net.MessageHandler)

    职责:SQL命令分发者,将客户端请求的SQL指令根据Amoeba路由配置规则分发到对应的连接池中

     

    包名:com.meidusa.amoeba.mysql.handler

    类名:CommandQueue

    职责:SQL命令执行队列,客户端向Amoeba发送的语句全部先进入该队列

      

    包名:com.meidusa.amoeba.mysql.context

    类名:MysqlRuntimeContext

    职责:Amoeba运行时上下文信息,包括Amoeba版本号、SQL缓存大小、缓存过期时间等

     

    包名:com.meidusa.amoeba.mysql.net

    类名:MysqlClientConnection

    职责:封装客户端连接到Amoeba的连接对象

     

     

    包名:com.meidusa.amoeba.mysql.net

    类名:MysqlServerConnection

    职责:封装Amoeba连接到物理MySQL数据库的连接对象

     

     

    包名:com.meidusa.amoeba.net.poolable

    类名:MultipleLoadBalanceObjectPool

    职责:实现了一个可以负载均衡的对象池,用到了Apache下面的一个开源项目commons-pool,在Amoeba中,该对象池用来存放Amoeba配置中的 Server Pool 对象

     

    包名:com.meidusa.amoeba.route

    类名:AbstractQueryRouter

    职责:实现读写分离的逻辑就在该抽象类中

    作者:Taven.李锡远
    出处:http://taven.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载。但必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。博主QQ/微信: 17020415 (QQ和微信同号哦^_^)
  • 相关阅读:
    命令模式
    js代理模式,处理缓存
    js设计模式之策略模式
    查看并修改签名证书keystore的密码,alias别名等相关参数
    【fiddler】配置代理后个别app连不上网的问题
    使用Fiddler域名过滤、断点、小技巧绕过前端验证
    App上架各大应用市场的地址及操作方法
    获取APK获取APK证书MD5、SHA1、SHA256等秘钥
    Python一切皆对象
    WEB基础之布局与定位
  • 原文地址:https://www.cnblogs.com/taven/p/2680282.html
Copyright © 2011-2022 走看看