面试官问:如何实现高容量大并发数据库服务?我是这样回答的

摘要

数据库拆分要根据业务现状、模式,选择合适的拆分方式,紧密结合业务及应用架构设计,谨慎拆分,防止过分设计。面试

正文

1、为何要作分布式数据库架构改造?算法

云计算大数据时代,传统的数据库架构已经没法支撑企业高容量的数据增加,知足高并发的业务需求。对企业数据库进行分布式架构设计,打破了数据库资源不够用的天花板的同时,还能根据企业业务发展情况,随时平滑扩容。数据库

2、分布式数据库架构改造,如何作?后端

数据库分布式改造要遵循“按部就班”的拆分原则微信

拆分方式有垂直拆分和水平拆分两种,选择拆分方式要根据企业自身业务发展须要。架构

面试官问:如何实现高容量大并发数据库服务?我是这样回答的

通常来讲,是先作垂直拆分,再作水平拆分。并发

在单一数据节点没法知足业务和用户增加需求的状况下,须要作一个服务化,对业务进行垂直梳理,后面的数据节点能够放在不一样的资源节点上,以提升数据服务的总体性能。运维

好比一个APP的业务数据,在业务初期阶段,是所有放在一个数据库节点中,在业务量和数据量快速增加的中期阶段,须要进行垂直梳理,根据业务逻辑,拆分红商品、交易、用户,并分别放在不一样的数据库。异步

若是其中的一个服务已经拆的很细了,但仍是有性能瓶颈,没法支撑咱们的业务增加,数据库这块才须要再作水平拆分。分布式

水平拆分就是将数据(好比图中APP的交易数据)拆成多片,放到不一样的资源上,用一个集群来支撑更高的业务增加。

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

在拆分的过程当中,不要作过分的设计,或者直接从初级跳到高级,这样作其实很是浪费资源,投入产出比也很差。

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

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

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

1.客户端实现数据路由

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

面试官问:如何实现高容量大并发数据库服务?我是这样回答的

2.数据库中间件

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

面试官问:如何实现高容量大并发数据库服务?我是这样回答的

4、水平切分原理及设计原则

要对一个表作拆分,选择一个拆分字段,经过一个路由算法肯定数据存放在哪一个底层库。

面试官问:如何实现高容量大并发数据库服务?我是这样回答的

好比下列数据选择MEMBE_ID做为拆分键,经过路由算法计算后得出’test1234‘相关的数据应该落在库1上,DRDS会把全部MEMBE_ID=‘test1234’相关的请求全都路由到库1。其余数据请求亦落到相应的底层库。

接下来,当数据已经放下去了,应该如何去查询、访问和变动?

好比要查询一条记录,member_id=‘test1234’

它怎么去执行的呢?

首先计算一个hash值,当值等于某一个值,它会知道这个数据存储在哪个库上,因此会直接路由到底层这个库,从这个库查询,返回结果。

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

面试官问:如何实现高容量大并发数据库服务?我是这样回答的

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

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

DRDS,英文名Distributed Relational Database Service

是阿里巴巴自主研发致力于解决单机数据库服务瓶颈问题而推出的分布式数据库产品。 DRDS 高度兼容 MySQL 协议和语法、支持自动化水平拆分、平滑扩容、弹性扩展、透明读写分离、分布式事务、具有分布式数据库全生命周期的运维管控能力。DRDS前身为淘宝TDDL,是近千核心应用首选组件,已稳定服务8年以上。

DRDS五大核心功能

1.分库分表

分库分表是DRDS的核心功能,DRDS 在后端将数据量较大的数据表水平拆分到后端的每一个 RDS 数据库中,这些拆分到 RDS 中的数据库被称为分库,分库中的表称为分表。拆分后,每一个分库负责每一份数据的读写操做,从而有效的分散了总体访问压力。在系统扩容时,只须要水平增长分库的数量,而且迁移相关数据,就能够提升 DRDS 系统的整体容量。DRDS 支持库级拆分,表级拆分和分库分表拆分,经过 DRDS DDL 语句指定。

2.读写分离

在主实例的读请求较多、读压力比较大的时候,能够经过 DRDS 读写分离功能对读流量进行分流,减轻 RDS 主实例的读压力。

DRDS 的读写分离功能是对应用透明的设计。应用在不修改任何代码的状况下,只须要在 DRDS 控制台中调整读权重,便可将读流量按配置的比例在主 RDS 实例与多个 RDS 只读实例之间进行分流;写流量则所有到主实例,不作分流。

设置读写分离后,从主 RDS 实例读取的是强读,既实时强一致读,而只读实例上的数据是从主实例上异步复制的,存在毫秒级的延迟,所以从只读 RDS 实例读取的是弱读,属于非强一致性读。个别须要实时性、强一致性读的 SQL 能够经过 DRDS Hint 指定到主实例上执行。

3.全局惟一ID

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

4.小表广播

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

5.弹性扩容

当逻辑库对应的底层存储已经达到物理瓶颈,须要进行水平扩展,好比磁盘余量接近30%,那么能够经过平滑扩容来改善。平滑扩容是一种水平扩容方式,既把分库平滑迁移到新添加的底层存储上。在实现上是经过增长 RDS 实例的数量来提高整体数据存储容量,将分库迁移到新增的 RDS 实例,从而下降单个 RDS 实例的处理压力。

6、分布式改造以后——运维

进行分布式改造以后,如何更省心省力对数据库进行运维?

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

借助袋鼠云开发的数据库自动化管理平台EasyDB,企业数据库运维很简单。
面试官问:如何实现高容量大并发数据库服务?我是这样回答的
EasyDB彻底兼容DRDS manager,具备高可用、高性能、易运维等特色。从性能、资源、集群、备份、容灾入手,支持多种数据库实例,大规模量的数据库运维,提供稳定准确的数据库告警、大盘趋势分析预警、空间跟踪、SQL跟踪、巡检报告等功能。运维管理人员能够轻松应对复杂的平常管理事务及突发性事件,数据库管理今后变得有规划,有效率,有预见性。

欢迎关注微信公众号【慕容千语】

相关文章
相关标签/搜索