大型网站技术架构

news/2024/5/9 0:38:49/文章来源:https://blog.csdn.net/jasonhui512/article/details/53734961

作者:xlzd

链接:https://www.zhihu.com/question/20657269/answer/101795180
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

1. 初始阶段的网站架构

一般来讲,大型网站都是从小型网站发展而来,一开始的架构都比较简单,随着业务复杂和用户量的激增,才开始做很多架构上的改进。当它还是小型网站的时候,没有太多访客,一般来讲只需要一台服务器就够了,这时应用程序、数据库、文件等所有资源都在一台服务器上,网站架构如下图所示:

<img src="https://pic2.zhimg.com/b1fb995ac418a4bb50bdb976d52a6c31_b.png" data-rawwidth="341" data-rawheight="239" class="content_image" width="341">

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

随着网站业务的发展和用户量的增加,一台服务器就无法再满足需求了。大量用户访问导致访问速度越来越慢,而逐渐增加的数据也会导致存储空间不足。这时就需要将应用和数据分离,应用和数据分离后整个网站使用 3 台服务器:应用服务器、文件服务器和数据库服务器。这 3 台服务器对硬件资源的要求各不相同:

  • 应用服务器业务逻辑,需要强大的CPU
  • 数据库服务器对磁盘读写操作很多,需要更快的磁盘和更大的内存
  • 文件服务器存储用户上传的文件,因此需要更大的磁盘空间

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

<img src="https://pic1.zhimg.com/f6d05e8fafd86940614503fdb53dd608_b.png" data-rawwidth="445" data-rawheight="317" class="origin_image zh-lightbox-thumb" width="445" data-original="https://pic1.zhimg.com/f6d05e8fafd86940614503fdb53dd608_r.png">

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

随着用户再增加,网站又会一次面临挑战:数据库压力太大导致整站访问效率再此下降,用户体验受到影响。一个网站,往往 80% 的业务访问集中在 20% 的数据上,比如微博请求量最多的肯定是那些千万级粉丝的大 V 的微博,而几乎没有人关注的你的首页,除了自己想起来之外根本不会被打开。既然大部分业务访问集中在一小部分数据上,那就把这一小部分数据先提前缓存在内存中,而不是每次都去数据库读取,这样就可以减少数据库的访问压力,从而提高整个网站的访问速度。

网站使用的缓存一般分为缓存到应用服务器或者缓存在专门的分布式缓存服务器。缓存到应用服务器自己的访问速度快很多,但是受自身内存限制,往往不太适用。远程分布式缓存使用一个集群专门负责缓存服务,当内存不够还可以轻松得动态扩容。

<img src="https://pic4.zhimg.com/3f7742ea34208549d12c8cbf9fa85bab_b.png" data-rawwidth="517" data-rawheight="491" class="origin_image zh-lightbox-thumb" width="517" data-original="https://pic4.zhimg.com/3f7742ea34208549d12c8cbf9fa85bab_r.png">


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

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

<img src="https://pic3.zhimg.com/758b0d2283f0c8fe32059ef718aa9a1e_b.png" data-rawwidth="747" data-rawheight="459" class="origin_image zh-lightbox-thumb" width="747" data-original="https://pic3.zhimg.com/758b0d2283f0c8fe32059ef718aa9a1e_r.png">

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




5. 数据库读写分离

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

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


<img src="https://pic4.zhimg.com/3611799b5b84326062b86f7e8383b5e3_b.png" data-rawwidth="747" data-rawheight="569" class="origin_image zh-lightbox-thumb" width="747" data-original="https://pic4.zhimg.com/3611799b5b84326062b86f7e8383b5e3_r.png">

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

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

<img src="https://pic4.zhimg.com/cf613de59351dc6209fc23c722351adf_b.png" data-rawwidth="811" data-rawheight="572" class="origin_image zh-lightbox-thumb" width="811" data-original="https://pic4.zhimg.com/cf613de59351dc6209fc23c722351adf_r.png">

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


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

