WEB 架构的演变
WEB 架构的演变
分布式、集群我想大家都听说过,那么这个东西是怎么转换来的呢?
今天我们来聊一聊 WEB 架构的演变。
假如我们要搭建一个购物网站,最初我们只有一台服务器,很快我们发现服务器资源不够用,怎么办呢?
上我们的第一道菜: 物理分离 webserver 和数据库。
简单来说,就是将同一台服务器上的 webserver 和数据库分散到两台服务器。
然后上第二道菜:增加页面静态化(缓存)。
你想一下,用户访问我们的页面,如果每次访问要经常去查询数据库的话,这要消耗多少资源。所以我们要尽可能多静态页面,并将页面缓存。
接下来是第三道菜:增加页面动态缓存。
动态缓存有 asp(.Net)、jsp ( Java ) 这些东西。
用户访问这些页面,比如访问一个 jsp 页面,它是将 Java 代码翻译成 Html 页面。你想一想如果每次访问都要翻译一次,这对服务器资源的消耗比较大。所以要将其缓存,但是页面动态缓存和静态页面的缓存是不一样的,可以使用Freemarker
来处理。
我们再来看看第四道菜:增加数据缓存
就是将数据库查到的数据进行缓存。我们接下来简单说一下数据缓存。数据缓存可以使用redis
和memcache
。
我们要将百分百确定很多人会用的数据将其缓存。
再看看第五道菜:增加 webserver
增加了一台网站服务器就会发生这种情况:第一次登陆进入的是服务器 A,去数据库访问了一次,而第二次登陆进入的却是数据库 B,又得访问数据库。要想解决这个问题,我们就要使用memcache
,其实就是通过分布式 session 共享来实现。
其实这个就是负载均衡。
这是第六道菜:分库
如果数据库访问量大到一定程度,我们就要增加数据库,也就是分库。MySQL 本来就是支持分库的,就是使用 MySQL 主从架构。
然后第七道菜:分表、DAL 和分布式缓存
为什么要分表呢?因为一个表过大了会在某些操作时影响效率。
我们可以用 Hash 来进行分表。
有水平分表和垂直分表两种操作。
DAL 就是定义数据库分发请求规则。根据规则来存数据和取数据。
如果要缓存的数据量很大,我们就使用分布式缓存,用 redis 集群来缓存。
第八道菜:增加更多的 wbeserver
如果还不行,就继续增加 web 服务器吧。
第九道菜:数据读写分离和廉价存储方案
什么叫读写分离?我们数据库无非是两种操作,读和写。我们让主从分离的数据库中主数据库进行增删改,而从数据库进行查的时候多一点。
什么叫廉价的存储方案?其实就是一群小鱼吃大鱼。
再来看看最后一道菜:从需求层面进行拆分
如果还需要扩展应该怎么办呢?
我们就要熟悉业务逻辑,从需求层面上取拆分。
版权声明: 本文为 InfoQ 作者【Regan Yue】的原创文章。
原文链接:【http://xie.infoq.cn/article/5ce35dc21b2944c67c393278a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论