飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

DDM 的前世今生——浅析分布式数据库中间件

  • 2019-10-22
  • 本文字数:1204 字

    阅读完需:约 4 分钟

DDM的前世今生——浅析分布式数据库中间件

DDM 是什么?这是华为云 Paas 推出的分布式数据库中间件,DDM(Distributed Database Middleware)是一个实现了 Mysql 协议栈的服务器,前端用户可以把它看做一个数据库代理,用 Mysql 客户端工具和命令行访问,而 DDM 后端连接一到多个 Mysql Server。因此,DDM 本身并不存储数据,数据是在后端连接的 Mysql Server 上存储的。简单来说,DDM 就是 Mysql 的最佳伴侣,一定程度上让 Mysql 拥有了跟 Oracle PK 的能力。这样听起来 DDM 好像是 Mysql 的辅助大神,这里有必要对八卦下 DDM 发展背景,了解下 DDM 的前世历程。

NoSQL 与 SQL 之争

目前,互联网常有海量数据高并发和存储的场景,对于数据的存储,目前有基于 SQL (Structured Query Language)的关系型数据库和 NoSQL(Not Only SQL)的非关系型数据库。SQL 数据存在特定结构的表中;而 NoSQL 则更加灵活和可扩展,存储方式可以是 JSON 文档、哈希表或者其他方式,比如键值存储(redis,ROMA,Memcached)数据库应用在排行更新,会话保存,面向文档的数据库(mongoDB、couchDB)应用在日志记录,面向列的数据库(Cassandra、HBase)在博客中的应用。而且速度极高。


虽然在云计算时代,传统数据库存在着先天性的弊端,但是 NoSQL 数据库只能在特定场景下有奇效,只能作为传统数据的补充而不能将其替代。

关系型数据库性能瓶颈

目前绝大多数数据库不具备自动扩展,自动迁移的能力,对于单库单表性能瓶颈明显,当单表超过 1000W 数据量,性能会出现比较明显的下降。为了解决该难题,常见的做法就是进行分库分表来规避。


垂直分库:可按照业务模块进行划分,把数据分在不同的库中。



水平分库:我们发现某些表的数据量已经超过 1000W,QPS 显著下降,这里可以对这种表进行进一步水平拆分,做成多个分片表。大多数电商企业会按照日期分片,但又衍生出来一些问题,在固定时段中对某个分片压力很大,其他分片此时处于空闲状态,在电商企业高并发的场景下,会产生大量数据,此时又产生短时间内单库 QPS 瓶颈的问题。



拆分规则优化:可以根据拆分字段,进行取模的方式来做到数据大致平均分布到多个分片上。可以保证整体系统的 QPS 得到提升,但又衍生出来一些问题:分片数量不够需要扩容的问题,跨分片事务一致性无法保证的问题。

数据库中间件

为了减少对应用的侵入性,并且要将压力打在中间件上,该中间件负责和上层应用打交道,对应用可表现为一个独立的数据库,而屏蔽底层复杂的系统细节。分布式数据库中间件除了基本的分表分库功能,还可以丰富一下,比如讲读写分离或者水平扩容功能集成在一起,或者比如读写分离本身也可以作为一个独立的中间件。(DDM,Cobar,MyCAT, TDDL 等)。


上述提到的分片数量不够的扩容以及分布式事务一致性的问题,在华为云的 DDM 已经得到解决,并且中间件的功能在不断丰富,已经成为高并发应用的绝对利器。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


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


2019-10-22 23:251444

评论

发布
暂无评论
发现更多内容

盘点 2021| 不忘初心,未来之路,与君共勉

法医

前端 盘点 2021

Java Jackson 中的 JsonNode 和 ObjectNode

HoneyMoose

数据分析人员需要掌握SQL到什么程度?3个常考题目刷一刷

博文视点Broadview

Java Jackson 中的 mapper

HoneyMoose

设计模式【8】-- 手工耿教我写装饰器模式

秦怀杂货店

Java 设计模式 装饰器

Kafka往事——揭露Kafka推出Kafka Streams背后原因

Kafka中文社区

阿里云万郁香:多样付费选择构筑成本最优的弹性体验

阿里云弹性计算

阿里云 年度峰会 付费方式

利用闭包实现自定义等待方法

FunTester

多线程 并发测试 闭包 FunTester 自定义等待

ReactNative进阶(四):ReactNative 原理剖析之JS 层渲染 diff 算法

No Silver Bullet

React Native 渲染性能 1月月更

netty系列之:真正的平等–UDT中的Rendezvous

程序那些事

Java Netty 程序那些事 1月月更

一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”

华为云开发者联盟

CANN 昇腾 图像消除 智能实例分割 CRA算法

Avue复选框动态赋值不能渲染问题解决方式

泉城老铁

前端 avue

Apache APISIX 结合 Authing 实现集中式身份认证管理

API7.ai 技术团队

api 网关 Apache APISIX Authing 身份验证

《LeetCode刷题》数组与队列

IT蜗壳-Tango

IT蜗壳教学 1月月更

杜甫草堂

wood

300天创作

Spring Boot工程中如何优雅地处理异常

sean77

spring 整洁代码

明道云虹桥演示中心,欢迎进店!

明道云

开源走向世界(上):开源构建全球化的舞台丨BDTC 2021

PingCAP

AWS 上传的 S3 文件重新载入的时候简体中文显示乱码

HoneyMoose

阿里云刘强:无影云电脑构建云上安全办公室

阿里云弹性计算

弹性计算 年度峰会 无影云电脑

湖仓一体天花板,大数据一站式SQL分析技术实践

华为云开发者联盟

大数据 HetuEngine 湖仓一体 SQL分析 华为云FusionInsight

【LeetCode】 替换所有的问号Java题解

Albert

算法 LeetCode 1月月更

工作中遇到的50个JavaScript的基础知识点

Sunshine_Lin

面试 前端 进阶 基础

Avue中如何对option中属性动态赋值

泉城老铁

前端 avue

ADmobile首席架构师王威:广告业务云上运维最佳实践

阿里云弹性计算

阿里云 弹性计算 年度峰会

开源实践 | 携程在 OceanBase 的探索与实践

OceanBase 数据库

OceanBase 开源 客户案例 携程

使用LNMP环境部署码云测试项目

咿呀呀

lnmp

面试突击13:方法优先调用可选参数还是固定参数?

王磊

java面试 2022

Kubernetes生态,从繁荣走向碎片化

巨子嘉

容器 云原生

尚硅谷Docker与微服务实战教程发布

@零度

大数据 dokcer

【LeetCode】奇偶树Java题解

Albert

算法 LeetCode 1月月更

DDM的前世今生——浅析分布式数据库中间件_文化 & 方法_张译文_InfoQ精选文章