大型网站架构演变和知识体系

news/2024/5/12 1:45:19/文章来源:https://blog.csdn.net/leicool_518/article/details/42260403


之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给想从事互联网行业的同学一点初步的概念,文中的不对之处也请各位多给点建议,让本文真正起到抛砖引玉的效果。

架构演变第一步:物理分离webserver和数据库
最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候 已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易出问题,于是进入了第一步演变阶段:将应用和数据库从物理上分离,变成了两台机器,这个时候技术上没有什么新的要求,但你发现确实起到效果了,系统又恢复到以前的响应速度了,并且支撑住了更高的流量,并且不会因为数据库和应用形成互相的影响。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
这一步架构演变对技术上的知识体系基本没有要求。

架构演变第二步:增加页面缓存
好景不长,随着访问的人越来越多,你发现响应速度又开始变慢了,查找原因,发现是访问数据库的操作太多,导致数据连接竞争激烈,所以响应变慢,但数据库连 接又不能开太多,否则数据库机器压力会很高,因此考虑采用缓存机制来减少数据库连接资源的竞争和对数据库读的压力,这个时候首先也许会选择采用squid 等类似的机制来将系统中相对静态的页面(例如一两天才会有更新的页面)进行缓存(当然,也可以采用将页面静态化的方案),这样程序上可以不做修改,就能够 很好的减少对webserver的压力以及减少数据库连接资源的竞争,OK,于是开始采用squid来做相对静态的页面的缓存。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
前端页面缓存技术,例如squid,如想用好的话还得深入掌握下squid的实现方式以及缓存的失效算法等。

架构演变第三步:增加页面片段缓存
增加了squid做缓存后,整体系统的速度确实是提升了,webserver的压力也开始下降了,但随着访问量的增加,发现系统又开始变的有些慢了,在尝 到了squid之类的动态缓存带来的好处后,开始想能不能让现在那些动态页面里相对静态的部分也缓存起来呢,因此考虑采用类似ESI之类的页面片段缓存策略,OK,于是开始采用ESI来做动态页面中相对静态的片段部分的缓存。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
页面片段缓存技术,例如ESI等,想用好的话同样需要掌握ESI的实现方式等;

架构演变第四步:数据缓存
在采用ESI之类的技术再次提高了系统的缓存效果后,系统的压力确实进一步降低了,但同样,随着访问量的增加,系统还是开始变慢,经过查找,可能会发现系 统中存在一些重复获取数据信息的地方,像获取用户信息等,这个时候开始考虑是不是可以将这些数据信息也缓存起来呢,于是将这些数据缓存到本地内存,改变完毕后,完全符合预期,系统的响应速度又恢复了,数据库的压力也再度降低了不少。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
缓存技术,包括像Map数据结构、缓存算法、所选用的框架本身的实现机制等。

架构演变第五步: 增加webserver
好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver,这也是为了同时解决可用性的问题,避免单台的webserver down机的话就没法使用了,在做了这些考虑后,决定增加一台webserver,增加一台webserver时,会碰到一些问题,典型的有:
1、如何让访问分配到这两台机器上,这个时候通常会考虑的方案是Apache自带的负载均衡方案,或LVS这类的软件负载均衡方案;
2、如何保持状态信息的同步,例如用户session等,这个时候会考虑的方案有写入数据库、写入存储、cookie或同步session信息等机制等;
3、如何保持数据缓存信息的同步,例如之前缓存的用户数据等,这个时候通常会考虑的机制有缓存同步或分布式缓存;
4、如何让上传文件这些类似的功能继续正常,这个时候通常会考虑的机制是使用共享文件系统或存储等;
在解决了这些问题后,终于是把webserver增加为了两台,系统终于是又恢复到了以往的速度。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
负载均衡技术(包括但不限于硬件负载均衡、软件负载均衡、负载算法、linux转发协议、所选用的技术的实现细节等)、主备技术(包括但不限于ARP欺骗、linux heart-beat等)、状态信息或缓存同步技术(包括但不限于Cookie技术、UDP协议、状态信息广播、所选用的缓存同步技术的实现细节等)、共享文件技术(包括但不限于NFS等)、存储技术(包括但不限于存储设备等)。

