大型网站架构演化历程

news/2024/5/10 23:40:00/文章来源:https://blog.csdn.net/s2603898260/article/details/111012028

摘自《大型网站技术架构》:第一章 大型网站架构演化

目录

一、大型网站系统的特点

二、 大型网站架构演化发展历程

1. 初始阶段的网站架构

2. 应用服务和数据服务分离

3. 使用缓存改善网站性能

4. 使用应用服务器集群改善网站的并发处理能力

5. 数据库读写分离

6. 使用反向代理和 CDN 加速网站响应

7. 使用分布式文件系统和分布式数据库系统

8. 使用 NoSQL 和搜索引擎

9. 业务拆分

10. 分布式服务


一、大型网站系统的特点

  • 高并发,大流量

需要面对高并发用户,大流量访问。Google 日均 PV 35 亿,日 IP 访问数 3 亿;腾讯 QQ 的最大在线用户数 1.4 亿(2011年数据)。

  • 高可用

系统 7 x 24 小时不间断服务。

  • 海量数据

需要存储、管理海量数据,需要使用大量服务器。Facebook 每周上传的照片数量接近 10 亿,百度收录的网页数目有数百亿,Google 有近百万台服务器为全球用户提供服务。

  • 用户分布广泛,网络情况复杂

许多大型互联网站都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,还有各个运营商网络互通难的问题。

  • 安全环境恶劣

由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击。

  • 需求快速变更,发布频繁

和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率极高。一般大型网站的产品每周都有新版本发布上线,中小型网站的发布更频繁,有时候一天会发布几十次。

  • 渐进式发展

几乎所有的大型互联网网站都是从一个小网站开始,渐进地发展起来的。Facebook 是扎克伯格同学在哈佛大学的宿舍里开发的;Google 的第一台服务器部署在斯坦福大学的实验室;阿里巴巴是在马云家的客厅诞生的。好的互联网产品都是慢慢运营出来的,不是一开始就开发好的,这也正好与网站架构的发展演化过程对应。

二、 大型网站架构演化发展历程

1. 初始阶段的网站架构

大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以 P 计的数据和面对数以亿计的用户,问题就会变得很棘手。大型网站架构主要解决这类问题。

大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来。小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,这时的网站架构如下图所示:

应用程序、数据库、文件等所有资源都在一台服务器上。通常服务器操作系统使用Linux,应用程序使用PHP开发、然后部署在Apache上、数据库使用MySQL,汇集各种免费的开源软件以及一台廉价服务器就可以开始网站的发展之路了。

2. 应用服务和数据服务分离

随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时就需要将应用和数据分离。应用和数据分离后整个网站使用3台服务器:应用服务器、文件服务器和数据库服务器。这 3 台服务器对硬件资源的要求各不相同:

  • 应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;
  • 数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的磁盘和更大的内存;
  • 文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘。

此时,网站系统的架构如下图所示:

应用和数据分离后,不同特性的服务器承担不同的服务角色,网站的并发处理能力和数据存储空间得到了很大改善,支持网站业务进一步发展。但是随着用户逐渐增多,网站又一次面临挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验受到影响。这时需要对网站架构进一步优化

3. 使用缓存改善网站性能

网站访问的特点和现实世界的财富分配一样遵循二八定律:80% 的业务访问集中在20% 的数据上。既然大部分业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能了。 网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存

  • 本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。
  • 远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务。

使用缓存后,数据访问压力得到有效缓解,但是单一应用服务器能够处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。

4. 使用应用服务器集群改善网站的并发处理能力

使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。 对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能,从而实现系统的可伸缩性。应用服务器实现集群是网站可伸缩架构设计中较为简单成熟的一种,如下图所示:

 

通过负载均衡调度服务器,可以将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多用户,就在集群中加入更多的应用服务器,使应用服务器的压力不再成为整个网站的瓶颈。

5. 数据库读写分离

网站在使用缓存后,使对大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作都需要访问数据库在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。 目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力。如下图所示:

