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

news/2024/5/9 22:17:50/文章来源:https://blog.csdn.net/u012842630/article/details/100865282

  之前也有一些介绍大型网站架构演变的文章,例如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_773264.aspx

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

相关文章

网站整合QQ登录

QQ官方的解释其实有点纠结,但是提供的Demo还是比较清晰的,对一般有会员模块的网站来说,只要20来行代码就可以集成QQ登录功能参考QQ官方文档:http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91Qzone_OAuth%…

国内外大型SNS网站后台架构对比,互联网营销

要问时下什么类型的站点人气最旺?答案当属SNS网站。短短几年的时间,SNS便迅速确立了Web 2.0核心的地位。用户的增长量之快更是让人咂舌,而Facebook访问量首次超越Google的消息也让人觉得SNS的前途不可限量。当然,面对庞大且繁琐的…

[图表]全球100大博客网站中49%使用WordPress服务

北京时间4月12日消息,瑞典互联网市场研究公司Royal Pingdom最新调查结果显示,在全球100大博客网站中,49%都在使用 WordPress的托管服务,而三年前的比例为32%。 全球100大博客网站中49%使用WordPress服务 WordPress是全球知名的博客…

HTML5 网站大观:12个优秀的 HTML5 黑色风格网站设计

本期 HTML5 网站大观向大家分享12个精美的 HTML5 黑色风格网站设计作品欣赏。作为下一代网页语言,HTML5 加入众多的语义化标签,例如 video、audio、section、article、header、footer 和 nav 等,HTML5 正引领网页制作技术革命。希望下面清单中…

高考放榜季 | 知道创宇全方位保障教育政务网站安全可用

万众期待的高考放榜日到来,6月23日—26日全国高考成绩陆续揭榜。随着数字化信息化进程的加速,高考成绩查询途径已逐步采用考试院官方网站、公众号、电话、短信等多种形式。进而教育政务系统信息网络安全问题逐渐被重视起来,每年高考成绩的放榜…

“净网2021”关停网站6400余个 净网盾成内容管控利器

“净网”行动大力开展多家网站被约谈近日,全国“扫黄打非”办通报了“净网2021”专项行动查办的首批典型案件。截至目前,监管部门累计处置网络有害信息155万余条,取缔关闭非法网站6400余个,查办涉网“扫黄打非”案件960起。2021年…

企业官网、政府门户经常出现不良网站链?教你一招防治!

今年年初,某位武汉市民在浏览武汉港航发展集团(下称港发集团)官网时,点开了该集团旗下一家公司的链接,在首页下方“骨干企业”一栏中,点击了武汉新港建设投资开发集团有限公司(以下简称新港投集…

如何让用户放心浏览你的网站?服务器的这张“身份证”很重要

大家在浏览网页时,网址输入框里会有一个安全提示,明确表明该网址是否安全。如果网站不安全,会出现警告标识,提醒该网站具有高风险,建议关闭浏览。而安全的网址一般是以https开头,且有个带锁的小图标。那么&…

解决 任意浏览器 打开任意 https 网站 都提示:此网站的安全证书有问题

2019独角兽企业重金招聘Python工程师标准>>> 一句话,看看你的系统时间是不是不对,改回来就好了 转载于:https://my.oschina.net/lanybass/blog/94504

新增新闻媒体类网站检出能力|ScanA不良信息监测能力更新第11期

本周ScanA不良信息监测内容安全能力更新精彩推荐AI智能识图优化|ScanA不良信息监测能力更新第10期网页抓取性能再提升|ScanA不良信息监测能力更新第9期新增实时违规告警功能|ScanA 不良信息监测能力更新第8期如有ScanA相关业务需求请扫码获取…

网站瘫痪,颜面尽失?抗D保提供重保关基DDoS急救服务

// 近日,据环球网报道,黑客组织 KillNet 向日本宣战,连续两天对日本网络发动攻击,东京和大阪地铁网站原地瘫痪,日本 4 个省厅网络也无法访问,总务厅、文部科学省、数字厅、宫内厅网络都遭到了攻击。早在俄…

vue设置网站的标题和图标

实现效果如下图 编辑public/index.html文件

eeupdate使用说明_使用eeupdate修改重写IBM网卡MAC-BIOS维修网站www.biosrepair.com

IBM系列笔记本,在进行BIOS刷新操作时,有时会造成网卡的MAC地址丢失,即网卡的MAC地址,全部为00;此时电脑将无法进行网络通信,因此也就无法上网了;或者网友有特殊要求,需要修改原网卡的…

响应式HTML5+CSS3 网站开发测试实践

仅仅利用media query适配样式是远远不够的,并没有考虑触屏下的行为和特有的内容组织方式的不同。简单在桌面版基础上叠加mobile版的代码,会带来请求增多、流量、性能、代码冗余等诸多方面问题。有统计说86%的手机站看起来small其实体积比桌面版还大。 我…

构建动态网站 视频教程

2019独角兽企业重金招聘Python工程师标准>>> 1 第零讲 108分钟 2 第一讲 PHP 103分钟 3 第二讲 PHP(续) 101分钟 4 第三讲 XML …

网站或者api服务器,api服务器和web服务器

api服务器和web服务器 内容精选换一换调用接口出错后,将不会返回结果数据。调用方可根据每个接口对应的错误码来定位错误原因。 当调用出错时,HTTP请求返回一个 4xx 或 5xx 的HTTP状态码。返回的消息体中是具体的错误代码及错误信息。在调用方找不到错误…

html 优化速度,web前端html网站访问速度优化

web前端html网站访问速度优化,网站性能一般就指的是网站的访问速度,虽然很普通,但通过数据可以发现,网站速度对于用户体验的影响是相当巨大的,下面来研究下如何优化网站,使其下载速度更快的方法。首先检查一…

网站服务器需要备案,网站服务器需要备案

网站服务器需要备案 内容精选换一换域名注册(Domain Registration)是用户付费获取Internet上某一域名一段时间使用权的过程。华为云域名注册服务提供域名的注册、购买、实名认证以及管理功能。华为云的域名注册服务与新网合作,因此通过华为云注册的域名其注册商为新…

网站安全狗V3.5枸杞2版发布 解决优化多项问题

2019独角兽企业重金招聘Python工程师标准>>> 2015年8月27日,备受期待的网站安全狗V3.5枸杞2版正式发布。新版本补充之前V3.5枸杞1版的不足,同时新增了部分实用功能,解决了诸多历史遗留问题,更修复了近期网络上爆出的各…

web网站javascript前端加密,后端解密,防止明文传输

使用spring-boot项目写的demo,需要额外引入 security.js 用于js加密 bcprov-jdk16-146.jar 加密api 项目结构,代码已上传到CSDN资源库,需要的小伙伴可以下载,demo可直接运行 1.我是在项目启动时初始化公钥私钥,并放…