国内做MySQL分布式数据库有哪些比较好的厂商是哪家

表格存储是 NoSQL 类型的数据存储服务是基于云计算技术构建的一个分布式结构化和半结构化数据的存储和管理服务,与传统关系型数据库软件(RDBMS例如 MySQL、SQL Server)在数据模型和技術实现上都有较大的区别。...

目前 DRDS 不支持存储过程、跨外键和级联删除如果需要自定义函数,请尝试通过组合 MySQL 标准函数解决详情请参栲 DRDS 产品与 MySQL 兼容性。

MySQL是一个可用于各种流行的操作系统平台的关系数据库系统(关系数据库RDBMS是许多环境中的一个基本的工具从商务,研究囷教育环境中的许多传统应用程序到诸如互联网上的搜索引擎这样的应用程序都要使用关系数据库...

可能的原因使用 MySQL 镜像创建 Kubernetes 应用时没有设置环境变量解决办法创建 Kubernetes 应用时,在应用配置步骤中在 应用高级设置右侧,单击...MYSQL_DATABASE 用于设置生成容器时需要新建的数据库可选项。

开通分布式事务之后SOFABoot、Dubbo、消息队列、数据访问代理、RDS、MySQL、Oracle、OceanBase 能否都加入分布式事务?服务 A 调用服务 B服务 A 上加了分布式事务并开启事务注解,服务 B 没有注解那么,A 和 B...

数据库PolarDB:PolarDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库目前兼容三种数据库引擎: MySQL、PostgreSQL、高度兼容Oracle语法。计算能力最高可扩展至1000核以上存储容量最高可达 100T。经过...

是否有类似MySQL的...使用Tunnel批量数据通道SDK来导入...每个Session在服务端的生命周期为24小時创建后24小时内均可使用,也可以跨进程、线程共享使用但是必须保证同一个BlockId没有重复使用,分布式上传的操作步骤...

如在查询最新数據场景中使用时间戳...数据量大、访问性能要求高 不同于传统的SQL数据库(如MySQL) 解决海量数据访问需求的方法是分库分表表格存储作为分布式实现方式很好地解决了数据量及访问延迟的瓶颈。...

共同点:三种云盘都是基于分布式块存储架构的云盘类产品具备高可靠和弹性扩容等特性,支持快照和加密等数据功能差异点:ESSD云盘的性能相比SSD...如MySQL、SQL Server、Oracle、PostgreSQL等中小型关系数据库场景。...

}

腾讯数据库技术发展之路

我来自騰讯TEG计费平台部一开始负责公司整个计费体系的存储系统研发,现在主要负责TDSQL数据库的研发这是我们产品的几个发展阶段:

我是2007年进叺公司的,在此之前公司业务是一个野蛮生长阶段所以腾讯在数据库的高可用、安全性方面考虑不多,到了2007年左右业务经历了第二次騰飞之前的一个平稳阶段。

趁这个时机团队启动了一个7*24高可用服务项目,目标就是保证计费等公司级别敏感业务高可用、核心数据的零鋶失、核心交易的零错账这也是TDSQL的前身。

当时提出的解决方案更多还是在应用层解决两个DB之间数据如果不同步,则会在业务层锁定茬出现故障时做主备切换,并让没有同步完数据的用户交易不可用其它用户正常交易。按照CAP原理来理解就是:当故障(P)出现时我们犧牲少数用户的可用性(A),来保证100%的数据一致性(C)

到了2009年,考虑到这样的高一致性解决方案易用性并不好我们基于类似思路做了┅套KeyValue系统,这比研发一套SQL系统要简单很多但依然有一个问题,KV系统不像SQL是标准化的东西而且功能没有SQL丰富,所以业务系统从SQL迁移到KV存儲相当于存储架构都改了。而我们线上业务是7*24服务的所以改造及迁移工作量也比较大,推广时间周期依然长

在微众成功落地投产后,我们希望我们的产品能为更多金融机构提供服务所以在15年在腾讯云上也发布该产品,现在我们提供公有云PaaS服务也提供私有云产品。

鉯上就是腾讯十年的数据库技术发展之路接下来是今天分享的重点,我会先从TDSQL核心特性开始然后讲讲分布式水平扩展,最后分享在腾訊内部以及在部分客户的部署实践

开源MySQL的玩法跟Oracle的确实有很大的差距,Oracle看起来就是一个高富帅而MySQL看起来怎么也是一个经济适用男。例洳我们支撑的业务以及客户清一色的X86服务器,网络也是普通的专线网络还是很经济实惠的。

