MySQL架构由小变大的演变过程

假设一个网站(discuz)从最开始访问量很小做到日pv千万,我们来推测一下它的mysql服务器架构演变过程。

第一阶段
    网站访问量日pv量级在1w以下单台机器跑web和db,不需要做架构层调优(比如,不需要增加memcached缓存)。此时,数据往往都是每日冷备份的,但有时候如果考虑数据安全性,会搭建一个mysql主从。

第二阶段
    网站访问量日pv达到几万。此时单台机器已经有点负载,需要我们把web和db分开,需要搭建memcached服务作为缓存。也就是说,在这个阶段,我们还可以使用单台机器跑mysql去承担整个网站的数据存储和查询。如果做 MySQL 主从,目的也是为了数据安全性。

第三阶段
    网站访问量日pv达到几十万。单台机器虽然也可以支撑,但是需要的机器配置要比之前的机器好很多。如果经费允许,可以购买配置很高的机器来跑mysql服务,但是并不是说,配置翻倍,性能也翻倍,到了一定阶段配置增加已经不能带来性能的增加。所以,此阶段,我们会想到做mysql服务的集群,也就是说我们可以拿多台机器跑MySQL。但,MySQL的集群和web集群是不一样的,我们需要考虑数据的一致性,所以不能简单套用做web集群的方式(lvs,nginx代理)。可以做的架构是,mysql主从,一主多从。为了保证架构的健壮和数据完整,主只能是一个,从可以是多个。

还有一个问题,我们需要想到,就是在前端web层,我们的程序里面指定了MySQL机器的ip,那么当mysql机器有多台时,程序里面如何去配置?discuz,其实有一个功能,支持MySQL读写分离。即,我们可以拿多台机器跑MySQL,其中一台写,其他多台是读,我们只需要把读和写的
IP 分别配置到程序中,程序自动会去区分机器。当然,如果不使用 discuz 自带的配置,我们还可以引用一个软件叫做 mysql-proxy, 使用他来实现读写分离。它支持一主多从的模式。

第四阶段
    网站访问量日pv到几百万。之前的一主多从模式已经遇到瓶颈,因为当网站访问量变大,读数据库的量也会越来越大,我们需要多加一些从进来,但是从的数量增加到数十台时,由于主需要把bin-log全部分发到所有从上,那么这个过程本身就是一件很繁琐的事情,再加上频繁读取,势必会造成从上同步过来的数据有很大延迟。所以,我们可以做一个优化,把mysql原来的一主多从变为一主一从,然后从作为其他从的主,而前面的主只负责网站业务的写入,而后面的从不负责网站任何业务,只负责给其他从同步bin-log。这样还可以继续多叠加几个从库。

第五阶段
    网站访问量日pv到几千万的时候,我们发现,网站的写入量非常大,我们之前架构中只有一个主,这里的主已经成为瓶颈了。所以,需要再近一步做出调整。比如,我们可以把业务分模块,把用户相关的单独分离出来,把权限、积分等也可以分离出来单独跑一个库,然后再做主从,也就是所谓的分库。当然也可以换一个纬度,把访问量或者写入量大的表单独分离出来,跑在一台服务器上,也可以把一个表分成多个小表。这一步操作,涉及到一些程序上的改动,所以需要事先和开发同事做好沟通和设计。总之,这一步要做的就是分库分表

写在后面
    再往后发展,继续把大表分小表即可。
而国内阿里淘宝网站的数据量是巨量的,他们的数据库全部都是 MySQL,他们的 MySQL
架构就是遵循分库分表这个原则的,只不过他们划分规则会有很多纬度,比如可以根据地域划分,可以根据买家、卖家划分,可以根据时间划分等等。

本文转载自:http://www.cnblogs.com/liwei0526vip/p/6424605.html。

时间: 2024-08-10 02:00:10

MySQL架构由小变大的演变过程的相关文章

字母大变小,小变大

