阿里云DRDS--MySQL中间件总结分享-阿里云开发者社区

开发者社区> Lionelcox> 正文

阿里云DRDS--MySQL中间件总结分享

简介: mysql作为互联网公司都会用到的数据库,如果在使用过程中出现性能问题,会采用mysql的横向扩展,使用主从复制来提高读性能,要是解决写入问题,需要进行分库分表。本文不会去介绍mysql的高可用,本文主要介绍mysql的访问中间件(DAL)的一些实现方案。
+关注继续查看

1.前言

mysql作为互联网公司都会用到的数据库,如果在使用过程中出现性能问题,会采用mysql的横向扩展,使用主从复制来提高读性能,要是解决写入问题,需要进行分库分表。本文不会去介绍mysql的高可用,本文主要介绍mysql的访问中间件(DAL)的一些实现方案。

2.Atlas

官网:https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

2.1.atlas简介
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。

2.2.atlas架构
Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

1

2.3.主要功能

1.读写分离

2.从库负载均衡

3.IP过滤

4.自动分表

5.DBA可平滑上下线DB

6.自动摘除宕机的DB

Atlas相对于官方MySQL-Proxy的优势

1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口

2.重写网络模型、线程模型

3.实现了真正意义上的连接池

4.优化了锁机制,性能提高数十倍


3.Mysql router

官网:http://dev.mysql.com/doc/mysql-router/en/

3.1.mysql router简介
MySQL Router是mysql官方发布的数据库中间件,是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。

3.2.mysql router架构

image

1.Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。
2.从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。

3.主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。

MySQL Router读写分离原理:

MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。

3.3.mysql router主要功能
MySQL Router的主要用途是读写分离,主主故障自动切换,负载均衡,连接池等。


4.Mycat

官网:http://www.mycat.org.cn/

4.1.mycat简介
Mycat是基于开源cobar演变而来,对cobar的代码进行了彻底的重构,使用NIO重构了网络模块,并且优化了Buffer内核,增强了聚合,Join等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。1.4 版本以后 完全的脱离基本cobar内核,结合Mycat集群管理、自动扩容、智能优化,成为高性能的中间件。
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代MySQL的加强版数据库
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
4.2.mycat架构
image

4.3.mycat主要功能
支持SQL92标准
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
基于Nio实现,有效管理线程,高并发问题。
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
支持多租户方案。
支持分布式事务(弱xa)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的web,命令行监控。
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密码加密
支持服务降级
支持IP白名单
支持SQL黑名单、sql注入攻击拦截
支持分表(1.6)
集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。


5.Cobar

官网:https://github.com/alibaba/cobar/wiki

5.1.cobar简介
Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。
产品在阿里巴巴稳定运行3年以上。
接管了3000+个MySQL数据库的schema。
集群日处理在线SQL请求50亿次以上。
集群日处理在线数据流量TB级别以上。

5.2.cobar架构
image

5.3.cobar现状
2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,及其使用限制,后来在cobar的基础上改良诞生mycat,也就是目前cobar的代替版,而且2013年之后就没有版本更新了。


6.Amoeba

官网:http://docs.hexnova.com/amoeba/

6.1.amoeba简介
Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能

6.2.amoeba架构
image

6.3.amoeba现状
目前作者已经停止维护。


7.Mysql proxy

7.1.mysql proxy简介
MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载均衡,故障、查询分析,查询过滤和修改等等。
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。

7.2.mysql proxy现状
自从mysql官网出现mysql router之后,mysql proxy就已经停止维护了。


8.客户端分片

8.1.客户端分片简介
程序客户端进行分库分表。也就是直接在程序里面进行数据库和表的拆分,例如用户表。根据用户的UID,例如13678789,根据最后一位,可以拆分为0-9共10个数据库,把尾号是0的存入db_user_0数据库,尾号是1的存入db_user_1数据库,select的时候也是一样。然后根据倒数第二位,可以拆分为0-9共10张表,根据倒数第二的尾号写入相应的表中。例如13678789这个UID的信息,写入db_user_9数据库的table_user_8的表中。

8.2.优点
(1)不需要使用中间件对性能没有影响
(2)通过代码控制,可定义性强


9.阿里云DRDS产品

DRDS 产品简介

DRDS 是一款基于 MySQL 存储、采用分库分表技术进行水平扩展的分布式 OLTP 数据库服务产品,支持 RDS for MySQL 以及 POLARDB for MySQL,产品目标旨在提升数据存储容量、并发吞吐、复杂计算效率三个方面的扩展性需求。