应用服务器在写数据的时候,访问主数据库主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明

6. 使用反向代理和 CDN 加速网站响应

随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关(12306这样的网站除外 ̄へ ̄),网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度主要手段有使用 CDN 和反向代理。如下图所示:

CDN 和反向代理的基本原理都是缓存。

使用 CDN 和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

从这里可以看出反向代理的两个功能

  • 利用缓存提供加速服务
  • 负载均衡

7. 使用分布式文件系统和分布式数据库系统

任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。文件系统也一样,需要使用分布式文件系统。如下图所示:

 分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据部署在不同的物理服务器上

8. 使用 NoSQL 和搜索引擎

随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如 NoSQL 和非数据库查询技术如搜索引擎。如下图所示:

NoSQL 和搜索引擎都是源自互联网的技术手段对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

9. 业务拆分

大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线。如大型购物交易网站都会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。

具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统,如下图所示:

10. 分布式服务

随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致数据库连接资源不足,拒绝服务

既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。如下图所示:

 


大型网站的架构演化到这里,基本上大多数的技术问题都得以解决,诸如跨数据中心的实时数据同步和具体网站业务相关的问题也都可以通过组合改进现有技术架构解决。

 

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

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

相关文章

珍藏30年的网站都在这了,自媒体运营必不可少

目录 01办公协作 02 图库 03新媒体相关 04 APP相关 05 小程序相关 06 H5制作 06 二维码 07 问卷 08 gif 09 大数据 10 SasS类平台 11 KOL采购及广告投放 12活动会议 13 长短连接 14 搜索工具 15 思维导图 16 图片处理 17 识图工具 18 表情包 01办公…

HMDB网站 爬取工具

HDMB网站有一个特别不友好的地方是: 搜索相应太慢,成功率还低,这个简直太不爽了。不过白天体验明显好于晚上体验…原因自己品吧 效果图工具使用部分效果 根据HMDBID下载结果 设置搜索条件搜索结果 解析成Excel文件 接受定制任务

网站、数据库的衍变之路(三)

话接前文《网站、数据库的衍变之路(二)》。上文讲了几种静态化方案的利弊,有朋友要讲详细一点,呵呵,这不属于本文的范畴。也有朋友说有些网站不适合搞静态化,是有这种情况。但是在这个时期,网站还处于刚发展的起始阶段…

Java SpringMVC 支付宝-手机网站支付接口

首先就是申请支付宝第三方接口,获取到APPID,应用发布前也可以用支付宝的沙箱环境,服务器要开启外网访问权限,因为支付宝需要返回异步通知(notify_url)和同步通知(return_url) 如果想学习Java工程化、高性能…

JAVA WEB快速编写一个JSP WEB网站了解网站的基本结构 调试 部署

一、使用eclipse初始化一个JSP WEB项目(即:动态WEB项目),步骤如下: 如上图示注意选择TOMCAT版本 如上图示勾选生成web.xml,当然如果不勾选也行,但后续如果有需要用到配置的地方就需要再单独添加,故这里我选…

我穿越到1994年,终于发现80%的网站都用PHP的原因!

见字如面,我是军哥!昨天晚上写代码到深夜,一头扎到床上,沉沉睡去。第二天睁开眼睛,我发现自己居然坐在一个咖啡馆里,旁边的墙上贴着最新的英文电影海报《阿甘正传》、《肖申克的救赎》这都是1994年的经典电…

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解(3)

欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 上一篇:Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解(2) 本次分享大纲 软件负载均衡概…

使用SEP实现:禁止访问特定的网站

利用SEP自带的防火墙可以禁止客户所需要禁止的网站。具体操作如下: 1、点击【Policies】选【Firewall】,在右边右击,选择【Add】。 2、选择【Rules】,可以再【Policy name】里更改名字,便于识别。 3、选择【Add Rule】…

允许网站使用相机和麦克风_新一代网红神器 佳能G7 X Mark III相机评测

