首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

数据裂变,数据库高可用架构设计实践

编程知识
2024年08月15日 07:00

相关文章

数据库系列:MySQL慢查询分析和性能优化
数据库系列:MySQL索引优化总结(综合版)
数据库系列:高并发下的数据字段变更
数据库系列:覆盖索引和规避回表
数据库系列:数据库高可用及无损扩容
数据库系列:使用高区分度索引列提升性能
数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL引擎MyISAM和InnoDB的比较
数据库系列:InnoDB下实现高并发控制
数据库系列:事务的4种隔离级别
数据库系列:RR和RC下,快照读的区别
数据库系列:MySQL InnoDB锁机制介绍
数据库系列:MySQL不同操作分别用什么锁?
数据库系列:业内主流MySQL数据中间件梳理
数据库系列:巨量数据表的分页性能问题
数据库系列: 主流分库分表中间件介绍(图文总结)

★ 针对常见的互联网业务场景进行数据库架构设计总结

1 先导

我们的系统会随着业务的膨胀而越发的复杂,数据基数也会越变得越来越大。
如何在数据变为巨量数据之后,依然保持强有力的稳定性和高效的性能,是系统架构的一个重要的目标,下面我们按照数据架构的演进来阐述变化过程。

2 演进

2.1 单体

一般是产品设计之初,或者试运行阶段。

image

最常见的架构设计如上:

  1. Service:服务层,对调用者提供优质的Rset或者RPC接口,同时能获取数据库数据
  2. DB:数据层,一般是单库,负责数据存储

2.2 冷热分离架构

历史数据访问频率比较低,可以放在独立的表或者库中。比如你的去年之前的朋友圈,当有需要的时候才回去翻阅。
但是最近一周内的朋友圈信息(无论是你的还是你朋友发的图文,都是热数据),为了性能,为了你的活跃数据的表更轻便一点,必然要做隔离。

image
架构如上:

  1. Service:服务层,对调用者提供良好的Rset或者RPC接口,同时能获取数据库数据
  2. DB-Cool:冷数据库,一般存放历史比较久远的数据,数据量庞大,能够忍受加载效率慢
  3. DB-Hot:热数据库,一般存近期活跃数据,数据量不会很庞大,加载效率高

2.3 读写分离架构

多读少些的场景已经形成了,大量的读操作影响到写数据的性能和稳定性了,为了解决【数据库读写高并发】 的问题而设计。
当然可引入缓存、消息队列等中间件支撑,咱们这边不提。

image

如上,这是最常见的1主N从,读写分离的数据库模式:

  1. Service:服务层,对调用者提供良好的Rset或者RPC接口,同时能获取数据库数据
  2. DB-M(master):主库,提供数据库写服务
  3. DB-R(replicate):从库,提供数据库读服务

它有如下特点:

  1. 1主n从,线性提升读的性能,当然n不是越多越好,也会有复制压力
  2. 主从之间通过binlog来进行写操作的replay,实现数据复制
  3. 主从之前的数据结构和数据结果完全一直,即使会有同步延迟,最终还是要一致的
  4. 注意写依然是单点,那是因为互联网业务中,高频写的热数据占比一般都是很低的

2.4 数据分片架构

典型sharding(水平拆分)方案。
水平拆分又分为库内分表和分库分表,来解决单表中数据量增长出现的压力,这些数据库中的表结构完全相同,我们这边按照分库分表来介绍。
image
架构如上:

  1. Service:服务层,对调用者提供良好的Rset或者RPC接口,同时能获取数据库数据
  2. DB-0、DB-2:数据按照分片进行还分,这边的例子每1KW存一个分片

水平分区的数据可以按照这5种策略隔离:

2.4.1 Hash(哈希)

这种策略是通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如我们可以建立一个对表的日期的年份进行分区的策略,这样每个年份都会被聚集在一个区间。

1 PARTITION BY HASH(YEAR(createtime))
2 PARTITIONS 10

image

2.4.2 Range(范围)

这种策略是将数据划分不同范围。例如我们可以将一个千万级别的表通过id划分成4个分区,每个分区大约250W的数据,超过750W后的数据统一放在第4个分区。