DRDS 核心能力采用标准关系型数据库技术实现,构建与公共云( cloud native ),配合完善的管控运维及产品化能力,使其具备稳定可靠、高度可扩展、持续可运维、类传统单机 MySQL 数据库体验的特点。

DRDS 于公共云和专有云环境沉淀打磨多年,历经各界天猫双十一核心交易业务及各行业阿里云客户业务的考验。承载大量用户核心在线业务,横跨互联网、金融&支付、教育、通信、公共事业等多行业,是阿里巴巴集团内部所有在线核心业务及众多阿里云客户业务接入分布式数据库的事实标准。

DRDS 产品特点

稳定
对于绝大部分应用而言,关系型数据库所承担的职责是整个数据管理系统中最为核心基础的,不光直接影响到终端用户的服务体验,同时也是业务数据的最后一道保险,所以稳定性是数据库最为核心的选型因素。

DRDS 的稳定性建立在对久经考验的 MySQL 合理使用的基础上,单机 MySQL 在高并发、大量数据存储和复杂计算场景下,呈现出相对弱势的状态。

DRDS 将数据拆分到多个 RDS MySQL,使每个 RDS MySQL 承担合适的并发、数据存储和计算负载,各个 RDS MySQL 处于稳定状态,DRDS 层面处理分布式逻辑,最终得到一个具有稳定可靠、高度扩展性的分布式关系型数据库系统。

相比于全自研分布式 NewSQL 数据库,DRDS 产品始终以持续稳定性和可运维性作为第一要务,同时通过标准数据库技术弥补与单机数据库的体验差异,让用户便捷、快速地上手使用,充分发挥产品的业务价值。

高度可扩展

相比传统单机关系型数据库,DRDS 采用分层架构可确保在并发、计算、数据存储三个方面均可线性扩展,通过增加 DRDS 节点 和 RDS for MySQL 实例达到水平扩展效果。

相比基于分布式存储的新型 cloud native 数据库,理论上 DRDS 的扩展性没有上限,打消业务在快速发展的过程中针对数据库扩展性产生的后顾之忧与运维压力。

持续可运维

关系型数据库对于绝大部分应用而言需要 7 * 24 小时稳定工作,持续可运维是数据库的核心关键能力。

DRDS 在公共云和专有云持续深耕多年,提供丰富的产品化能力及完备的运维体系,通过完整的 OpenAPI 可让业务自行定时与集成。

生命周期管理
实例创建、重启、释放
数据库创建、删除
数据白屏化操作
容量管理
水平拆分、垂直拆分
读写分离
分析型只读实例
并发型只读实例
弹性变配
平滑扩容、热点扩容
拆分变更
安全与审计
VPC
IP 白名单
账号与权限管理
SQL 审计与分析
容灾管理
一体化备份恢复(快速&一致性)
SQL 闪回
表回收站
多可用区实例容灾部署
监控告警
自有分层监控
云监控接入与关键指标报警管理

通过 RDS for MySQL 提供稳定的存储支持,DRDS 内核专注于分布式 SQL 层,整个分布式 SQL 层如同大部分单机关系型数据库,分为网络和协议层、SQL 解析层、优化层和执行层。其中优化层包含逻辑优化和物理优化,执行层包含单机两阶段执行、单机并行执行( Parallel Query )和多机并行执行( DAG ),采用多种传统单机数据库优化和执行技术。

与单机数据库不同的是,DRDS 将数据拆分逻辑加入到了 SQL 优化和执行过程中,与其他分布式数据库不同的是,在面向 OLTP 场景时,DRDS 着重关注因分布式而带来的代价,提供了包括自定义数据拆分、算子 move-arround 和 pushdown、join 和 aggregation 的 co-located 优化和计算、分布式事务的处理和优化、分布式全局二级索引、面对远超单机数据容量的外置 DAG 计算等技术。

DRDS 不断满足业务对关系型数据库在并发、存储、计算三个方面的扩展性需求,通过积极评估业界积累的数据库技术与经验、不断出现的前沿技术,审慎选择采用,持续为业务提供优良的体验与稳定的保证。

业务架构

DRDS 在业务架构体系中所处的位置如下图所示, DRDS 承担着 OLTP 在线核心数据库的职责与定位,可于数据集成、数据传输,缓存、大数据生态配合使用。

