广告
返回顶部
首页 > 资讯 > 数据库 >Mysql在大型网站的应用架构演变
  • 292
分享到

Mysql在大型网站的应用架构演变

Mysql 2022-05-19 03:05:28 292人浏览 安东尼
摘要

 写在最前:   本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变   可扩展性   架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进

 写在最前:

  本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变

  可扩展性

  架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种

  Scale-up :  纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力

  Scale-out : 横向扩展,  通过加节点(机器)来实现伸缩,提升服务能力

  对于互联网高并发应用来说,无疑Scale out才是出路,通过纵向的买更高端的机器一直是我们所避讳的问题,也不是长久之计,在scale out的理论下,可扩展性的理想状态是什么?

  可扩展性的理想状态

  一个服务,当面临更高的并发的时候,能够通过简单增加机器来提升服务支撑的并发度,且增加机器过程中对线上服务无影响(no down time),这就是可扩展性的理想状态!

 架构的演变

  V1.0  简单网站架构

  一个简单的小型网站或者应用背后的架构可以非常简单,  数据存储只需要一个mysql instance就能满足数据读取和写入需求(这里忽略掉了数据备份的实例),处于这个时间段的网站,一般会把所有的信息存到一个database instance里面。

  在这样的架构下,我们来看看数据存储的瓶颈是什么?

  1.数据量的总大小  一个机器放不下时

  2.数据的索引(B+ Tree)一个机器的内存放不下时

  3.访问量(读写混合)一个实例不能承受

  只有当以上3件事情任何一件或多件满足时,我们才需要考虑往下一级演变。 从此我们可以看出,事实上对于很多小公司小应用,这种架构已经足够满足他们的需求了,初期数据量的准确评估是杜绝过度设计很重要的一环,毕竟没有人愿意为不可能发生的事情而浪费自己的经历。

  这里简单举个我的例子,对于用户信息这类表 (3个索引),16G内存能放下大概2000W行数据的索引,简单的读和写混合访问量3000/s左右没有问题,你的应用场景是否

  V2.0 垂直拆分

  一般当V1.0 遇到瓶颈时,首先最简便的拆分方法就是垂直拆分,何谓垂直?就是从业务角度来看,将关联性不强的数据拆分到不同的instance上,从而达到消除瓶颈的目标。以图中的为例,将用户信息数据,和业务数据拆分到不同的三个实例上。对于重复读类型比较多的场景,我们还可以加一层cache,来减少对DB的压力。

  在这样的架构下,我们来看看数据存储的瓶颈是什么?

  1.单实例单业务 依然存在V1.0所述瓶颈

  遇到瓶颈时可以考虑往本文更高V版本升级, 若是读请求导致达到性能瓶颈可以考虑往V3.0升级, 其他瓶颈考虑往V4.0升级

  V3.0  主从架构

  此类架构主要解决V2.0架构下的读问题,通过给Instance挂数据实时备份的思路来迁移读取的压力,在Mysql的场景下就是通过主从结构,主库抗写压力,通过从库来分担读压力,对于写少读多的应用,V3.0主从架构完全能够胜任

  在这样的架构下,我们来看看数据存储的瓶颈是什么?

  1.写入量主库不能承受

  V4.0  水平拆分

  对于V2.0 V3.0方案遇到瓶颈时,都可以通过水平拆分来解决,水平拆分和垂直拆分有较大区别,垂直拆分拆完的结果,在一个实例上是拥有全量数据的,而水平拆分之后,任何实例都只有全量的1/n的数据,以下图Userinfo的拆分为例,将userinfo拆分为3个cluster,每个cluster持有总量的1/3数据,3个cluster数据的总和等于一份完整数据(注:这里不再叫单个实例 而是叫一个cluster 代表包含主从的一个小mysql集群

 

  数据如何路由?

  1.Range拆分

  sharding key按连续区间段路由,一般用在有严格自增ID需求的场景上,如Userid, Userid Range的小例子:以userid 3000W 为Range进行拆分   1号cluster  userid 1-3000W  2号cluster  userid   3001W-6000W

  2.List拆分

  List拆分与Range拆分思路一样,都是通过给不同的sharding key来路由到不同的cluster,但是具体方法有些不同,List主要用来做sharding key不是连续区间的序列落到一个cluster的情况,如以下场景:
假定有20个音像店,分布在4个有经销权的地区,如下表所示:

地区

商店ID 号

北区

3, 5, 6, 9, 17

东区

1, 2, 10, 11, 19, 20

西区

4, 12, 13, 14, 18

中心区

7, 8, 15, 16

您可能感兴趣的文档:

--结束END--

本文标题: Mysql在大型网站的应用架构演变

本文链接: https://www.lsjlt.com/news/9384.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql在大型网站的应用架构演变
     写在最前:   本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变   可扩展性   架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进...
    99+
    2022-05-19
    Mysql
  • 一个成熟的大型网站系统架构演化过程
    这篇文章主要介绍“一个成熟的大型网站系统架构演化过程”,在日常操作中,相信很多人在一个成熟的大型网站系统架构演化过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”一个成熟的大型网站系统架构演化过程”的疑惑有所...
    99+
    2023-06-10
  • 大型网站的可伸缩性架构如何设计?
    1. 网站架构的伸缩性设计1.1. 不同功能进行物理分离实现伸缩纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。1.2. 单一功能通过集群规模...
    99+
    2023-06-02
  • 探究PHP trait DTO在大型系统中的应用架构
    摘要:随着大型系统的开发越来越复杂,代码的复用以及系统的可维护性变得越来越关键。PHP trait DTO是一种强大的工具,它在大型系统中的应用架构中起到了重要的作用。本文将会深入探究PHP trait DTO的应用架构,并提供具体的代码示...
    99+
    2023-10-21
    PHP dto trait 关键词:
  • 大型网站背后的高性能系统架构设计方法是什么
    本文小编为大家详细介绍“大型网站背后的高性能系统架构设计方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“大型网站背后的高性能系统架构设计方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 性能...
    99+
    2023-06-02
  • 使用Python的Flask框架构建大型Web应用程序的结构示例
    虽然小型web应用程序用单个脚本可以很方便,但这种方法却不能很好地扩展。随着应用变得复杂,在单个大的源文件中处理会变得问题重重。 与大多数其他web框架不同,Flask对大型项目没有特定的组织方式;应用程序...
    99+
    2022-06-04
    示例 应用程序 框架
  • 适用于大型web互联网项目的架构是怎样的
    本文小编为大家详细介绍“适用于大型web互联网项目的架构是怎样的”,内容详细,步骤清晰,细节处理妥当,希望这篇“适用于大型web互联网项目的架构是怎样的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。平台简介&nb...
    99+
    2023-06-03
  • 分布式架构真正适用于大型互联网项目的架构! dubbo+zookeeper+springmvc+mybatis+shiro+redis
    平台简介        Jeesz是一个分布式的框架,提供项目模块化、服务化、热插拔的思想,高度封装安全性的Java EE快速开发平台。...
    99+
    2022-10-18
  • 异步编程:大数据在ASP网站开发中的应用
    在当前大数据时代,对于ASP网站开发来说,如何高效地处理大数据是一个非常重要的问题。异步编程是一种解决方案,它可以在保证网站流畅运行的同时,处理大量数据。本文将介绍异步编程在ASP网站开发中的应用,并提供一些演示代码。 异步编程是什么? ...
    99+
    2023-11-07
    大数据 异步编程 http
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作