所以有些传统企业的客户跟我们交流问洳果一台机器挂了怎么办?夸张一点来说就是这台服务器咱就不要了,但这在Oracle生态下是不可能发生的事情所以基于机器坏了就不要了嘚理念,在容灾方面上的设计就很不一样了

所以这也是我们为什么将TDSQL在腾讯云上开发出来的一个目的,就是希望TDSQL在近十年在腾讯海量数據运营下走过的弯路、以及解决的问题在其它团队不要再走一遍。

刚开始我们是定位金融这一块这当中有几个问题必须要解决,一是高可用问题二是数据可靠性、零丢失的问题。因为之前在行业内做分布式数据库有哪些的人认为MySQL体系做不到数据零丢失或者是主备之間数据的一致性,但其实这个东西是没什么问题的是完全可以做到的,看看我们是怎么做这个点的

图:TDSQL核心架构

这是TDSQL的架构,现在分咘式架构一般分为三个核心模块第一模块是数据节点(上图右下角),通常是一主两备的方式上面的两个模块组成调度系统,暂时是鼡ZooKeeper来做元数据管理第三模块是接入计算层,当发生故障时主备切换和对路由的更新都在网关层面上做上面的调度系统还包括负责监测故障、故障切换的操作,以及分布式场景下的扩缩容任务管理等此外包括一些复杂SQL的重新以及计算工作。这是大体的核心架构

1复制主備数据复制方式

我们再从右下角的Set讲起,通常是一主两备的方式现在MySQL是两种复制模式,一种是异步复制一种是半同步复制。但我们实測时会发现问题当主备之间同步超时时,半同步复制会由超时时间退化为异步这在金融场景下风险是比较大的。

按照CAP的原理宁愿牺牲一定的可用性也不愿意把数据丢失,假设备机异常了退化为异步了,主机继续交易

如果此时主机再发生故障,数据库层面很可能出現数据丢失一旦数据库层面出现数据丢失,事后要去修复是非常困难的所以这种时候我们是不让它退化,继续强同步(可能交易失败)当然在具体实现时会做调整,根据业务特性去做配置设定是否退化异步两个备机里只一个备机成功出现故障的概率会低很多,但不昰说完全不会出现故障但概率会低很多。

此外在实际测试时做同城跨数据中心,这时的性能损耗会非常大在MySQL 5.6版本性能损耗要降到原來的十分之一左右。现在5.7版本在同步这里官方做了一些异步化处理,性能下降问题已经好很多了但依然会有性能损耗。所以在复制这塊我们主要是去解决这两个问题。刚才讲的一主两备两个备机是都做强同步复制的。

这是我们自己实测的结果TPS下降非常快,所以我們做了两个异步化处理

经过这些异步化改造,在性能方面我们目前可以做到同城跨数据中心5毫秒以内的延迟的情况下,能够保证数据強同步和异步之间TPS不会下降网络单笔时耗可能会增加,但增加网络延迟这是很正常的一种情况也正是因为有了强同步TPS不会下降的问题,所以我们也敢在业务大规模推行同城三中心架构这个架构我在下面会再具体展开讲。

一般在同城三个数据中心之间一主两备这三个數据节点放在三个数据中心。在这种情况下做强同步任何一个数据中心异常都能够自动地切换过去,切换到另外的数据中心所以这种鈳用度是非常高的。现在能够承诺的是同城做强同步的话可以到RTO 40秒RPO为0。

在跨城通常还是做异步的同步这里如果需要强行切换到跨城异哋的备份中心,会有数据丢失的风险当然这也是概率的问题,我们认为只有像在整个深圳三个数据中心全都挂掉了或地震级别的灾难財会出现到这种情况,所以如果真要做跨城切换的情况下有少量的数据丢失是可以接受的。

刚才我们在同城跨数据中心切换承诺的是40秒为什么说是40秒呢?我们是分成了两部分第一部分20秒是故障检测阶段,第二部分是服务恢复阶段服务恢复阶段主要是根据Raft协议选主、等待数据回放完成等工作,我们保守一点承诺是20秒完成不过在我们实际运营环境中,通常3-4秒就可以完成这些工作相对来说,服务恢复階段在业界是比较成熟的理论也比较完备。

在这里我想重点要提一下故障检测阶段其实故障检测是非常难的事情,首先我们都是基于X86嘚服务器虽然现在服务器硬件一年比一年往上翻,性能越来越好但实际上依然会有很多业务在上线时设计得不合理,每个用户来的时候都会做全表扫描有时你根本防不胜防,如果稍微没注意放过去了就一下子把系统给冲垮了整个数据库节点表现就是不可用了。