image

内核架构

DRDS 使用体验兼容 MySQL 体系 , 采用标准关系型数据库技术实现,并且大幅度增强其适配分布式场景的能力,因为基于稳定可靠的 > MySQL 存储,因此 DRDS 内核技术主要体现于分布式 SQL 层。

image

整个分布式 SQL 层如同大多数传统单机关系型数据库,分为网络层、协议层、SQL 解析层、优化层和执行层,其中优化层包含逻辑优化> 和物理优化,执行层包含单机两阶段执行、单机并行执行和多机并行执行,应用了多种传统单机数据库优化和执行技术。

与单机数据库不同的是,DRDS 将数据拆分逻辑加入到了 SQL 优化和执行过程中,并且和其他分布式数据库不同的是,在面向 OLTP 场景时,DRDS 特别关注分布式所带来的代价,提供了包括数据拆分的可定制化(指定拆分字段和拆分算法)、算子 move-arround 和 pushdown 、 join 和 aggregation 的 co-located 优化和计算 、分布式事务的处理和优化、分布式全局二级索引、面对远超单机数据容量的外置 DAG 计算等核心技术。

部署架构

DRDS 服务部署在公有云上,采取多种方式确保生产安全,其中包括

  • 支持 VPC、IP 白名单、非对称账号密码、TLS 等方式,确保数据服务安全
  • 使用独享高性能物理资源、实例间充分隔离、支持多可用区实例,确保数据服务稳定
  • 支撑运维系统采用多 region 隔离部署、核心数据服务 SLA 与运维管控 SLA 解绑,确保运维体系稳定

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9473 0
Linux系统:centos7下搭建ZooKeeper3.4中间件,常用命令总结
本文源码:GitHub·点这里 || GitEE·点这里 一、下载解压 1、Zookeeper简介 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。
1036 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10839 0
【阿里云 MVP 月度分享】DRDS分布式数据库的CRUD调优指南
DRDS 分布式数据库作为阿里自主研发的分布式数据库,解决了一些传统单库 RDS 数据库的痛点,本文侧重的不是 DRDS 的原理和如何使用,而是侧重从实际应用的角度如何进行调优。
4691 0
PgSQL · 案例分享 · PostgreSQL 性能诊断指南
背景 数据库的性能优化是一个非常经典的话题,数据库的优化手段以及优化的角度也各不相同。 例如,可以从OS内核、网络、块设备、编译器、文件系统、SQL、数据库参数、业务逻辑、源码等各个方面去进行优化。 但是如果在优化前了解瓶颈在什么地方,可以向打鼹鼠一样,先打大的,起到事半功倍的效果。 本文将针对Linux平台下的PostgreSQL服务,讲解如何诊断PostgreSQL 数据库服务的瓶颈,了
3800 0
SQL Server数据库同步问题分享(二)---操作步骤[未完,待续]
  SQL Server数据库同步问题分享[未完,待续](一)  SQL Server数据库同步问题分享(二)---操作步骤[未完,待续]  SQL Server数据库同步问题分享(三)---创建订阅        上面的设置自己看着办数据库表中如果有些表字段没有指定发布,则在筛选...
1113 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13154 0
分享一个SQLSERVER脚本
原文:分享一个SQLSERVER脚本 分享一个SQLSERVER脚本 很多时候我们都需要计算数据库中各个表的数据量很每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(50) , ...
828 0
RDS SQL Server - 专题分享 - 巧用执行计划缓存之统计信息缺失警告
# 问题引入 SQL Server 数据库查询优化器对执行计划成本的评估是基于统计信息的,换句话说,统计信息的准确与否直接关系着查询语句是否能够高效运行。那么,在SQL Server中,表对象中统计信息的缺失是一个影响查询语句性能的风险点,我们如何能够通过非常自动化的方式来侦查,发现统计信息的缺失呢?这个问题的答案就是我们今天这篇文章要分享的内容 - 使用执行计划缓存来发现统计信息的缺失警告。
1866 0
+关注
3
文章
0
问答
来源圈子
更多
阿里云最有价值专家,简称 MVP(Most Valuable Professional),是专注于帮助他人充分了解和使用阿里云技术的意见领袖阿里云 MVP 奖项为我们提供了这样一个机会,向杰出的意见领袖表示感谢,更希望通过 MVP 将开发者的声音反映到我们的技术路线图上。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载