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

news/2024/5/21 15:55:34/文章来源:https://cxydev.blog.csdn.net/article/details/102738641

点击上方 蓝字字体 加关注吧

作者:大熊先生

原文:http://www.cnblogs.com/Creator/p/3776110.html

作为最流行的开源数据库,MySQL被广泛应用在Web应用程序以及其它中小型项目上。然而不可忽视的是,在许多大型IT公司中,MySQL在高度优化和定制化后,已逐渐偏离了原有的开源版本,更像是一种分支,比如Facebook前不久开源的WebScaleSQL。下面是来自博主大熊先生的一篇文章:

写在最前可扩展性无疑Scale out才是出路,通过纵向的买更高端的机器一直是我们所避讳的问题,也不是长久之计,在scale out的理论下,可扩展性的理想状态是什么?可扩展性的理想状态能够通过简单增加机器来提升服务支撑的并发度,且增加机器过程中对线上服务无影响(no down time),这就是可扩展性的理想状态!架构的演变

V1.0  简单网站架构

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

640?wx_fmt=png在这样的架构下,我们来看看数据存储的瓶颈是什么?V2.0 垂直拆分

640?wx_fmt=png在这样的架构下,我们来看看数据存储的瓶颈是什么?V3.0  主从架构640?wx_fmt=png在这样的架构下,我们来看看数据存储的瓶颈是什么?V4.0  水平拆分

640?wx_fmt=png数据如何路由?1. Range拆分2. List拆分

假定有20个音像店,分布在4个有经销权的地区,如下表所示:640?wx_fmt=jpeg3. Hash拆分数据拆分后引入的问题:数据水平拆分引入的问题主要是只能通过sharding key来读写操作,例如以userid为sharding key的切分例子,读userid的详细信息时,一定需要先知道userid,这样才能推算出再哪个cluster进而进行查询,假设我需要按username进行检索用户信息,需要引入额外的反向索引机制(类似HBASE二级索引),如在redis上存储username->userid的映射,以username查询的例子变成了先通过查询username->userid,再通过userid查询相应的信息。在这样的架构下,我们来看看数据存储的瓶颈是什么?V5.0  云计算 腾飞(云数据库)  可配置性,可扩展性,多用户存储结构设计称为'three headed monster'。可配置性和多用户存储结构设计在Mysql saas这个问题中并不是特别难办的一件事情,所以这里重点说一下可扩展性。 1. 扩容缩容对前端APP透明(业务代码不需要任何改动);2. 扩容缩容全自动化且对在线服务无影响,那么他就拿到了作为Saas的门票。640?wx_fmt=png

对于架构实现的关键点,需要满足对业务透明,扩容缩容对业务不需要任何改动,那么就必须eat our own dog food,在你mysql saas内部解决这个问题,一般的做法是我们需要引入一个Proxy,Proxy来解析sql协议,按sharding key 来寻找cluster,判断是读操作还是写操作来请求主 或 从,这一切内部的细节都由proxy来屏蔽。

640?wx_fmt=jpeg扩容缩容全自动化且对在线服务无影响;扩容缩容对应到的数据操作即为数据拆分和数据合并,要做到完全自动化有非常多不同的实现方式,总体思路和V4.0介绍的瓶颈部分有关,目前来看这个问题比较好的方案就是实现一个伪装slave的sync slave,解析mysql同步协议,然后实现数据拆分逻辑,把全量数据进行拆分。具体架构见下图:

640?wx_fmt=jpeg需要扩容/缩容时,挂上一个Sync slave,开始全量同步+增量同步,等待一段时间追数据。以扩容为例,若扩容后的服务和扩容前数据已经基本同步了,这时候如何做到切换对业务无影响?其实关键点还是在引入的proxy,这个问题转换为了如何让proxy做热切换后端的问题。这已经变成一个非常好处理的问题了。甲骨文宣布推出MySQL Fabric,在对应的资料部分我也放了很多Fabric的资料,有兴趣的可以看看,说不定会是以后的一个解决云数据库扩容缩容的手段。V more ?等待革命...

淘宝用例

淘宝RDS 云数据库设计:http://blog.csdn.net/ywh147/article/details/8954625;http://www.infoq.com/cn/news/2012/10/taobao-ump        

MySQL  Fabric

  • http://mysqlmusings.blogspot.jp/2013/09/brief-introduction-to-mysql-fabric.html

  • http://vnwrites.blogspot.jp/2013/09/mysqlfabric-sharding-introduction.html

  • http://vnwrites.blogspot.in/2013/09/mysqlfabric-sharding-example.html

  • http://vnwrites.blogspot.in/2013/09/mysqlfabric-sharding-migration.html

  • http://vnwrites.blogspot.jp/2013/09/mysqlfabric-sharding-maintenance.html

640?

有热门推荐?

1.

2.

3.

4.

5.

关注 程序IT圈

640?wx_fmt=gif

觉得内容还不错的话,给我点个“在看”呗

640?wx_fmt=gif
640?wx_fmt=gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_763322.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作动态网站是什么专业_网站制作需要注意哪几点才叫专业呢

