1. 读写分离概述

2. 适用场景

3. 引入的系统复杂度问题


最近学习了阿里资深技术专家李运华的架构设计关于读写分离的教程,颇有收获,总结一下。

本文主要介绍高性能数据库集群读写分离相关理论,基本架构,涉及的复杂度问题以及常见解决方案。

1. 读写分离概述


读写分离概述

基本架构图:

2. 适用场景


读写分离不是银弹,并不是一有性能问题就上读写分离,而是应该先优化,例如优化慢查询,调整不合理的业务逻辑,引入缓存查询等只有确定系统没有优化空间后才考虑读写分离集群

3. 引入的系统复杂度问题


问题一 主从复制延迟

问题二 分配机制

如何将读写操作区分开来,然后访问不同的数据库服务器?

解决方案1 客户端程序代码封装实现

基本架构图

程序代码封装实现分配基本架构图

程序代码封装

业界开源实现

  • Sharding-JDBC 定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

Sharding-JDBC基本架构图
  • 淘宝TDDL 淘宝根据自身业务需求研发了 TDDL ( Taobao Distributed Data Layer )框架,主要用于解决 分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步 ,它是一个基于集中式配置的 JDBC DataSource 实现,具有分库分表、 Master/Salve 、动态数据源配置等功能。

淘宝TDDL基本架构图

解决方案2 服务端中间件封装

基本架构图

服务端中间件封装实现分配基本架构图

服务端中间件封装

业界开源实现

  • MySQL官方推荐的MySQL Router

MySQL Router架构图

MySQL Router是轻量级的中间件,可在应用程序和任何后端MySQL服务器之间提供透明路由。它可以用于各种各样的用例,例如通过有效地将数据库流量路由到适当的后端MySQL服务器来提供高可用性和可伸缩性。可插拔架构还使开发人员能够扩展MySQL Router以用于自定义用例。

基于MySQL Router可以实现读写分离,故障自动切换,负载均衡,连接池等功能。

  • MySQL官方提供的MySQL Proxy

    MySQL Proxy
  • 360开源的Atlas

Atlas架构图形象表示

Atlas总体架构

Atlas是由平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy的基础上,对其进行了优化,增加了一些新的功能特性。

常见的开源数据库中间件对比

功能 Sharding-JDBC TDDL Amoeba Cobar MyCat
基于客户端还是服务端 客户端 客户端 服务端 服务端 服务端
分库分表
MySQL交互协议 JDBC Driver JDBC Driver 前端用NIO,后端用JDBC Driver 前端用NIO,后端用BIO 前后端均用NIO
支持的数据库 任意 任意 任意 MySQL 任意

参考

从0开始学架构——李运华

Mycat原理解析-Mycat架构分析

浅谈高性能数据库集群 —— 读写分离相关推荐

  1. 浅谈高性能数据库集群——读写分离

    作者 陈彩华 贝聊Java后端工程师 文章转载交流请联系 caison@aliyun.com 复制代码 最近学习了阿里资深技术专家李运华的架构设计关于读写分离的教程,颇有收获,总结一下. 本文主要介绍 ...

  2. 程序员修神之路--略懂数据库集群读写分离而已

    " 灵魂拷问: 解决数据库读写瓶颈有哪些解决方案呢? 这些方案解决了什么问题呢? 这些方案有那些优势和劣势呢? 一个可以抵抗高并发流量系统的背后必定有一个高性能的数据库集群,就像每一个成功的 ...

  3. 高性能数据库集群:读写分离

    目录 1.前言 2.读写分离 2.1 什么是读写分离? 2.2 什么情况下需要读写分离? 2.3 复制延迟 2.4 分配机制 2.5 Mysq支持的复制类型及与原理 1.前言 关系数据库由于其 ACI ...

  4. 浅谈Oracle RAC --集群管理软件GI

    浅谈Oracle RAC --集群管理软件GI基本架构 今天周五,想想可以过周末,心情大好.一周中最喜欢过的就是周五晚上,最不喜欢过的是周日晚上和周一,看来我不是个热爱劳动的人啊.趁着现在心情愉悦,赶 ...

  5. 使用mysql-proxy 快速实现mysql 集群 读写分离

    使用mysql-proxy 快速实现mysql 集群 读写分离 2011-12-29 17:03 目前较为常见的mysql读写分离分为两种: 1. 基于程序代码内部实现:在代码中对select操作分发 ...

  6. 浅谈大规模k8s集群关于events的那些坑

    浅谈大规模k8s集群关于events的那些坑 背景 一.用户通过kubectl list event 二.kubernetes-dashboard list events 三.直接在集群中list e ...

  7. 浅谈350M警用集群对讲机的使用与维护

    在公安日常执勤工作中,对讲机已经成为警力队伍进行重大勤务和开展日常工作的有效通信工具和主要调度平台.350M警用集群对讲机与常规对讲机相比,具有更加强大的通信调度能力,且功能更多.保密性更好,符合警务 ...

  8. 高性能数据库集群方案

    背景 虽然近十年来各种存储技术飞速发展,但关系数据库由于其 ACID 的特性和功能强大的 SQL 查询,目前还是各种业务系统中关键和核心的存储系统,很多场景下高性能的设计最核心的部分就是关系数据库的设 ...

  9. Redis集群读写分离架构搭建以及主从数据连通验证(附加集群口令认证以及Redis端口6379释放)

    1. 先在两台主机上装好Redis 如果这部分工作还没有准备好的话,可以看我的另一篇博客. 2. 设置主从节点以及从节点只读(实现读写分离) 2.1 配置slave节点作为master的从机,打开/e ...

最新文章

  1. JS日期时间加减实现
  2. nodejs+express整合kindEditor实现图片上传
  3. GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
  4. gunicorn多进程不死_WEB,gunicorn - 无论是多进程、多线程、协程模式,同一个浏览器窗口多个标签页访问同一个url,看上去不会并发的问题...
  5. VeeValidate在vue项目里表单校验应用案例
  6. 2007年度最具投资价值100强网站揭晓——博客园榜上有名
  7. win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
  8. java 二维数组奇数金字塔_二维数组:奇数阶魔方 | 新思维:C语言程序设计
  9. .NET下为百度文本编辑器UEditor增加图片删除功能
  10. c++ 类的定义和使用
  11. 道路照明之电缆线路 - 设计笔记
  12. 调用网易云Api接口实现移动Web网易云部分功能(搜索+列表+播放)
  13. 海淘尺码表,贡献给论坛买衣服裤子鞋子的朋友
  14. 关于Facebook的28件小事
  15. 山东教师教育网-404、登录、密码找回、常见问题、绑定已有账户
  16. 2017年下半年阅读书单
  17. ssh整合(spring+springmvc+hibernate)
  18. 2020年个人年终工作总结报告及2021年工作计划怎么利用敬业签历史记录 利用云便签备忘录及待办事项的任务清单有效解决2020年终总结报告的撰写
  19. JavaSE + bluecove 蓝牙连接
  20. 任务栏广告弹窗源头查找与处理方法

热门文章

  1. python基础练习_1
  2. INTERSPEECH 2017系列 | 语音识别之语言模型技术
  3. 《Arduino开发实战指南:LabVIEW卷》——3.2 LabVIEW的数据流编程方法
  4. 一道经典的JavaScript面试题
  5. R - 一只小蜜蜂...(第二季水)
  6. 软件测试中英文词汇汇总
  7. 解决xcode打开时假死的问题
  8. PCL点云库实现点云表面的法线与曲率计算并可视化
  9. windows套接字IOCP模型
  10. Sublime Text 3搭建前端环境