网站架构基础学习(详细)
1.网站架构的发展经历:
初始阶段的网站(特点:没人)应用程序,数据库,文件都在一个服务器中
比如我们学的是开发,我们要写一个网站,因为这是一个项目,
所以我们要把它部署一下,然后在淘宝买了一个域名,
然后部署到线上了(买了个服务器和租了个阿里云),
因为最初的网站没有人,
所以我们可以将应用程序apache和nginx,数据库,文件都在一个服务器上
就是我们熟知的lamp和lnmp 将所有东西部署在一台服务器上
Lamp :linux apache mysql php
Lnmp : linux nginx mysql php
随着你网站的人增多,当有1000个人10000个人的时候, (当访问的人多了)
一台服务器就抗不住了
应用服务和数据服务分离
随着网站业务的发展,一台服务器逐渐不能满足需求,性能越来越差,存储空间不足,
这就需要应用和数据分离
应用服务器
处理大量业务
需要更快更强的CPU
数据库服务器
需要快速的磁盘检索和数据缓存
需要更快的硬盘和更大的内存
文件服务器
需要大量用户上传文件
需要更大的硬盘
着三个本来在一块,但是为了满足实际需求,
我们需要将这三个应用分离在3个服务器上面,减轻服务器压力
再往上发展的时候我们还想进行优化
使用缓存改善网络性能
网站访问的特点和二八定律一样:
80%的业务访问集中在20%的数据上,所以如果把这一小部分数据缓存在内存中,
可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能
(内存不硬盘快很多)
- 网站使用的缓存可以分为两种:
- 缓存在应用服务器上的本地缓存
- 缓存在专门的分布缓存服务器上的远程缓存
本地缓存的访问快一些,
但受内存服务器的内存限制,缓存数据量有限
远程分布式缓存可以使用集群(多个)的方式(我们可以用很多台来进行缓存,一台8G内存,10台80G的内存),部署大内存的服务器作为专门的缓存服务器,
理论上做到不受内存容量的限制的缓存服务(钱没那么多)
缓存技术:
内容分发网络(CDN) 反向代理
本地缓存 分布式缓存
使用前提:
- 数据访问热点不均衡(如微博里的热点新闻和微博热搜,满足这两个条件)
- 是数据在某个时间段内有效
实际中我们可以本地缓存一些,再用使用远程分布式去缓存一些
使用应用服务器集群改善并发处理能力
使用缓存后,数据访问压力得到有效的缓解,
但是单一应用服务器能够处理的请求连接有限,
在网站高峰器,应用服务器成为整个网站的瓶颈,
使用集群是网站解决高并发,海量数据问题的常用手段,通过负载均衡调度服务器,
可将 来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多用户,
就是集群中加入更多的应用 服务器(再服务员),使应用服务器的负载压力不再成为整个网站的瓶颈
刚才实际中我们可以本地缓存一些,
再使用远程分布式去缓存一些
减轻了数据库服务器的压力(可以从内存中很快的给用户)
我们只有接收用户的请求才知道用户要什么
#负载均衡:
在已经有应用服务器的基础上
应用服务器是4个(没有标出)(服务员),有本地缓存和远程分布式缓存
负载均衡调试服务器 : 相当于门迎,来一个用户的请求,
根据我的排班规则将用户请求,把用户分布到不同的应用服务器
数据库的读写分离:
网站在使用缓存后,使绝大部分数据操作访问都可以不通过数据库就能完成,
但是仍有一部分操作(缓存访问不命中,缓过期)和全部的写操作(要改变硬盘)需要访问数据库,
在网站的用户达到一定规模后数据因为负载压力过高而成为网站的瓶颈,
目前大部分的主流数据都提供从主热备功能,通过配置两台服务器的主从关系,
可以将一台数据库服务器的数据更新到同步到另一台服务器上,
网站利用数据库的这一功能,实现数据库的读写分离,从而改善数据库负载压力
一主多从,一台写的多台读的,从库可以复制主库的数据
使用反向代理和CDN加速: 解决速度问题
随着网络不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,
速度差别也极大,为了提供更好的用户体验,留住用户,网站需要加速网站访问速度,主要手段有CDN的 反向代理
CDN的反向代理基本原理都是缓存,
区别在于CDN部署再网络供应商的机房,
反向代理则部署在网络的中心机房,
当用户请求到达中心机房后,
首先访问的服务器是CDN反向代理服务器,
如果反向代理中缓存这用户请求的资源,
就将其直接其返回给用户
如果我们要访问阿里的网络,阿里的中心机房在杭州,我们访问阿里网站来发送一个请求,
时的网络时阿里给我们共享出来的一个网关网络,和我们的网络不时同一个网络,我们把请求发到互联网上,
然后根据路由器的一跳一跳,找到杭州的服务器机房门口,杭州的访问快,西藏访问的慢
为了解决这个问题,就用到了CDN反向代理(原理是缓存),CDN是网络提供商的机房,就是电信和移动会构建CDN,
全国各地都能上网(电信移动这种基础运营商肯定是遍布全国各地),
所以我们可以把自己的数据放在电信移动铺设的这个网络平台里面,这样就快了
比如:
运营商会定期把用户可能经常访问的一些网站的logo,一些网站主页,交钱后把数据放在电信移动的机房中
我们用户通过CDN进来的时候,访问阿里百度端的中心机房的时候还是先访问的是CDN代理服务器
使用分布式文件系统和分布式数据库系统
任何强大的单一服务器都满足不了大型网站持续增长的业务需求,数据库经过读写分离后,
一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,
这时需要使用分布式数据库,文件系统也是一样,需要使用分布式文件系统
分布式数据库是网站数据库最后的手段,只有在单表规模非常大的时候才用,
不到不得已时才用,网站更常用的数据库拆分手段是业务分库,
将不同业务的数据库部署在不同的物理服务器上