远哥Amoeba源码分析之:核心类说明

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
网络型负载均衡 NLB,每月750个小时 15LCU
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

同事喜欢叫我远哥,所以我把这个笔记称为远哥系列,今天有兴趣分析一下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




本文转自远哥博客园博客,原文链接:http://www.cnblogs.com/taven/archive/2012/09/11/2680282.html,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
缓存 Java 数据库
Spring框架(一) 底层核心原理解析
这个才是我们想要看的结果 ,我们可以简单分析一下 , userServiceBase的test1()方法也是有事务存在的 , 同时userServiceBase也是一个Bean , 它最终也会产生一个代理对象去当做一个Bean , 碎玉UserService而言 , 我要给userServiceBase这个属性去赋值 , 那么他肯定要从Spring容器中找到一个userServiceBase的一个Bean来赋值 , 所以他找到的就是Spring事务所产生的userServiceBase的代理对象 , 所以这个注解就是有用的
173 0
|
设计模式 Java Spring
Spring框架核心源码分析(二)
@[TOC](目录) 由于 Spring 框架的源代码非常复杂,包含许多核心组件和模块,因此分析源代码并提供详细的代码片段将需要相当长的篇幅。尝试提供一些关于 Spring 框架核心组件的简要介绍和代码片段,以帮助您更好地理解 Spring 框架的实现原理。 # 1. BeanFactory BeanFactory 是 Spring 框架的核心组件之一,它是一个工厂设计模式的实现,用于创建和管理 Bean 对象。在 Spring 中,BeanFactory 负责管理 Bean 的创建、配置和管理,包括实例化 Bean 对象、配置 Bean 对象的属性、解决依赖关系等。 以下是一个简单的 Bea
|
存储 资源调度 Kubernetes
K8S | 核心应用原理分析
K8S作为开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理;
207 0
K8S | 核心应用原理分析
|
Java Spring 容器
【框架源码】SpringBoot核心源码解读之启动类源码分析
【框架源码】SpringBoot核心源码解读之启动类源码分析
【框架源码】SpringBoot核心源码解读之启动类源码分析
|
Java API Maven
动态代理-RPC实现核心原理
实现过统一拦截吗?如授权认证、性能统计,可以用 Spring AOP,不需要改动原有代码前提下,还能实现非业务逻辑跟业务逻辑的解耦。核心就是动态代理,通过对字节码进行增强,在方法调用时进行拦截,以便于在方法调用前后,增加处理逻辑。
180 0
|
运维 Dubbo 中间件
Dubbo3 源码解读-宋小生-6:Dubbo的SPI扩展机制之普通扩展对象的创建与Wrapper机制的源码解析
> Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双十一基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实践和统一标准,同时将规模化实践经验与技术创新贡献开源社区,极大的推动了开源技术与标准的发展。 > 本文是
240 0
|
XML 缓存 NoSQL
JAVA开发常用框架注解与作用
JAVA开发常用框架注解与作用
204 0
|
SQL Java 数据库连接
Mybatis(十三) 底层源码分析
Mybatis底层源码分析是对第十一部分的更深层次拓展(值得一看!!!)
Mybatis(十三)  底层源码分析
PHP的抽象就是为了给继承用的吗?底层原理是什么?
PHP的抽象就是为了给继承用的吗?底层原理是什么?
119 0
|
SQL 开发框架 负载均衡
YII2.0使用MyCat有什么作用?底层原理是什么?
YII2.0使用MyCat有什么作用?底层原理是什么?
209 0