Cobar是阿里巴巴开源的一个分布式关系数据库访问代理,介于应用服务器和数据库服务器之间(Cobar也支持非独立部署,以lib的方式和应用程序部署在一起)。应用程序通过JDBC驱动访问Cobar集群,Cobar服务器根据SQL和分库规则分解SQL,分发到MySQL集群不同的数据库实例上执行(每个MySQL实例都部署为主/从结构,保证数据高可用)。

前端通信模块负责和应用程序通信,接收到SQL请求(select * from users where userid in (12,22,23))后转交给SQL解析模块,SQL解析模块解析获得SQL中的路由规则查询条件(userid in (12,22,23))再转交给SQL路由模块,SQL路由模块根据路由规则配置(userid为偶数路由至数据库A,userid为奇数路由至数据库B)将应用程序提交的SQL分解成两条SQL(select * from users where userid in (12,22);select * from users where userid in (23))转交给SQL执行代理模块,发送至数据库A和数据库B分别执行。数据库A和B的执行结果返回至SQL执行模块,通过结果合并模块将两个返回结果集合并成一个结果集,最终返回给应用程序,完成在分布式数据库中的一次访问请求。

Cobar服务器集群的伸缩和MySQL服务器集群的伸缩
Cobar服务器可以看作是无状态的应用服务器,因此其集群伸缩可以简单实用负载均衡的手段实现。而MySQL中存储着数据,要想保证集群扩容后数据一致负载均衡,必须要做数据迁移,将集群中原来机器中的数据迁移到新添加的机器。

具体迁移哪些数据可以利用一致性Hash算法(即路由模块使用一致性Hash算法进行路由),尽量使需要迁移的数据最少。但是迁移数据需要遍历数据库中每条记录(的索引),重新进行路由计算确定其是否需要迁移,这会对数据库访问造成一定压力。并且需要解决迁移过程中数据的一致性、可访问性、迁移过程中服务器宕机时的可用性等诸多问题。实践中,Cobar利用了MySQL的数据同步功能进行数据迁移。数据迁移不是以数据为单位,而是以Schema为单位。在Cobar集群初始化时,在每个MySQL实例创建多个Schema(根据业务远景规划未来集群规模,如果集群最大规模为1000台数据库服务器,那么总的初始Schema数>=1000)。集群扩容时,从每个服务器中迁移部分Schema到新机器中,由于迁移以Schema为单位,迁移过程可以使用MySQL的同步机制。

同步完成时,即新机器中Schema数据和原机器中Schema数据一致的时候,修改Cobar服务器的路由配置,将这些Schema的IP修改为新机器的IP,然后删除原机器中的相关Schema,完成MySQL集群扩容。
在整个分布式关系数据库的访问请求过程中,Cobar服务器处理消耗的时间是很少的,时间花费主要还是在MySQL数据库端,因此应用程序通过Cobar访问分布式关系数据库,性能基本和直接访问关系数据库相当,可以满足网站在线业务的实时处理需求。事实上由于Cobar代替应用程序连接数据库,数据库只需维护更少的连接,减少不必要的资源消耗,改善性能。但由于Cobar路由后只能在单一数据库实例上处理查询请求,因此无法执行跨库的JOIN操作,当然更不能执行跨库的事务处理。

Cobar分布式关系数据库访问代理相关推荐

  1. 蚂蚁金服自研分布式关系数据库OceanBase上线阿里云

    OceanBase于2020年3月在阿里云上完成了商业化,在公有云上正式对外开放.同步上线的还有相关的生态产品,包括集群管控(OCP:OceanBase Cloud Platform),诊断(OTA: ...

  2. java mysql proxy_Amoeba是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目...

    Amoeba(变形虫)项目是一个开源框架,于2008年开始发布一款 Amoeba for Mysql软件: 这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQ ...

  3. 每秒1.28万亿行,最快的分布式关系数据库MemSQL又破记录了!

    众所周知,如果交互式响应时间小于四分之一秒,那么人们会获得令人难以置信的满意度.当你提供的响应时间下降到大约四分之一秒时,交互对用户而言是即时的. 但是,由于大数据集和并发需求,给所有客户提供的速度水 ...

  4. Crawler:反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地址随机选取)+实现下载某网址上所有的图片到指定文件夹

    Crawler:反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地址随机选取)+实现下载某网址上所有的图片到指定文件夹 导读 基于反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地 ...

  5. 手机端设置https访问代理(windows)

    手机端设置https访问代理(windows) 系统环境:window7 Fiddler当前版本:v4.5.1.0 Fiddler最新版本:v4.6.20171.26113 一.启动Fiddler,打 ...

  6. 关于开发新一代大数据分布式关系数据库的倡议

    关于开发新一代大数据分布式关系数据库的倡议 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1c1utF ...

  7. 如何构建Informix分布式数据库访问

    如何构建Informix分布式数据库访问 [IT168 服务器学院]分布式数据库是在集中式数据库系统成熟技术的基础上发展起来的,它使物理分布的数据构成了一个逻辑整体.对用户来说,一个分布式数据库系统逻 ...

  8. Jsch访问代理机报proxy error:Forbidden

    Jsch访问代理机报proxy error:Forbidden 问题解释 通过代理访问物理机被拒绝 原因分析 代理机用户名.端口错误或物理机用户名.端口.密码错误 代理机或物理机代理端口未开放 问题处 ...

  9. Win10解除UWP应用网络隔离从而允许访问代理

    参考网站: 1. 利用py脚本,快速找到注册表中的SID 给win10应用商店设置代理 | Trim21's Blog win10商店SID S-1-15-2-1609473798-123192301 ...

最新文章

  1. android 修改toolbar菜单item的icon图标
  2. Python实用小技能,一个比一个高级!
  3. spring+mybatis之声明式事务管理初识(小实例)
  4. 使用 HttpWebRequest 向网站提交数据
  5. python 字典定义日志用法_python中字典(Dictionary)用法实例详解
  6. JS开源框架Stimulus:让web应用在移动端达到原生体验!
  7. 问题解决办法:pip tensorrt成功,PyCharm import出错
  8. Jenkins 构建项目流程
  9. 串级控制系统matlab仿真,锅炉串级三冲量给水控制系统的MATLAB 仿真
  10. 计划超越苹果!诺基亚在印度推出笔记本电脑
  11. 桌面显卡和CPU性能天梯图
  12. 基因测序的云计算平台可能带来的变革与进步
  13. 你值得拥有!-阿里P8架构师荣耀典藏:Java多线程与Socket实战微服务框架笔记
  14. VS2017无法登录:我们无法刷新此账户的凭证、我们无法添加此账户发送请求时出错、评估期已结束,请登录以解除产品锁定
  15. 使用树莓派打造一台收音机
  16. Verilog实现移位寄存器
  17. ChatGPT 和 Elasticsearch:OpenAI 遇见私有数据(二)
  18. [WallProxy] WallProxy
  19. SpringBoot构建电商基础秒杀项目知识点总结(第3章)
  20. Python学习记录-实战三、模拟12306火车票订票流程

热门文章

  1. Java 数据对象(JDO)介绍
  2. 美国泛达网络:新一代通用型数据中心机柜
  3. 教你用单片机表白2019(文末送代码)
  4. 大厂面试突击——集合篇
  5. python汇率转换_21天入门Python基础——练习1汇率转换
  6. java程序员面试笔试宝典8.3排序
  7. 应用技术大公开系列Q之十一:(纤维).石墨烯纸制备工艺 (*3-4)
  8. 数据嗨客 | 第1期
  9. 物联网发展真正的瓶颈是什么?
  10. 记一次简单网络排障过程分析