<img src="https://pic2.zhimg.com/b41911410fd25fe17e53b8d99ee2808d_b.png" data-rawwidth="808" data-rawheight="506" class="origin_image zh-lightbox-thumb" width="808" data-original="https://pic2.zhimg.com/b41911410fd25fe17e53b8d99ee2808d_r.png">

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




8. 使用 NoSQL 和搜索引擎

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

<img src="https://pic3.zhimg.com/25f90e03351f541671aea86a488ae322_b.png" data-rawwidth="808" data-rawheight="506" class="origin_image zh-lightbox-thumb" width="808" data-original="https://pic3.zhimg.com/25f90e03351f541671aea86a488ae322_r.png">

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




9. 业务拆分

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

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

<img src="https://pic2.zhimg.com/cc6bd78d9d214d5e0fe6283b5ac2a3e5_b.png" data-rawwidth="831" data-rawheight="506" class="origin_image zh-lightbox-thumb" width="831" data-original="https://pic2.zhimg.com/cc6bd78d9d214d5e0fe6283b5ac2a3e5_r.png">

10. 分布式服务

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

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


<img src="https://pic1.zhimg.com/694fb3f64b999a481b9b1166e6c09600_b.png" data-rawwidth="974" data-rawheight="506" class="origin_image zh-lightbox-thumb" width="974" data-original="https://pic1.zhimg.com/694fb3f64b999a481b9b1166e6c09600_r.png">

大型网站的架构演化到这里,基本上大多数的技术问题都可以得以解决了。


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

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

相关文章

Java开发牛人十大必备网站

本文由 ImportNew - 张文太 翻译自 programcreek。如需转载本文,请先参见文章末尾处的转载要求。 ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Java开发 小组。参与方式请查看小组简介。 以下是我收集的Java开发牛人必备…

Java开发牛人十大必备网站

本文由 ImportNew - 张文太 翻译自 programcreek。如需转载本文,请先参见文章末尾处的转载要求。 ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Java开发 小组。参与方式请查看小组简介。 以下是我收集的Java开发牛人必…

Python Django windows 环境配置---(网站开发)

学习做网站纯属个人的兴趣,就选择了Python对网站的开发。 下载Python 可以在Python官方网站下载下载完成以后就可以进行环境配置。环境配置路径就不做详细介绍了,可以在网上搜索出来。安装Django 在配置完Python以后就可以在Django官网下载程序包了&a…

java网上商城 购物网站 在线商品销售系统设计与实现 项目源代码下载 javaweb jsp ssm ssh mysql

1 前端商城界面 1.1 商城首页 首页分为三个部分,分别显示热销推荐、特价促销、新品上架三个推荐类目的商品列表 以上这三类推荐商品可以分别在后台管理中设置 点击商品图片或商品标题可以进入商品详情页面 点击【加入购物车】按钮会将次商品加入购物车 1.2 商品…

java农场商城 生鲜超市 水果蔬菜电商网站平台系统设计与实现 项目源代码下载 javaweb jsp ssm mysql

1 前端商城界面 1.1 商城首页 首页导航上有五个按钮,分别显示产品分类、商城首页、今日推荐、热销排行、新品上市,五个推荐类目的商品列表 首页很长说明书中1和2页均是首页,分六个部分,分别是今日推荐、热销排行、生态果蔬、肉禽…

java服装商城 男装女装童装鞋帽超市 购物网站系统设计与实现 项目源代码下载 javaweb jsp ssm mysql

1 前端商城界面 1.1 商城首页 首页分为三个部分,分别显示女装、男装、童装三个推荐类目的商品列表,以上这三类推荐商品可以分别在后台管理中设置,点击商品图片或商品标题可以进入商品详情页面 1.2 搜索功能 鼠标进入导航条上方的红色文本框…

dedecms 实现两个网站调用一个数据库

近年来移动端的流量上升,让我们不得不把眼光放在移动端上,程序猿都知道dedecms的wap不中用,标签少的可怜,没有静态化的功能,想调点数据,自己写sql语句,这东东如果用。于是,半路出家的…

搭建一个大型网站架构的实验环境(Squid缓存服务器篇)

squid缓存服务器的配置 squid缓存服务器在这个实验环境中有两台(192.168.10.30,192.168.10.31)做成squid集群,我们首先安装一台,然后复制一台,再做配置,这样省事,哈! squ…