PARTITION BY RANGE(id) (
PARTITIONP0 VALUES LESS THAN(2500001),
PARTITIONP1 VALUES LESS THAN(5000001),
PARTITIONp2 VALUES LESS THAN(7500001),
PARTITIONp3 VALUES LESS THAN MAXVALUE
)

image

还有 Key(键值) 、List(预定义列表)、Composite(复合模式) ,请翻开我的这两篇文章:
MySQL全面瓦解28:分库分表
MySQL全面瓦解29:分库分表之Partition功能详解

2.4.3 解决什么问题?

  1. 数据库/数据表瘦身,提升读写性能
  2. 缩小故障影响范围(故障爆炸半径)

3 总结

  1. 产品发展初期,使用单库模式
  2. 部分数据写固化,读频率降低,使用冷热隔离架构
  3. 业务量扩大,多读少些占比重,使用读写分离的主从架构
  4. 数据基量膨胀,让检索不堪重负,使用分片(分库分表)架构
  5. 呀,不写了,去跑步咯
From:https://www.cnblogs.com/wzh2010/p/15886892.html
本文地址: http://shuzixingkong.net/article/1110
0评论
提交 加载更多评论
其他文章 Java 代码本地设置Hadoop用户名密码
本文简要介绍了Java 代码本地设置Hadoop用户名密码的两种方法,一种是使用Hadoop的API来设置用户名和密码,另外一种是使用Kerberos认证来连接Hadoop集群,第二种方法也是连接Hadoop集群的推荐方式。
Java抽象类和接口 小白版
什么是抽象 抽象就是从多个事物中将共性的,本质的内容抽象出来。 什么是抽象类 Java语言中,用abstract关键字修饰的类叫作抽象类。类本身是不存在的,所以抽象类无法创建对象无法实例化。 在面向对象领域,抽象类主要用来进行类型隐藏。 什么是抽象方法 抽象类中用关键字abstract修饰的方法叫做
上周热点回顾(8.5-8.11)
热点随笔: · 感谢「河南图奕网络」赞助园子,成为第一家创始赞助商 (博客园团队)· 小厂也是厂,3000我也干 (Java3y)· C#.Net筑基-解密委托与事件 (安木夕)· 莽撞闯荡
LeetCode39. 组合总和
LeetCode39. 组合总和 题目叙述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数
LeetCode39. 组合总和
《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一)
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与告警、数据服务、数据权限
《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一) 《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一) 《数据资产管理核心技术与应用》读书笔记-第四章:数据质量的技术实现(一)
如何在实验室信息管理系统实现不定行,不定列检测?
前言 实验室信息管理系统,即 LIMS(Laboratory Information Management System),它是由计算机和应用软件组成,能够完成实验室数据和信息的收集、分析、报告和管理。早期的 LIMS 系统大多基于计算机局域网,专门针对一个实验室的整体环境而设计,是一个包括了信号采
如何在实验室信息管理系统实现不定行,不定列检测? 如何在实验室信息管理系统实现不定行,不定列检测? 如何在实验室信息管理系统实现不定行,不定列检测?
Binance 如何使用 Quickwit 构建 100PB 日志服务(Quickwit 博客)
三年前,我们开源了 Quickwit,一个面向大规模数据集的分布式搜索引擎。我们的目标很宏大:创建一种全新的全文搜索引擎,其成本效率比 Elasticsearch 高十倍,配置和管理显著更简单,并且能够扩展到 PB 级别的数据。 https://quickwit.io/blog/quickwit-f
Binance 如何使用 Quickwit 构建 100PB 日志服务(Quickwit 博客) Binance 如何使用 Quickwit 构建 100PB 日志服务(Quickwit 博客) Binance 如何使用 Quickwit 构建 100PB 日志服务(Quickwit 博客)
《痞子衡嵌入式半月刊》 第 106 期
痞子衡嵌入式半月刊: 第 106 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回
《痞子衡嵌入式半月刊》 第 106 期 《痞子衡嵌入式半月刊》 第 106 期 《痞子衡嵌入式半月刊》 第 106 期