1英寸卡片机向来是很多玩家首选的随身摄影器材。一方面,1英寸传感器相较手机等常规装备而言具备更高的成像水准;另一方面,“小巧机身大光圈变焦镜头”的配置不仅带来了出色的便携性,同时还能满足各种复杂的拍摄需求,实…

怎么arm数据上传到云服务器_纵横数据:在日本服务器上搭建外贸网站怎么样?...

​​现在外贸建站赚取外汇已经成为不少企业的收入来源,而对于外贸网站的搭建,不少企业或者网站开发者都会选择使用wordpress程序,而且近几年采用wordpress搭建外贸用户的增长一直都比较快。那么使用wordpress搭建外贸网站有什么好处&#xff…

Magento网站迁移指南

上周五,为MKT同事迁移了一个从本机到GODADDY的MAGENTO系统。 中间出了不少状况, 现在写个迁移纲要: ~~~~~~~~~~~~~~~~ 1,网页和数据库文件上传,最好采用压缩方式,节约网络流量和布置时间。 2,如…

网站php.ini在哪,php.ini在哪

最近在centos中安装lamp环境,发现装完php之后,没有php.ini文件,那么php.ini在哪呢?正常情况下php.ini文件是在php的安装目录下的lib目录里,比如我的php安装目录在/usr/local/php/中,而我进到/usr/local/php/lib目录中却…

总用这个网站把ppt,doc转成PDF,还挺好用,记一下

2019独角兽企业重金招聘Python工程师标准>>> http://www.freepdfconvert.com/ 转载于:https://my.oschina.net/ahuaahua/blog/132714

10个帮程序员和站长减压放松的良心网站!

2019独角兽企业重金招聘Python工程师标准>>> 1. Calm 这是同类型中最火的网站了,站如其名,「平和」,通过自然的图像(阳光下的暖流、淙淙的小溪等)与缓缓的音乐,帮你在短时间内放松下来。 左侧有…

php网站栏目隐藏,phpcms 首页需要隐藏栏目的代码

找到首页模板搜索{php $num}在其后面增加代码即可{php if($r[ismenu]!1) continue;}完成代码如下{loop subcat(0,0,0,$siteid) $r}{php $num}{php if($r[ismenu]!1) continue;}{$r[catname]}更多>>{pc:content action"lists" catid"$r[catid]" order…

ie连接服务器被系统禁止,防止IE被流氓网站乱改

随着互联网的普及和网民队伍的壮大,网络也变的越来不安全。病毒、木马日益侵蚀着我们的网络,让我们感到网络上到处都存在着危险。尽管FireFox、Maxthon等的浏览器以其独特的功能和安全性被越来越多的用户接受,但是IE仍然是浏览器中的“老大”…

JSP网站开发基础总结《一》

经过JAVASE的学习相信大家对JAVA已经不再陌生,那么JAVA都可以干什么呢?做算法、应用程序、网站开发都可以,从今天开始为大家奉上JAVAEE之JSP动态网站开发基础总结。 既然是动态网站开发,那它与传统的静态网站有什么区别呢&#xf…

css3媒体查询实现网站响应式布局

响应式建筑设计、响应式家具设计、响应式办公设计,这些词可能是已有的专业名词,也可能是我自己想出来的一些名词。因为在生活中,我们常常会见到很多让人惊叹的设计,为什么同一套东西经过不同的方式变化之后会给人不同的使用感受和…

ubuntu下webbench作网站压力测试教程【webbench安装】

webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。 1. 安装教程 1.1 安装依赖 exuberant-ctags sudo apt-get install exuberant-ctags1.2 下载源码并安装 wget http://blog.s…

考试网站暂时关闭_高权重网站站长之家,站长专栏申请暂时关闭了!

站长之家,站长专栏申请暂时关闭了,做SEO的朋友应该知道站长之家是可以免费投稿的,且发布内容是可以带外链。不论是从SEO角度发布外链,还是软文推广方面来看,站长之家确实是非常不错的一个外链推广平台,近日…