图灵最强诸葛老师最新分享:分布式服务框架原理与实践.pdf篇

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

一为什么要做分布式数据库架构改造?

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

二分布式数据库架构改造,如何做?

数据库分布式改造要遵循“循序渐进”的拆分原则

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

一般来说,是先做垂直拆分,再做水平拆分。

在单一数据节点无法满足业务和用户增长需求的情况下,需要做一个服务化,对业务进行垂直梳理,后面的数据节点可以放在不同的资源节点上,以提高数据服务的整体性能。

比如一个APP的业务数据,在业务初期阶段,是全部放在一个数据库节点中,在业务量和数据量快速增长的中期阶段,需要进行垂直梳理,根据业务逻辑,拆分成商品、交易、用户,并分别放在不同的数据库。

如果其中的一个服务已经拆的很细了,但还是有性能瓶颈,无法支撑我们的业务增长,数据库这块才需要再做水平拆分。

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

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

在拆分的过程中,不要做过度的设计,或者直接从初级跳到高级,这样做其实非常浪费资源,投入产出比也不好。

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

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

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

1.客户端实现数据路由

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

2.数据库中间件

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

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

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

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

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

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

它怎么去执行的呢?

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

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

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

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

DRDS,英文名Distributed Relational Database Service

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

DRDS五大核心功能

分库分表

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

读写分离

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

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

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

全局唯一ID

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

小表广播

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

弹性扩容

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

六分布式改造之后——运维

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

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

借助袋鼠云开发的数据库自动化管理平台EasyDB,企业数据库运维很简单。

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

分布式架构演进过程

1.基本概念

在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:

1 :分布式

系统中的多个模块在不同的服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat

分别部署在不同的服务器上。

2 :高可用

系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性。

3 :集群

一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务 器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点 往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性。

4 :负载均衡

请求发送到系统时,通过这些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的。

5 :正向代理和反向代理

系统内部要访问外部网络时,统一通过一个代理服务器把请求转发出去,在外部网络看来就是代理服务器发起的访问,此时代理服务器实现的是正向代理;当外部请求进入系统时,代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器

实现的是反向代理。简单来说,正向代理是代理服务器代替系统内部来访问外部网络的过程,反向代理是外部请求访问系统时通过代理服务器转发到内部服务器的过程。

2.架构演进

2.1 单机架构

以淘宝作为例子。在网站最初时,应用数量与用户数都较少,可以把Tomcat和数据库部署在同一台服务器上。浏览器往

www.taobao.com发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,浏览器转而访问该

IP对应的Tomcat。

随着用户数的增长,Tomcat和数据库之间竞争资源,单机性能不足以支撑业务。

2.2 第一次演进 :Tomcat与数据库分开部署

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法回答关于图灵课堂诸葛老师的redis实战笔记的问题。因为在提供的引用内容中,并没有提到图灵课堂诸葛老师的redis实战笔记。请提供更多相关信息,我将尽力帮助您。 #### 引用[.reference_title] - *1* [Redis主从,哨兵架构简单搭建](https://blog.csdn.net/weixin_38192427/article/details/120577106)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [B站最全Redis教程全集(2021最新版)(图灵学院诸葛)学习笔记一--五种数据结构与应用场景](https://blog.csdn.net/qq_31135607/article/details/117852917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [图灵最强诸葛老师最新分享分布式服务框架原理实践.pdf](https://blog.csdn.net/m0_67322837/article/details/123924158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值