架构演变第六步:分库
享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的 资源竞争非常激烈,导致了系统变慢,这下怎么办呢,此时可选的方案有数据库集群和分库策略,集群方面像有些数据库支持的并不是很好,因此分库会成为比较普遍的策略,分库也就意味着要对原有程序进行修改,一通修改实现分库后,不错,目标达到了,系统恢复甚至速度比以前还快了。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
这一步更多的是需要从业务上做合理的划分,以实现分库,具体技术细节上没有其他的要求;
但同时随着数据量的增大和分库的进行,在数据库的设计、调优以及维护上需要做的更好,因此对这些方面的技术还是提出了很高的要求的。

架构演变第七步:分表、DAL和分布式缓存
随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作,当然,这不可避免的会需要对程序 进行一些修改,也许在这个时候就会发现应用自己要关心分库分表的规则等,还是有些复杂的,于是萌生能否增加一个通用的框架来实现分库分表的数据访问,这个在ebay的架构中对应的就是DAL,这个演变的过程相对而言需要花费较长的时间,当然,也有可能这个通用的框架会等到分表做完后才开始做,同时,在这个阶段可 能会发现之前的缓存同步方案出现问题,因为数据量太大,导致现在不太可能将缓存存在本地,然后同步的方式,需要采用分布式缓存方案了,于是,又是一通考察和折磨,终于是将大量的数据缓存转移到分布式缓存上了。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
分表更多的同样是业务上的划分,技术上涉及到的会有动态hash算法、consistent hash算法等;
DAL涉及到比较多的复杂技术,例如数据库连接的管理(超时、异常)、数据库操作的控制(超时、异常)、分库分表规则的封装等;

架构演变第八步:增加更多的webserver
在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势 了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢,这还好办,一般来说,这个时候也会有些钱了,于是添加一些webserver服务器,在这个添加 webserver服务器的过程,有可能会出现几种挑战:
1、Apache的软负载或LVS软负载等无法承担巨大的web访问量(请求连接数、网络流量等)的调度了,这个时候如果经费允许的话,会采取的方案是购 买硬件负载,例如F5、Netsclar、Athelon之类的,如经费不允许的话,会采取的方案是将应用从逻辑上做一定的分类,然后分散到不同的软负载集群中;
2、原有的一些状态信息同步、文件共享等方案可能会出现瓶颈,需要进行改进,也许这个时候会根据情况编写符合网站业务需求的分布式文件系统等;
在做完这些工作后,开始进入一个看似完美的无限伸缩的时代,当网站流量增加时,应对的解决方案就是不断的添加webserver。
看看这一步完成后系统的图示:

这一步涉及到了这些知识体系:
到了这一步,随着机器数的不断增长、数据量的不断增长和对系统可用性的要求越来越高,这个时候要求对所采用的技术都要有更为深入的理解,并需要根据网站的需求来做更加定制性质的产品。

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

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

相关文章

数据分析网站-竞品分析数据来源

产品汪经常需要做竞品分析,要用到许多专业的图表和数据。数据从何而来?需要我们利用专业的数据研究网站来搜集。 常用的数据搜集网站: 1.百度指数 网址:http://index.baidu.com/ 主要功能: 指数探索:趋…

DDoS高防教你如何防御网站DDoS攻击

DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务” 分布式拒绝服务攻击可以使很多的计算机在同一时间遭受到攻击,使攻击的目标无法正常使用,分布式拒绝服务攻击已经出现了很多年了,导致很多的大型网站都出现…

网站被CC或者DDOS攻击怎么办?

网站为什么会遭遇DDos攻击或CC攻击? 网站之所以会遭受DDos攻击和CC攻击,主要因素是来自于同行的竞争激烈,一些非法同行采用极端激进的竞争方式,往往会雇佣网络一些具有一定技术的程序人员恶意攻击,雇佣价格不高&#…

网站被黑客攻击怎么办?

什么是网站被黑?一般来说,我们所谈论的网站都被黑客入侵,这意味着黑客利用网站背景中的一些程序漏洞进行攻击。他们会在我们的网站上添加很多垃圾页面。当您检查包含某个网站时,如果该网站被黑客攻击,则会显示一些内容…

记一次网站被攻击

很久没有上自己以前的博客网站,今天上去看了一下,发现页面布局有点错位,页面上的所有链接,无论url是什么,所跳转的页面都是首页的内容,使用浏览器查看了网页源码,发现被插入了一些meta头信息&am…

Nginx配置SSL证书部署HTTPS网站

一、什么是 SSL 证书,什么是 HTTPS SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现: 1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安…