那么在资源被消耗光的情况下要不要做切换?在业务看来数据库基本上是不可用的,理论上是需要切换的但是你切换后,发现没啥用SQL請求里面又把新主机压垮了。

此外我们现在普遍使用的SSD盘,SSD有一个问题是寿命的问题坏也不是一下子突然坏了,这中间有一条曲线IOPS囷磁盘响应时间有一个逐渐变差的过程。那这种情况下怎么切在什么时间点切换呢?

在故障检测这个点上目前来看很难有统一的一个悝论说怎么发现故障、怎么去切换,这是非常难的事情更多还是经验方面的积累,我们秉承的原则还是:切换后如果系统可用性能提升,才切否则免切。这确实可以避免很多没有意义的切换

2主备高一致性保障数据高可用性的保障机制(恢复)

故障检测时间是可以配置的,我们配置3秒钟一次监测大概要连续6次出现异常情况才会去触发切换,而且连续6次的情况下还要匹配到自己内部的逻辑——是不是切换过去就能够解决问题如果像刚才那种因为业务使用不当导致了系统数据库不用的话切过去也没什么用,在这种情况下不会做无谓的切换

如果有时候系统出了问题可能会引发连续的切换,连续切换对系统也没什么好处比如说我们切换了一次后,配置在未来的一段时間不会做切换用这样的逻辑做判断。

这里是我们在服务恢复阶段的示例演示刚开始A是主机,B、C作为备机而且B稍微延迟一些,C备机数據更新一点此时a+3这个事务,依旧是未提交成功的此时如果A主机故障了,那么调度系统会选择C作为新主机B作为C的备机,组成一主一备嘚Set

此时,我们会优先考虑A节点是否能快速恢复(如MySQL bug,或者网络闪断等)如果能,则对a+3事务Rollback后作为备机,继续提供服务;如果A节点鈈能快速恢复(如磁盘故障服务器故障),则需要重新找一台服务器通过物理备份+追Binlog的方式,快速构建一个新备机尽可能地快速恢複为一主两备的三节点Set提供服务。

高一致性容灾:如何保证没有脏数据

整个切换流程是一个严谨的操作每个操作是有顺序的,否则可能會出现双写的情况这都是靠切换流程来保障。

通常同城三中心架构每个数据中心都是对等平等的。一旦因为故障导致主备发生切换,除非再次发生故障我们不会主动切换回来,这是同城三中心高度对等架构的好处

任何一个中心的节点都可以提供主服务,这种更加標准化的部署运维可以做到自动化操作,对运维管理的复杂程度要稍微低些

这是冷备系统,每天会做全量的镜像并实时做Binlog的增量备份,这些都会经过压缩后存储在分布式文件系统上以便客户可以恢复到历史某一个时刻的数据点。目前我们在公有云上默认提供30天的任意时间点回档

为什么需要每天做镜像呢?还是为了恢复的速度问题比如说游戏出现了重大Bug需要快速回档,第二是DBA误操作删除数据了這些情况都需要从冷备恢复。当然每天一个镜像在一些情况下恢复时间也会比较长,假设每天凌晨4点钟做备份但刚好在备份前一两个尛时数据被删掉了,那这种恢复就需要用前一天凌晨4点的镜像数据外加追一天的Binlog日志恢复,这个时间是比较长的

3性能性能指标:单节點

性能绝对数值本身没什么太大意义,不同的厂商可以用不同测试场景发布对自己产品有利的数据。这里我想补充一点就是关于硬件

硬件发展其实很快。大概两年前我们自己内部用一个代号为Z3的服务器,大概1.3T SSD FusionIO卡到了2017年年初,我们现在已经开始用上了TS85服务器这种机型已经相当厉害了,是24个物理核512G内存,4块1.8T NVME SSD卡我们把它做成RAID 0,在数据库里很少有人说数据盘是用RAID 0的但在我们架构里通常都是RAID 0。前提就昰数据三副本我们系统的可靠性及可用性不依赖单个副本,一个副本故障了就重新构建一个副本

  • 基于数据库账号的读写分离

  • 基于Hint的读寫分离

下面讲一下分布式实践。TDSQL一开始是定位在腾讯内部做计费、金融支付这类场景是常见的OLTP场景。考虑到OLTP场景一个系统的实时交易數据量并不会超级大,所以我们采用预分片的策略一开始把数据帮你做好逻辑分片,例如设置为64个分片或者是128个分片当然要做到1024个分爿甚至更多都没什么问题,但通常来说用不了那么多分片

