如何实现高容量大并发数据库服务|数据库分布式构架设计
袋鼠大学和优云、阿里云联合举行的沙龙结束以后,总是有男子伴们来问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跟踪、巡检报告等功能。运维管理人员可以轻松应对复杂的日常管理事务及突发性风波,数据库管理自此显得有规划,有效率,有预见性。