• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql在大型网站的应用架构演变

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,mysql架构演变等相关知识,希望本文的分享对您有所帮助
本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变

  可扩展性

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

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

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

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

  可扩展性的理想状态

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

 架构的演变

  V1.0 简单网站架构

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

2087.jpg

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

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

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

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

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

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

  V2.0 垂直拆分

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

2088.jpg

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

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

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

  V3.0 主从架构

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

2089.jpg

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

  1.写入量主库不能承受

  V4.0 水平拆分

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

2090.jpg

 数据如何路由?

  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的情况

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05[转]NoSQL数据库的分布式算法
  • 2018-12-05MySQL单机多实例分享
  • 2018-12-05 Redis学习笔记-List数据类型
  • 2017-05-11不重启Mysql修改root密码的方法
  • 2018-12-05详解MySQL5.7主从配置的实例代码
  • 2018-12-05请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write
  • 2018-12-05SQL Transcation的一些总结分享
  • 2018-12-05Redis中整数小集合
  • 2018-12-05Sql Server 索引使用情况及优化的相关Sql语句分享
  • 2018-12-05有用的SQL语句(删除重复记录,收缩日志)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 如何写一个属于自己的数据库封装(2)
    • oracle to_char函数将number转成string
    • 一个单引号引发的MYSQL性能问题分析
    • SQL2005学习笔记 EXCEPT和INTERSECT运算符
    • SQLServer 中的死锁说明
    • MySQL ALTER语法的运用方法
    • MSSQL2000安全设置图文教程
    • MySQL修改root密码的一些方法
    • mysql having
    • Oracle对两个数据表交集的查询

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有