0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

干货:20个MySQL开源数据库架构设计原则

如意 来源:数据库开发 作者:佚名 2020-08-28 10:57 次阅读

开源数据库架构设计原则

01. 技术选型

选择成熟的平台和技术,同时是最熟悉的,能做到极致的,用好不用坏,用熟不用生。目前业界的MySQL主流分支版本有Oracle官方版本的MySQL、Percona Server、MariaDB。

02. 高可用选择

高可用解决方案探讨的本质上是低宕机时间解决方案,可以理解成高可用的反面是不可用,绝大部分情况下数据库宕机才会导致数据库不可用。随着技术发展,开源数据库方面很多高可用组件(主从复制、半同步、MGR、MHA、Galera Cluster),对应场景,只有适合的,没有万能的,需要理解每个高可用优缺点。

03. 表设计

表设计方面目前一致坚持和提倡的原则:

单表数据量

所有表都需要添加注释,单表数据量建议控制在 3000 万以内

不保存大字段数据

不在数据库中存储图片、文件等大数据

表使用规范

拆分大字段和访问频率低的字段,分离冷热数据

单表字段数控制在 20 个以内

索引规范

1.单张表中索引数量不超过 5 个

2.单个索引中的字段数不超过 5 个

3.INNODB 主键推荐使用自增列,主键不应该被修改,字符串不应该做主键,

如果不指定主键,INNODB 会使用唯一且非空值索引代替

4.如果是复合索引,区分最大的字段放在索引前面

5. 避免冗余或重复索引:合理创建联合索引(避免冗余)

6. 不在低基数列上建立索引,例如‘性别’

7. 不在索引列进行数学运算和函数运算

字符集utf8mb4(偏生字,表情符)

04. 优化原则

05. 复制方式

MySQL复制方式提供异步方式、半同步方式、全局事务强一致性、binglog同步。需要不同业务系统间 或 两个数据库间进行同步。异步方式可以防止故障和效率问题的蔓延,扩大化;但强一致性会更复杂,并发、事务大小都有求限制。

06. 分离原则

区分核心的业务,重要业务,渠道,内部业务的业务系统,对不同的系统设置不同的架构。为核心业务设置 最佳为分库,多活 专用高速公路,其他业务可以做读写分离,缓存。

07. 扩展性

对于系统来说扩展性很重要,尽量做到水平扩展。避免过度依赖纵向扩展,同时具备纵向,横向扩展的能力,例如无状态应用应该多套负载均衡多活部署,数据库分库架构。

08. 读写分离

读多写少场景(10%写 90%读)

复制存在延迟,业务对延迟不敏感的

实现方式:

1. 通过应用代码配置读写分离,

2. 通过中间代理方式路由只读库 &

3. 业务和数据库为一个单位

09. 分库分表

当表中数据记录的数量超过3000万条,再好的索引也已经不能提高数据查询的速度,这时需要将表拆分成更多的小表,增加性能,增加弹性,避免发生垮库进行操作。

引入中间价要考虑性能代价,聚合需求。

分库原则尽量在app 上层进行分库,就是流量。

分多少合适:可用性和性能满足TPS。

路由:写入配置文件 或则 插表 或则 zookeeper。

10. 归档原则

历史数据定期进行归档 或则 移到其他大数据平台。能让轻量级数据库更多缓存有用的数据。

在MySQL分区表里 注意要避免分区锁,只能写读的场景。

11. 连接池的要求

长链接,自动重链,延时和异常记录, 弹性链接,检测满,异常告警,进阶要求

是记录所有访问情况,可以扩展出很多能力。

应用和数据库连接池设置,数据库允许的连接数设置,常见问题。

A )应用的数据库连接池设置偏小,一旦数据库相应慢(新上线应用,缺少索引 等)则应。

用排队严重,甚至雪崩,而遗憾的是数据库能力还远为用尽。

B )不具备失效及时发现和重新链接数据库能力。

C )隔离级别设置:RR 和 RC下不同的表现。

12. 应用解耦

通过应用访问数据库而不是直接访问,重要业务不能依赖低保障级别的系统,应用层重要业务和普通业务解耦,关键业务要独立。

13. 组件失效免疫能力

单一应用,单一硬件,甚至单一基础设施,单一站点容灾,业务影响,故障恢复能力,要季度级别进行演练。

14. 关键词组件减负

特别是数据库访问,数据库成本最高,扩展性最难,可用性保障最难,恢复难度和时间最大。

减负:能不用就不用,使用最简单,成本最低的语句,避免大事务,慎用两阶段事务。

15. 灰度数据库

减少发布时变更数据库对全局的影响,只有应用程序灰度是不够的,还要有专门的灰度数据库。在分库、读写分离架构下,一套含数据库的完整应用架构,变的很自然。

所为灰度环境就是生产环境,生产数据,所影响的也是生产环境,只是范围比测试环境更广,更真实。其实就是小范围的生产环境。类似于游戏内测。

16. 高仿真架构体系

建立高仿真架构体系

数据库,操作系统升级:应用是否适应,性能会变好, 还是变坏

应用上线发布,系统变更(列如换平台),提前判断业务影响和性能瓶颈

应对突发交易量,例如双十一,性能极限在哪里,瓶颈在哪里。

17. 容灾保障

高可用是运维核心要求,容灾是最后屏障