12个顶级开发者社区网站帮助程序员走上人生巅峰

公元二十一世纪,世界迎来了大互联网时代,程序员这个行当已然成为了医生、律师等高端中产阶级职业之外的又一高薪职业。不过既然是技术职业,自然也 就会分三六九等,没理想的程序员只能写着自己擅长的代码,加着没玩没了的…

[转载]说说大型高并发高负载网站的系统架构

| 评论 # yueguoliang发表于2007-09-29 16:08:37IP: 211.94.149.* ju ti dian shuo ming fang an cai hao # fxbird发表于2007-09-29 16:19:19IP: 59.44.72.* 这才是高质量的文章。 # oldmoon发表于2007-09-29 17:36:43IP: 116.252.70.* 受益匪浅 # irplay发表于2007-09-30 09:…

互联网网站的反爬虫策略浅析(收藏)

关键字: crawler 因为搜索引擎的流行,网络爬虫已经成了很普及网络技术,除了专门做搜索的Google,Yahoo,微软,百度以外,几乎每个大型门户网站都有自己的搜索引擎,大大小小叫得出来名字得就几十种&…

LAMP网站架构方案分析

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件&a…

【转】使用 Nginx 提升网站访问速度【反向代理】

Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。 Igor 将源代码以类 …

HTML——简单的网站首页

学习记录帖&#xff08;一&#xff09; 简单的网站首页 这是我的一个记录帖&#xff0c;我是按照黑马程序员的视频学习的。 使用的是HBuilder&#xff0c;学习了html & css & js & jq & bootstrap。 成果 代码 <!DOCTYPE html> <html><head…

Web网站服务(Apache)

Apache网站服务基础 Apache HTTP server 是广泛应用的Web应用之一 Apache简介 Apache HTTP server 是开源软件项目的杰出代表&#xff0c;基于标准的HTTP网络协议提供网页浏览器&#xff0c;Apache服务器可以运行在Linux&#xff0c;UNIX&#xff0c;Windows等多种操作系统平…

使用 HttpWebRequest 向网站提交数据

转自&#xff1a;http://www.cnblogs.com/webman/archive/2006/11/17/564106.html HttpWebRequest 是 .net 基类库中的一个类&#xff0c;在命名空间 System.Net 下面&#xff0c;用来使用户通过 HTTP 协议和服务器交互。 HttpWebRequest 对 HTTP 协议进行了完整的封装&#x…

创建springboot项目时改为国内网站

总结 &#xff1a; 第一点&#xff1a;今天进行了蓝桥杯 的竞赛&#xff0c;说一说我的感悟&#xff0c;还是练得不够&#xff0c;其实有挺多熟悉的题&#xff0c;可是还是没做出来&#xff0c;还是征战明年的蓝桥杯吧&#xff0c;还有就是&#xff0c;电脑的问题&#xff0c;…

IISphpstudy搭建网站之:IIS切换phpstudy

为节省内存消耗&#xff0c;在同一台windows2003上搭建了IIS和phpstudy两种类型网站&#xff0c;但一次只开一种。 开启服务时发现&#xff0c;因都是使用80端口&#xff0c;所以会有冲突现象&#xff0c;一般IIS会开机自启&#xff0c;而启动phpstudy时经常报错显示端口被占用…

网站项目管理-如何做好需求分析(转)

前言 随着技术的不断发展和用户对网站功能性的需求不断提高&#xff0c;如今网站项目的设计已经不能再仅仅简单地利用静态Html文件来实现&#xff0c;与前几年网站设计由一两名网页设计师自由的创作相比&#xff0c;网站项目的设计和开发越来越像一个软件工程&#xff0c;也越来…

一个网站的LOGO

今天董事长叫我去谈了话&#xff0c;有了一个网站的构想 于是就先做一个LOGO也来了&#xff0c;好久没有做美工方面的东东了 希望这个LOGO能用上&#xff0c;把网站做起来 像我这种人天生就是为做网站的 董事长也说以前让我们做那些&#xff0c;对我们来说也是和自己的专长搭不…