博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让数据库不再成为业务发展瓶颈——分布式数据库架构设计
阅读量:5782 次
发布时间:2019-06-18

本文共 1917 字,大约阅读时间需要 6 分钟。

摘要

企业如何实现高容量大并发数据库服务?公司业务高速发展,单实例数据库到达瓶颈的情况下,如何做好分布式设计,提供高并发高性能的数据库服务以支撑业务增长?

本次分享主要内容包括数据库分布式架构设计思路,拆分原理,改造难点,解决方案等,让数据库不再成为业务发展瓶颈。

内容来源:2017年6月4日,袋鼠云首席数据库架构师宏翊在“企业互联网架构优化升级之路”进行《让数据库不再成为业务发展瓶颈——分布式数据库架构设计》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:1705 | 3分钟阅读

嘉宾演讲视频回放:

为什么要做分布式?

高并发:分布式应用带来更大量的数据库请求。

高容量:业务增长,产生大量在线数据。

资源向上扩展存在天花板。

支撑业务高速发展,平滑扩容。

拆分原则:循序渐进

在业务初期,客户量比较少,可以把所有服务和数据都存在一个实例上,都能支持业务的发展。

发展之后的客户量、数据量和并发都上来了,这时数据库很容易出现瓶颈。我们建议大家首先进行服务化的改造,将不同的业务模块做垂直梳理,把不同服务的数据库相互隔离,中间的交互由业务上去实现。这样数据库就可以分布在不同的实例上,能够支持相对较高的并发和容量。

继续发展的话,实例依然是一个瓶颈,这时我们就要考虑做水平的拆分。把一个服务的数据分布到不同的实例上,以支持扩展、高并发、大容量的数据库服务。

拆分需要循序渐进,然后做服务的梳理,最后再做水平拆分。

水平拆分会引入一些复杂性,研发方面需要考虑的东西就比较多,所以需要谨慎地做拆分。数据库的拆分和业务架构紧密结合,有时在业务上的一个小改动完全可以把压力挡在数据库之外。

水平拆分的难点

水平拆分的一个服务数据会分布到不同的底层数据库上,所以会带来一些复杂性。

系统架构需要适应数据库的分布式,就需要做一些改造。面临的技术挑战就是应用需要处理复杂的分布式逻辑,比如分布式的事务、跨库查询。在稳定性方面也会有一些挑战,但不是最主要的。主要是分布式的局限性,分布式数据分布在不同的数据库上,它不支持跨库的join、分布式事务、以及全局sequence等。

解决方案:客户端实现数据路由

在客户端直接做一个配置,去实现路由的功能。它的好处就是不需要引入额外模块,整体架构不变;程序的把控力强,场景简单方便使用;对代码的侵入性强;配置管理复杂。

此方案不会引入额外的组建,架构上比较轻量,简单场景使用尚可,比如配置管理复杂等,不建议使用。

解决方案:数据库中间件

实现自动分库分表,对应用透明;使用门槛极低,应用改造量小;方便的动态水平扩容;针对分布式的各种定制功能,如异构索引、小表广播等;最重要的是,有了数据库中间件,应用看到还是单一的数据库。

中间件的使用最大限度的屏蔽了分布式数据库所引入的复杂性,极大降低了研发的门槛。

DRDS功能简介

分库分表是DRDS的核心功能,支持数据的多维度切分和路由访问;内建读写分离功能,可以灵活配置访问权重;自带全局唯一ID组件;查询引擎识别和下推复杂查询,兼容98% MySQL语法;弹性扩容组件实现自动化在线水平扩容。

DRDS物理框架

数据拆分,能够组合1K个MySQL;分布式SQL查询引擎与高度的SQL兼容性;数据存储的平滑扩容;处理性能的弹性伸缩;读写分离(应用透明);小表广播、跨库join、全局sequence。

主库和读库通过数据库的原生复制实现,数据是强一致的。DRDS会自动判断请求,然后做分发。事务性的操作全部路由到主库上去,读库则承担一些读的操作。

把join从DRDS层往下推,在MySQL层实现它的join,业务设计上要避免跨库join。

分布式SQL规范设计:最佳实践

查询尽可能带上分库条件。如果把一个表拆分到底层的十个库,查询的时候每次都带上一个拆分条件,DRDS能够很清楚地把请求路由到底层的库上。

Join的时候有几种解决方案。一种是两个表的分库键都相等去做join,这样就能限定在一个库上。还有一种是广播表,join的字段不一样,但是每个表都带上分库的条件,这样还是会限定在同一个库里面。

EasyDB:数据库自动化管理平台

资源:实时监控数据库和服务器空间的使用状态。

高可用:云上高可用架构设计,故障自动切换。

备份:定期的数据库全量,增量备份,可灵活配置。

监控:异常情况下自动捕获和告警,支持短信,邮件和微信通知。

性能:超过50个指标性能趋势和SQL采集,实时监控数据库的运行状态。

日志:数据库错误日志采集。

安全:数据库账号和操作的审计,基于服务器的安全设计。

我今天的分享就到这里,谢谢大家!

转载地址:http://mdjyx.baihongyu.com/

你可能感兴趣的文章
深入理解浏览器的缓存机制
查看>>
微软向Linux社区开放60000多项专利:对开源微软是认真的
查看>>
Hoshin Kanri在丰田的应用
查看>>
又拍云沈志华:如何打造一款安全的App
查看>>
克服大数据集群的挑战
查看>>
PostgreSQL并发控制(MVCC, 事务,事务隔离级别)
查看>>
12月19日一周一次【Python基础语法】
查看>>
DM***的第二阶段OSPF
查看>>
python socket编程
查看>>
20180702搭建青岛RAC记录
查看>>
安装部署TIDB分布式数据库
查看>>
Spring Security OAuth 实现OAuth 2.0 授权
查看>>
linux文件及简单命令学习
查看>>
dubbo源码分析-架构
查看>>
新 Terraform 提供商: Oracle OCI, Brightbox, RightScale
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
IT兄弟连 JavaWeb教程 JSP与Servlet的联系
查看>>
Windows phone 8 学习笔记
查看>>
linux并发连接数:Linux下高并发socket最大连接数所受的各种限制
查看>>
洛谷——P2176 [USACO14FEB]路障Roadblock
查看>>