如何实现高容量大并发数据库服务|数据库分布式构架设计

极速动力2年前帮助268

袋鼠大学和优云、阿里云联合举行的沙龙结束以后,总是有男子伴们来问PPT内容,想要进一步了解Topic内容。(哦,对了对了,居然还有男子伴专门冲着袋鼠云去听沙龙,感动cry~~)

千呼万唤,忙成狗的袋鼠小姐总算把沙龙总结整理了下来(⊙o⊙)

本次沙龙的主题是“云时代下的运维管理实践”,受约请的讲演嘉宾,花名宏翊(时常关注袋鼠云的朋友,肯定早已对这个名子很熟悉了),是袋鼠云首席数据库构架师,袋鼠大学数据库讲师。

呼应沙龙运维实践的主题,结合自己的专长领域,宏翊主要是从数据库领域来谈云时代下的运维管理该怎么做,主题为“如何实现高容量大并发数据库服务?之数据分布式架设计”。

为何数据库须要做分布式构架设计?在对数据库进行分拆设计和施行时,会碰到什么坑?又该怎么避开踩坑?

袋鼠小姐结合宏翊的PPT和现场讲演,整理内容如下,希望和你们一起分享、探讨。

摘要

数据库分拆要依照业务现况、模式,选择合适的分拆方法,紧密结合业务及应用构架设计,慎重分拆,避免过度设计。

正文

一为何要做分布式数据库构架改建?

云估算大数据时代,传统的数据库构架早已难以支撑企业高容量的数据下降,满足高并发业务需求。对企业数据库进行分布式构架设计,打破了数据库资源不够用的天花板的同时,能够按照企业业务发展状况,随时平滑扩容。

二分布式数据库构架整修,怎么做?

数据库分布式整修要遵守“循序渐进”的分拆原则

分拆方法有垂直分拆和水平分拆两种,选择分拆方法要按照企业自身业务发展须要。

通常来说,是先做垂直分拆,再做水平分拆。

在单一数据节点未能满足业务和用户下降需求的情况下,须要做一个服务化,对业务进行垂直梳理,旁边的数据节点可以置于不同的资源节点上,以增强数据服务的整体性能

例如一个app的业务数据,在业务早期阶段,是全部放到一个数据库节点中,在业务量和数据量快速下降的中期阶段,须要进行垂直梳理,依据业务逻辑拆分商品、交易、用户,并分别置于不同的数据库。

倘若其中的一个服务早已拆的很细了,但还是有性能困局,难以支撑我们的业务下降,数据库这块才须要再做水平分拆。

水平分拆就是将数据(例如图中APP的交易数据)拆成多片,放在不同的资源上,用一个集群来支撑更高的业务下降。

在分拆时,要慎重,由于分拆会引入复杂性,能不做就不做,最优先是做业务和构架上的优化,最终才是做数据库分拆。

在分拆的过程中,不要做过度的设计,或则直接从中级跳到中级,这样做虽然十分浪费资源,投入产出比也不好。

三水平分拆的难点及解决方案

对企业数据库进行分布式改建,须要理解顾客的业务逻辑、丰富的分拆经验积累。尤其是水平分拆,有系统复杂度高、技术挑战性强、稳定性控制难、具有一定局限性四大难点。

针对这种问题,宏翊给我们提供了两种解决方案

顾客端实现数据路由

此方案不会引入额外的组件,构架上比较轻量,简单场景使用尚可,但稍复杂的场景会放大它的劣势,例如配置管理复杂等。

数据库中间件

中间件的使用最大限度地屏蔽了分布式数据库所引入的复杂性,极大减少了研制的门槛。最重要的是,有了数据库中间件,应用听到的还是单一的数据库。

四水平切分原理及设计原则

要对一个表做分拆,选择一个分拆数组,通过一个路由算法确定数据储存在那个底层库。

例如下述数据选择作为分拆键,通过路由算法估算后得出’‘相关的数据应当落在库1上,DRDS会把所有=‘’相关的恳求全都路由到库1。其他数据恳求亦落到相应的底层库。

接出来,当数据早已放下去了,应当怎样去查询访问和变更?

例如要查询一条记录,=‘’

它如何去执行的呢?

首先估算一个hash值,当值等于某一个值,它会晓得这个数据储存在哪一个库上,所以会直接路由到底层这个库,从这个库查询,返回结果。

中间件饰演的就是这个路由和估算的角色,性能十分强悍。分拆后,各底层数据库数据量比较小,查询返回比较快;二是可以支持更高的并发,整体并发基本等于两个底层数据库实例并发之和。

五来自阿里云的数据库中间件产品:DRDS

数据库中间件产品中,有平民软件商业软件;也有MyCat等开源产品,宏翊为你们则介绍了一款广泛使用的成熟商业产品DRDS,并讲解了DRDS怎么解决对数据库进行分拆时遇见的难点。

DRDS,英语