网站制作需要注意哪几点才叫专业呢? 网站制作不是一件容易的事,那我们应该如何进行网站制作呢?一、确立网站风格和主题 网站的风格和主题对一个网站来说是至关重要的,如果网站有好的主题,必定有很多的人浏览。如果你的…

教你使用nginx部署网站教程

点击上方 蓝色字体 ,选择 星标 公众号重磅资讯、干货,第一时间送达今日推荐:在坚持了15年后,我毅然决定离开 Linux,投入 Mac 的怀抱作者:小火柴的蓝色理想链接:www.cnblogs.com/xiaohuochai前面…

iis php 无法访问此网站_一般网站建设需要注意哪些重点要素?

一般一个普通网站建设的三个基本要素是:网站的源代码、网站的服务器空间、网站的域名注册。我们在建网站的时候,一般都是先注册一个域名,买一台服务器或者租一个虚拟主机空间,然后把域名存档,文件完成后再做域名解析。深圳网站建设…

weboffice 比较好的源码_源码网站和模板网站的区别

根据网站开发的方式,可以将网站分为源码网站和模板网站。源码网站就是指网站是全新开发的,全新设计,全新代码进行开发,而模板网站就相对简单,就是在模板的网站代码的基础上进行简单的修改和部署。对于很多客户来说&…

Google 开发的、最好用、功能最强大的网页测速与网站性能分析工具

https://www.webpagetest.org/细致到每一个资源的加载都是完全可视化,包含详细的数据分析。开发完成自己的网站后一定要进行一下测试,你会发现还有很多可以优化的点。 转载于:https://www.cnblogs.com/flms/p/9584980.html

仅花 2 小时,网站就搭建好了,贼溜 ~

大家好,我是编程君。 今天,推荐一个系统项目。我第一次使用就有点上头,爱不释手,必须要推荐给大家。 上次是谁要的系统项目啊,我帮你找到了。 这是我目前见过最好的系统项目。功能完整,代码结构清晰。值得推…

一个网站从0到1搭建部署上线的完整流程(包教包会)

前言:要买服务器,建议在双十一购买,价格比平时便宜10倍,今年阿里云双十一活动的2款服务器,都非常便宜,最低49元,就能购买1年,只限新用户 。感兴趣的朋友扫码购买正文有很多做网页的前…

为什么视频网站的视频链接地址是blob?

原文地址:https://juejin.im/post/5d1ea7a8e51d454fd8057bea来源:掘金作者:wangzy2019自从HTML5提供了video标签,在网页中播放视频已经变成一个非常简单的事,只要一个video标签,src属性设置为视频的地址就完…

多网站项目的 CSS 架构

原文地址:CSS Architecture for Multiple Websites原文作者:Elad Shechter译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:Baddyo校对者:xionglong58,lgh757079506复杂的 CSS…

Vue单页项目SEO完全指南

搜索引擎优化(Search engine optimization,简称SEO),指为了提升网页在搜索引擎自然搜索结果中(非商业性推广结果)的收录数量以及排序位置而做的优化行为,是为了从搜索引擎中获得更多的免费流量&…

把网站升级到http/2

为什么要升级到意思是说要使用http/2,我之前只是听过http/2的一些介绍,其实http/2已经来了。http/2最大的特点是使用多路复用,对同一个域的服务器只建立一次TCP连接,加载多个资源,使用二进制帧传输,同时会对…

宝塔面板 添加网站访问不了解决方案

1.如果是tp5 那么请你伪静态一下 代码如下 location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s$1 last; break; }} 转载于:https://www.cnblogs.com/roseY/p/9459160.html

从网站功能入手创建数据库

上一篇说了,这个网站会模仿B站的主要功能,通过对B站的功能分析,从中拆分出主要功能模块,分别创建数据库,并实现相关的功能。 先上一张网站首页,欣赏一番 可以明显的看到,网站首页非常明显的分成…

搭建自己的技术博客系列(五)hexo博客接入busuanzi插件,展示访问量和网站运行时间...

busuanzi计数脚本 busuanzi官方指引 一、安装脚本(必选) 要使用不蒜子必须在页面中引入busuanzi.js,目前最新版如下。 不蒜子可以给任何类型的个人站点使用,如果你是用的hexo,打开themes/你的主题/layout/_partial/foo…

建一个网站需要多少钱

很多第一次做网站的新手朋友都很关心建一个网站的费用和花销,但是需要明白,不同网站建设公司做同样一个网站,价格区别也是很大的,所以我们必须先掌握清楚网站主要费用构成。 下面先说一下网站固定价格组成: 1、网站域名…

大型网站架构演化(一)——初始阶段的网站架构

大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手。大型网站架构主要是解决这类问题。 大型网站都是从小型网站发展而来,网站…

大型网站架构演化(二)——应用服务和数据服务分离

随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器:应用服务器、文件服务器和数据库服…

大型网站架构演化(三)——使用缓存改善网站性能

网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。淘宝买家浏览的商品集中在少部分成交数多、评价良好的商品上;百度搜索关键词集中在少部分热门词汇上;只有经常登录的用户才会发微博、看微博,…

大型网站架构演化(四)——使用应用服务器集群改善网站的并发能力

使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型服务器而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,…

大型网站架构演化(五)——数据库读写分离

网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过…