例如 双活比单活好,MGR比复制架构好,重要系统要做好高可用,容灾建设。

18. 多中心建设

冗余是基础,多中心建设是为了提升容灾能力和扩展能力,并保障业务。

19. 应用和数据库是一个整体

应用和运维人员一起,解决应用解耦,数据库解耦,追账补数,业务监控,应用路由,故障切换等。可用性,效率,故障恢复等方面都要一起参与。

20. 性能提升

开源数据库使用应该合理且有效的结合周边的其他类型数据库,做到性能最大化。比如:Redis、MongoDB、ES、ClickHouse等。

总结

1. 最适合的架构是结合软件特性和业务场景,又能取得成本收益平衡;

2. 大数据情况下可以是利用读写分离、分库分表,但要选择合适的;

3. 不适合分库的应该考虑竭尽所能把核心库做小,然后通过垂直扩展来扩容;

4. 用尽各种技术, 高可用 和 容灾手段保证其可用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3792

    浏览量

    64339
  • MySQL
    +关注

    关注

    1

    文章

    804

    浏览量

    26519
  • 系统架构
    +关注

    关注

    1

    文章

    69

    浏览量

    23528
收藏 人收藏

    评论

    相关推荐

    干货分享:MySQL零基础入门视频教程!

    维工程师的一分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。数据库工程师的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。今天在这里给大家分享一
    发表于 06-22 14:22

    干货:38MySQL数据库的必备知识和小技巧

    干货:38MySQL数据库的必备知识和小技巧
    的头像 发表于 08-31 13:08 2392次阅读

    Mysql和Oracle数据库之间的误区

    Mysql 和Oracle 在开发中的使用是随处可见的,那就简单去了解一下这俩款火的不行的数据库。 本质区别: Oracle数据库是一对象关系数据
    的头像 发表于 11-13 09:35 1902次阅读
    <b class='flag-5'>Mysql</b>和Oracle<b class='flag-5'>数据库</b>之间的误区

    华为云数据库-RDS for MySQL数据库

    (for MySQL)为辅。 MySQL数据库是全球最受欢迎的一种数据库,它是属于 Oracle旗下的一款产品,MySQL是一种关系型
    的头像 发表于 10-27 11:06 1509次阅读

    华为云数据库\-GaussDB for MySQL数据库

    华为云更可靠,技术强、创新快、资源多的特点。华为云采用了最新的DFV分布式存储技术,架构方面使用了计算存储分离架构,存储还最高支持128TB的海量存储,可以实现超百万级QPS吞吐,还支持跨AZ部署,故障秒级切换,既拥有商业数据库
    的头像 发表于 10-27 14:56 1249次阅读

    MongoDB开源文档数据库的安装

    MongoDB开源文档数据库。它属于一称为NoSQL的数据库家族,它与传统关系型基于表的SQL数据库不同,如
    的头像 发表于 12-06 17:00 1088次阅读

    基于树莓派的开源库存管理系统和MySQL数据库

    我准备使用 Raspberry Pi 设置一用 PHP 编写的开源库存管理系统和 MySQL 数据库。用 PHP 编写的带有 MySQL/
    发表于 12-19 16:58 0次下载

    MySQL数据库服务器、数据库和表之间是什么关系

    数据库服务器:MySQL安装后,会成为一windows服务,这个windows服务可以看做是数据库服务器。用CMD登录MySQL,此时CM
    的头像 发表于 01-31 14:59 1201次阅读
    <b class='flag-5'>MySQL</b><b class='flag-5'>数据库</b>服务器、<b class='flag-5'>数据库</b>和表之间是什么关系

    MySQL数据库管理与应用

    MySQL数据库管理与应用 MySQL是一种广泛使用的关系型数据库管理系统,被认为是最流行和最常见的开源
    的头像 发表于 08-28 17:15 966次阅读

    mysql是一什么类型的数据库

    强、易于使用和管理。在本文中,我们将详尽、详实、细致地介绍MySQL的功能、优势、架构、语法等方面。 一、MySQL的功能: 数据库管理:MySQL
    的头像 发表于 11-16 14:43 1757次阅读

    数据库mysql基本增删改查

    MySQL是一种开源的关系型数据库管理系统,常用于Web应用程序的数据存储和管理。通过使用MySQL,用户可以进行
    的头像 发表于 11-16 16:35 1500次阅读

    MySQL数据库基础知识

    MySQL 是一种开源的关系型数据库管理系统,它是目前最流行的数据库之一。MySQL 提供了一种结构化的方法来管理大量的
    的头像 发表于 11-21 11:09 968次阅读

    mysql数据库基础命令

    MySQL是一流行的关系型数据库管理系统,经常用于存储、管理和操作数据。在本文中,我们将详细介绍MySQL的基础命令,并提供与每个命令相关
    的头像 发表于 12-06 10:56 572次阅读

    mysql怎么新建一个数据库

    mysql怎么新建一个数据库 如何新建一个数据库MySQL中 创建一个数据库MySQL中的基
    的头像 发表于 12-28 10:01 881次阅读

    数据库数据恢复—Mysql数据库表记录丢失的数据恢复流程

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、
    的头像 发表于 12-16 11:05 70次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—<b class='flag-5'>Mysql</b><b class='flag-5'>数据库</b>表记录丢失的<b class='flag-5'>数据</b>恢复流程