云服务器网站打开速度过慢,如何进行自检

近年来,越来越多企业青睐云服务器,云服务商也发展的如火如荼。但对于客户来说,在使用云服务器的过程中,会出现网络访问速度缓慢的情况,为何会出现这种情况,如何解决呢,群英来给大家分析下。 1.先…

如何有效防御网站被CC攻击

对于新站长来说,对CC攻击可能比较陌生,那么什么是CC攻击,如何有效防御网站被CC攻击?网络攻击中常见的是:DDoS攻击、CC攻击,其中危害大且难防范的是DDoS攻击,而CC攻击是DDOS的一种,也…

影响网站页面浏览量的因素有哪些

网站页面浏览量的多少能直观反映一个页面受用户欢迎的程度,而且还会和网站的转化率挂钩。一个好的页面能更好的吸引用户浏览下去,所以很多公司都会比较重视这一点,那么我们该如何去更好的提升页面的浏览量呢?小编来做如下几点的分…

预防网站被攻击的5种方法,看过来

随着云计算的快速发展,同行之间的竞争也日趋激烈,网络安全也越来越受到大家的重视。针对愈加猖獗的网络安全问题,如何进行有效的预防呢?接下来,群英来给大家说说这5种方法吧。 1.使用具有高防御能力的服务器&#xff…

网站中木马病毒了怎么办

不少站长们辛辛苦苦的创建了一个网站,却由于安全维护措施做的不到位,最终导致网站中木马病毒,网站被跳转或无法打开等棘手情况,或点击进去是杂七杂八的灰色网站。若处理不及时,容易受到搜索引擎的惩罚,如官…

用云服务器建站的几个好处,你知道多少

部分站长或小公司的老板普遍认为,个人建站的网站如果用云服务器过于浪费了,毕竟只是一个展示型的网站或者只是用来学习网络技术这方面的知识,没必要用质量好的云服务器。其实他们忽略了2个比较重要的因素,1是性价比,2是…

基于scrapy对网站的图片进行爬取

创建项目的过程我们这里就不讲了,上一篇讲了 ImagesPipeline特点: 将下载图片转换成通用的JPG和RGB格式 避免重复下载 缩略图生成 图片大小过滤 这里我直接给大家看一下,项目的目录结构 在爬取之前我们需要将settings里面的数据修改一…

USGS,ASF网站上传矢量范围失败解决办法

最近需要用国外网站下载数据,但是手绘的矢量范围不精确,有时候可能数据覆盖不全,这里想写一下怎么做才能找到一个精准的范围,很多博客都是说导入矢量,但是有时候自己的矢量边界拐点比较多的时候,导入下载页…

一天一个爬虫练习,今天爬取 瑞文文摘网站

import requests #自动爬去html页面,自动请求网络提交 from bs4 import BeautifulSoup #解析HTML/XMl页面,提取数据或信息#模拟浏览器访问 headers {User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chro…

网站如何识别 你是 selenium爬虫?那我们怎么解决(反反爬)

我们经常会拿selenium进行自动登录来搭建cookie池,对于不想自己网站被爬的站主/开发人员来说,防止自动化脚本操作网站自然是反爬必须要做的工作。那么,他们究竟有哪些手段来检测用户是否是selenium呢?今天就来总结一下常见的识别s…

Django 统计网站访问次数、访问 ip 、访问端点及次数

个人博客:http://www.iamnancy.top 有时候写完博客,想知道网站每天的访问量,都有哪些人访问,都是来自什么地方的访客,都访问了哪些端点。 效果如下: 编写 blog/models.py # 访问网站的 ip 地址、端点和…

如何给网站安装SSL证书(https)-详解

什么是ssl证书? SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。 SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发&am…

一个免费帮助数百万成年人过渡到科技行业的学习网站

​ 哈喽,大家好,我是指北君。 看到这篇文章,恭喜你发现了一个宝藏开源项目!大家是不是也很羡慕程序员的高工资,对编程世界有着一些好奇,可自己却不知道如何开始?那今天指北君给大家推荐一个学…

使用阿里云服务器三分钟搭建网站

目录 一、购买服务器 二、 配置云服务器 三、下载XShell编辑器 四、使用XShell与服务器建立连接 五、安装宝塔 六、配置宝塔 七、配置多个站点 一、购买服务器 注意一定要购买CentOS内核的服务器 二、 配置云服务器 购买云服务器之后,可以修改实例密码 然后…