1.背景
2.大型网站的名称含义
1.pv PV=Page View(s),页面浏览量, 据说 某宝的日均PV 可以达到2亿;
2.UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内 相同的客户端只被计算一次。
3.IP(独立IP):即Internet Protocol,指独立IP数。00:00-24:00内相同IP地址之被计算一次。
3.大大型网站的特点
已我们常用的某宝为例:
1.高并发
2.流量大
3.高可用,7*24小时不间断服务
4.数据多
5.用户分布广(每个地区的网络环境不一样,使用的浏览器客户端也不一样)
6.容易遭受攻击(网站大了容易遭别人嫉妒)
7.更新迭代快,发布频繁
8.渐进式发展(从小网站做到大网站,并非一来就按照大网站的标准做)
4.如何从一个小网站架构发展到一个大型网站的架构
下面以某宝电商网站创业初期的网站发展为例,简单的说明
4.1.最省钱最简单的网站架构
公司创业起步的时候,用户少,订单少,最主要的是钱少,
所以从经济的角度出发,主要网站可以用就行了,这时候最最简单的架构就是
一台服务器,mysql数据库+最简单的ssm框架+vue前端,结构如下:
4.2.数据与应用服务器分开的架构
随着公司的发展,用户量逐渐增加,订单也越来越多,这个时候就有必要将数据与应用分开部署,架构如下
4.3.使用缓存降低数据库访问压力
公司继续发展,用户越来越多,产品订单也越来越多,用户在查询商品的时候可能出现查询慢的现象,
这时候我们可以使用缓存,将常用的数据放在缓存,从而大大降低数据库的压力,最常用的缓存就是Redis
4.4.应用服务器集群
公司继续发展,有了缓存,但是并发过高的时候,
一台应用服务器处理不了这么多的请求,怎么办勒,
那就多弄几台同时处理这样可以大大提高效率,架构如下:
4.5.像公交车上下门那样-数据库读写分离
公司再再再继续发展,
业务量越来越大,系统的瓶颈出现在了数据库上...
由于绝大部分的数据库都支持组从热备份,因此在架构设计上,我们可以采用读写分离的方式,架构如下:
4.6.使用CDN加速静态资源访问
公司再继续发展,
网站越做越大,功能也越来越多,
网站页面上的静态资源,如图片,js等也越来越多...
网站的用户分布也非常广....天南地北都有...
国内的网络信号也千差万别......
.....我到底想表达什么呢......如果用户在最南边那就访问最南边的静态资源服务器,这样就可以大大加快访问速度
即CDN的核心思想就是缓存静态资源,用户访问距离自己最近的CDN服务器,架构如下:
4.7.使用分布式数据库
公司继续发展
用户量越来越多..
业务数据也越来越多...
单个数据库很难存放所有的数据...
那么我们就需要分库分表....也就是传说中的分布式数据库
可以大体分为两类:
第一:按照业务分库,比如订单作为一个库,发货记录作为一个库,用户数据作为一个库
第二:单个表数据量过大,对于表可以安装时间维度地区维度等划分,比如某宝的订单了过大,单表很难存储,name我们可以每个月建立一个订单表,这就是按照月划分订单;
系统架构图如下:
4.8.使用搜索引擎
在数据量很大的情况下,
如果只是依赖sql语句要查询一条数据可能会非充慢,
又特别是关键字查询,如某宝上我们经常输入购买产品的关键字查询,
如果不使用搜索引擎,那么就必须使用like查询,like的使用会导致索引失效,那么查询速度会非常慢.
因此行业中经常使用搜索引擎来解决这个问题,常用的搜索引擎框架有lunce、solr、elasticsearch等...
系统架构如下:
4.9.根据业务拆分服务-形成分布式服务
网站在做到很大的情况下
每一个请求接口,或者说每一个业务都会有大量的请求
这时候我们通常会按照业务进行划分,
比如某宝,可以划分为登陆注册、首页、产品查询、订单、评论等产品业务线
不同业务线之间可以通过消息队列来做数据分发与共享
不同的产品业务线由不同的团队负责
网站架构如下:
5.总结
上一节中我们分析了一个小网站如何渐进式的发展成为一个大网站,
所有的网站结构必须依赖业务,也就是说要满足这样一条铁律:在能满足业务的情况下网站架构越简单越好!
完美!
参考:
《大型网站技术架构》 李智慧