是阿里巴巴自主研制旨在于解决单机数据库服务困局问题而推出的分布式数据库产品。DRDS高度兼容mysql合同和句型、支持手动化水平分拆、平滑扩容、弹性扩充、透明读写分离、分布式事务、具备分布式数据库全生命周期的运维管控能力。DRDS前身为天猫TDDL,是近千核心应用首选组件,已稳定服务8年以上。

DRDS五大核心功能

分库分表是DRDS的核心功能,DRDS在前端将数据量较大的数据表水平分拆到前端的每位RDS数据库中,这种分拆到RDS中的数据库被称为分库,分库中的表称为分表。分拆后,每位分库负责每一份数据的读写操作,进而有效的分散了整体访问压力。在系统扩容时,只须要水平降低分库的数目,而且迁移相关数据,就可以提升DRDS系统的总体容量。DRDS支持库级分拆,表级分拆和分库分表分拆,通过DRDSDDL句子指定

在主实例的读恳求较多、读压力比较大的时侯,可以通过DRDS读写分离功能对读流量进行分流,减少RDS主实例的读压力。

DRDS的读写分离功能是对应用透明的设计。应用在不更改任何代码的情况下,只须要在DRDS控制台北调整读权重,即可将读流量按配置的比列在主RDS实例与多个RDS只读实例之间进行分流;写流量则全部到主实例,不做分流。

设置读写分离后,从主RDS实例读取的是强读,既实时强一致读,而只读实例上的数据是从主实例上异步复制的,存在微秒级的延后,因而从只读RDS实例读取的是弱读,属于非强一致性读。某些须要实时性、强一致性读的SQL可以通过DRDSHint指定到主实例上执行。

DRDS支持分布式全局惟一且有序递增的数字序列。满足业务在使用分布式数据库下对字段或则惟一键以及特定场景的需求。

DRDS将一些数据量小且更新频率不高的数据表储存为单表模式,这种数据表称为小表。通过数据同步将小表复制到与之JOIN的分库上进而提高JOIN效率的解决方案称为“小表广播”或者“小表复制”。支持查询引擎辨识和下推复杂查询,兼容98%MySQL句型。

当逻辑库对应的底层储存早已达到化学困局,须要进行水平扩充,诸如c盘余量接近30%,这么可以通过平滑扩容来改善。平滑扩容是一种水平扩容形式,既把分库平滑迁移到新添加的底层储存上。在实现上是通过降低RDS实例的数目来提高总体数据储存容量,将分库迁移到新增的RDS实例,因而增加单个RDS实例的处理压力。

六分布式整修过后——运维

进行分布式整修过后,怎么更省心省力对数据库进行运维?

人工成本高、运维人员也难招!

利用袋鼠云开发的数据库手动化管理平台,企业数据库运维很简单。

完全兼容DRDS,具有高可用、高性能、易运维等特征。从性能、资源、集群、备份、容灾入手,支持多种数据库实例,大规模量的数据库运维,提供稳定确切的数据库告警、大盘趋势剖析预警、空间跟踪、SQL跟踪、巡检报告等功能。运维管理人员可以轻松应对复杂的日常管理事务及突发性风波,数据库管理自此显得有规划,有效率,有预见性。

相关文章

未来云:让空间服务器为你服务

空间服务器:表示别人在消费,服务端一般是特定业务空间内部服务器,客户端在这个空间内的时候,才可以与服务器进行通信,实现逻辑运算。比如说,新产品上市,必须在内部服务器挂预订。配置中心:表示消费结束后,基...

简洁、通顺、吸引人的标题:云服务器管理 | 解决绑定MySQL数据库问题

云服务器管理本就需要电脑和管理员名称一致,可以通过绑定mysql数据库来解决电脑mysql和服务器ip地址不一致,登录mysql服务器再修改ip,可以通过ip变更的解决! 云服务器如果有远程登录功能,...

Nosql数据库服务之redis

一图解读DB的分支产品 Nosql数据库介绍 是一种非关系型数据库服务,它能解决常规数据库的并发能力,例如传统的数据库的IO与性能的困局,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。...

如何选择性价比高的虚拟主机服务商

虚拟主机服务商“博云数据”,是一家整合了多家虚拟主机服务商的icp资源的公司,提供优质和低价位虚拟主机服务,同时还提供物理主机为用户提供灵活的虚拟主机。具体可以查看下:博云数据性价比虚拟主机如何选择-...

假如有人把支付宝所有储存服务器炸了,我们在里面的钱是不是都丢了?

把支付宝储存炸了究竟会发生哪些? 那要看你如何炸,我们瞧瞧最低配的金融信息系统是哪些样的。 网上找的图,不是很贴切而且比较容易读懂 通常的金融信息起码是两地三中心的系统。 两地三中心指的是,在同城做两...

php空间 PHP使用LocalStorage

PHP使用 是H5提供的一种本地储存方法,一般用于在浏览器端缓存数据。而PHP是一种用于Web开发的语言,好多时侯我们须要将前端数据储存到顾客端。这么怎样在PHP中使用呢? 概述 是HTML5标准中新...