import java.util.Scanner; /** * 8.分析以下需求,并用代码实现: * 从键盘循环录入录入一个字符串,输入"end"表示结束 * 将字符串中大写字母变成小写字母,小写字母变成大写字母, * 其它字符用"*"代替,并统计字母的个数 * 键盘录入:Hello12345World * 输出结果:hELLO*****wORLD */public class Test08 { public static void main(String[] ar

如?何?屏?蔽?C?h?r?o?m?e?、?S?a?f?a?r?i?等?W?e?b?k?i?t?内?核?浏?览?器?文?本?框?和?文?本?域?的?高?亮?边?框?、?可?变?大?小?等?自?动?外?观?处?理

1.高亮外框的取消 input { outline: none; } textarea { outline: none; } 如上,使用CSS的outline就可以实现 2.文本域缩放功能的取消 也是使用CSS,具体有两种方法 textarea { width: 400px; max-width: 400px; height: 400px; max-height: 400px; 上面是限定最大宽度和高度(CSS2),这也是最容易想到的方法了 texearea { resize: none; }

javascript基础——文字变大变小className的使用及JS浮动的兼容用法

文字变大变小,详情页比较常见的那种 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文字放大缩小及className的使用</title> <style> #p1{ width: 960px;} .red ,.green{ width:400px; border:5px solid #333;

jQuery之实现页面字体变大、变小

转载请标明,http://www.gxabase.com jQuery之实现字体变大.变小,这在我们做网页的时候经常会使用的功能,以下为实现过程: 1.制作网页页面index.html,页面代码如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>jQuery training</title> <

js之图片变大变小效果

1.当鼠标移到图片上,图片变大:当鼠标移出图片,图片变小,效果如图: 2.原理不难,就是鼠标over时,设置一个定时器,让图片逐渐变大,鼠标out时同理,看下最初的简略代码你就会明白: <!DOCTYPE html> <html> <head> <style type="text/css"> div {     width: 200px;           /* 宽度 */     height: 100px;          /* 

简单几步教你如何将手机投屏到电视,1秒小屏变大屏

不知道大家有没有一种手机看电影,看视频,屏幕限制太大,总觉得好像少了点东西? 修姐,就是!总是赶紧我好像少看了一些画面,让你瞬间体会满屏的效果! 简单几步教你如何将手机投屏到电视,1秒小屏变大屏!高中之前一直看的电视,投影电影等:大学也是躺在宿舍用电脑刷剧:演变到现在基本上都是手机刷,电影院也是很少跑.可是手机屏幕还是太小了,很多画面看着总感觉不够震撼,少点感官需求! 但是把手机上的画面投到电视上,不论是看剧还是打游戏,那个体验一定是很爽!既享受到了手机的丰富资源和便利,又可以享受电视高清大屏的

mysql架构演变

假设一个网站(discuz)从最开始访问量很小做到日pv千万,我们来推测一下它的mysql服务器架构演变过程. 第一阶段网站访问量日pv量级在1w以下.单台机器跑web和db,不需要做架构层调优(比如,不需要增加memcached缓存).此时,数据往往都是每日冷备份的,但有时候如果考虑数据安全性,会搭建一个mysql主从. 第二阶段网站访问量日pv达到几万.此时单台机器已经有点负载,需要我们把web和db分开,需要搭建memcached服务作为缓存.也就是说,在这个阶段,我们还可以使用单台机器跑

数据库学习之--Oracle 架构与MySQL架构对比

数据库学习之--Oracle 架构与MySQL架构对比 一.Oracle .MySQL应用对比 如果要说明三者的区别,首先就要从历史入手. Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去.开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番. Oracle成立于1977年,早期的理论基础,反而来自于一篇IBM的论文<A

Mysql 架构和索引

字段类型选择慷慨是不明智的在相关的表中使用相同的数据类型,因为可能进行join选择标示符:整数通常是最佳选择,尽量避免使用字符串大致决定数据类型(数字,字符串,时间等)选择存储更小的类型,选择更简单的类型(如整数优于字符串),选择mysql内建时间类型而不是字符串,选择整数而不是字符串来保存IP尽量避免使用NULL:任何包含null值的列都将不会被包含在索引中.即使索引有多列这样之情况下,只要这些列中有一列含有null,该列就会从索引中排除.也就是说如果某列存在空值,即使对该列建索引也不会提高性