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

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

1 读写分离概述

基本架构图:

2 适用场景

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

3 引入的系统复杂度问题

问题一 主从复制延迟

问题二 分配机制

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

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

基本架构图

业界开源实现

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

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

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

基本架构图

业界开源实现

  • MySQL官方推荐的MySQL Router

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

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

MySQL官方提供的MySQL Proxy

360开源的Atlas

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

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

https://mp.weixin.qq.com/s/vkvYJnKfQyuUeD_BDQy_1g

获取更多学习资料,可以加群:473984645或扫描下方二维码

原文地址:https://www.cnblogs.com/lemonrel/p/11778407.html

时间: 2024-07-29 01:39:01

浅谈高性能数据库集群——读写分离的相关文章

十四、linux-MySQL的数据库集群读写分离及高可用性、备份等

一.数据库集群及高可用性 二. 三.mysql实现读写分离 mysql实现读写分离有多种方式: 1)代码语言(php\python\java等)层面实现读写分离,找开发进行实现. 2)通过软件工具实现读写分离,例如amoeba软件 amoeba软件既可以实现负载均衡,也可以实现读写分离,就是进行服务器端压力的分离. 原文地址:https://www.cnblogs.com/dangjingwei/p/11567368.html

Mysql高级集群-读写分离Amoeba

一.环境介绍Master-IP:10.0.0.201Slave- IP:10.0.0.202Amobea-IP:10.0.0.203 二.安装JDK# mkdir /Amoeba# tar -xvf jdk-7u40-linux-x64.tar.gz -C /Amoeba/# vim /etc/profileJAVA_HOME=/Amoeba/jdk1.7.0_40export JAVA_HOME PATH=$JAVA_HOME/bin:$PATHexport PATH CLASSPATH=.:

MySQL集群读写分离的自定义实现

基于MySQL Router可以实现高可用,读写分离,负载均衡之类的,MySQL Router可以说是非常轻量级的一个中间件了.看了一下MySQL Router的原理,其实并不复杂,原理也并不难理解,其实就是一个类似于VIP的代理功能,其中一个MySQL Router有两个端口号,分别是对读和写的转发.至于选择哪个端口号,需要在申请连接的时候自定义选择,换句话说就是在生成连接字符串的时候,要指明是读操作还是写操作,然后由MySQL Router转发到具体的服务器上. 引用这里的话说就是:一般来说

Mysql集群读写分离(Amoeba)

实验环境 Master.Amoeba--IP:192.168.1.5 Slave---IP:192.168.1.10 安装JDK JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html [[email protected] ~]# mkdir /usr/local/JDF [[email protected] ~]# tar -xvf jdk-8u101-linux-x

windows NLB实现MSSQL读写分离--从数据库集群读负载均衡

主从模式,几乎大部分出名的数据库都支持的一种集群模式. 当Web站点的访问量上去之后,很多站点,选择读写分离,减轻主数据库的的压力.当然,一主多从也可以作用多个功能,比如备份.这里主要演示如何实现从数据库集群的读负载均衡 搭建一主三从的MSSQL集群 192.168.99.250 //主服务器 192.168.99.8 //从服务器(WIN-6S3JNU8C4TB) 192.168.99.10 //从服务器(WIN-HF1GQ5U288H) 192.168.99.11 //从服务器(WIN-EA

浅谈数据库集群(一)

现在,随着上网人数的激增,一些大型的网站开始使用数据库集群来提高数据库的可靠性和数据库的性能.那么在介绍数据库集群之前首先需要弄清楚几个问题. 1.为什么要用数据库集群 (1)通过使用数据库集群可以使读写分离,提高数据库的系统性能. 大家都知道,mysql是支持分布式的.MySQL Proxy最强大的一项功能是实现"读写分离(Read/Write Splitting)".基本的原理是让主数据库处理事务性查询,而从数据库处 理SELECT查询.数据库复制被用来把事务性查询导致的变更同步到

浅谈数据库集群方案

单点数据库 数据库往往是系统中的性能瓶颈,所以通常在系统设计中会引入各种各样的缓存机制,以避免频繁访问数据库.另外,数据库由于其重要性,高可用要求也是避免不了的,因为一旦数据库挂了基本上整个系统也就不能使用了. 而以上这些常见问题都是单点数据库带来的限制,为了解决这些问题,达到高性能.高可用的目的,我们就需要在系统架构设计中采用数据库集群方案. 性能测试 既然单点数据库存在性能问题,那么有没有实际数据呢?下面我们就来对单点数据库进行一个性能测试,看看其并发极限大概是多少.我这里使用了一台2核2G

构建读写分离的数据库集群

4.1实战案例——构建读写分离的数据库集群 使用Mycat作为数据库中间件服务构建读写分离的数据库集群 使用一台虚拟机部署Mycat数据库中间件服务,将用户提交的读写操作识别分发给相应的数据库 节点.这样将用户的访问操作.数据库的读与写操作分给3台主机,只有数据库集群的主节点接 收增.删.改SQL语句,从节点接收查询语句,分担了主节点的查询压力 基础准备 使用CentOS 7.2系统,创建3台虚拟机进行实验. 其中2台虚拟机db1和db2部署MariaDB数据库服务,搭建主从数据库集群:一台作为

浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队