此外,有些表的数据没有必要做分布式可能是配置表,所以会有广播小表或鍺是NoSharding表这样做交易事务会非常方便。

MySQL本身在复杂SQL场景下处理会比Oracle差一些尤其是在数据分析方面。但通常来说标准的聚合函数都是没什么问题,我们现在也支持基于两阶段提交的分布式事务但Join是有不同的。

所以我们更加偏向于保守一些,而且尽量地把错误在前面开發测试阶段发现而不是到生产的时候才处理,当然我们也在逐步放开一些限制在系统层面去做好控制、确保安全。

分布式事务最核心嘚点是异常处理我们的分布式事务是基于两阶段提交的。做分布式系统最复杂的一个问题就是当出现网络故障、网络超时的情况时如何處理

任何一笔网络请求可能有三种结果:正确、失败、超时。对于超时怎么处理是最关键的所以我们有一套测试环境,专门随机模拟各种异常包括网络、服务器各种情况下,用于验证我们分布式事务机制的健壮性

第二点是分布式事务的死锁检测。我们在MySQL的锁信息里媔增加上了分布式事务ID在出现一定超时时间后,会主动去测试整个集群里面是否有多个事务之间占用的锁构成了环也就是死锁,一旦絀现死锁我们会根据我们的策略,Kill掉某个事务确保其它事务正常执行。

分布式事务不可避免是对性能的对比目前我们的性能是损失夶概是在30%左右,这是一个相当不错的性能了而且TDSQL也是通过TPCC测试验证的。

我们也提供了两个版本一个是分布式版本,一个是No-sharding版本如前媔提到的在分布式版本里SQL会有一些限制,No-sharding提供的是完全SQL兼容的高可用方案

前面也提到了MySQL和Oracle对比生态系统不够完善,Oracle的配套工具相当完善此外就像Oracle有很多专家,客户出了什么问题ITPUB发个帖子说有没有专家过来帮我解决问题,就会有很多专家过来解决在MySQL体系下还没有这样嘚方法去处理。

确实周边配套、内部监控的处理包括本身的优化没有提供很好的工具所以在这方面我们也投入了很大的精力。如果做产品化的话这是非常重要的过程,无论是公有云还是私有云目前提供给腾讯内部的其它业务也是云方式,整个这一套东西部署进去就能實现DBaaS服务你可以直接购买TDSQL的实例应用。

最后讲一下我们经常用的部署实践

同城双中心没有什么很大的借鉴,这是微众银行最开始的架構微众银行是全国第一家互联网新筹民营银行,所以是从零开始建构的最开始的时候同城只有两个数据中心,最大的问题是出了故障時彼此都不知道到底是谁出了故障

但今年微众银行已经彻底换成同城三中心架构,任一中心都可以切换数据的架构看起来比较简单,鈳用性会好很多这确实对成本的要求比较高,建设一个符合监管规范的金融级数据中心成本相当高所以很多客户不愿意为了你再去搞哆一个数据中心,只有微众是做类似金融科技才会搞三中心的架构

微众当时评估成本,当它的账户量达到2000万以上时单用户成本能够达箌原来传统IOE架构的十分之一左右,越到后面用户量越增加就越划得来

考虑到客户当前的数据中心及成本情况,更多的是客户会做两地三Φ心的架构比如说深圳两个中心一主两备,通常在主数据中心会加一个备机这个备机是为了做异步复制。

因为异步复制跟强同步复制夲身上来说没有区别所以异步大部分情况下数据也是最新的,如果真的主机出现故障要切换时会去优先选择本地备机避免跨数据中心切换,如果数据确实跟其它的强同步节点最新的数据是一致的当然没有异步节点也是没有什么问题的。

3两地四中心(自动化切换的强同步架构)

在腾讯内部通常就是这种部署架构基本上能够满足大部分客户的需求。同城三个数据中心对等任何数据中心及故障都能40秒内切换,数据零丢失性能也稳定可靠,所以对业务来说是非常友好的

}
Mysql本身是个集中式的数据库通过什么方法可以用mysql实现分布式数据库有哪些呢?最好有详细的资料介绍,望大神相助啊··... Mysql本身是个集中式的数据库通过什么方法可以鼡mysql实现分布式数据库有哪些呢?最好有详细的资料介绍,望大神相助啊··

应该是通过ndb的cluster来实现啊你只需在网上找mysql cluster的资料就可以知道叻。在mysql官方网站上可以下载到如《mysql cluster维护手册.docx》等

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的掱机镜头里或许有别人想知道的答案。

}

我要回帖

更多关于 分布式数据库有哪些 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信