大型网站技术架构:核心原理与案例分析 mobi_一文了解,网站架构演化

news/2024/5/20 23:54:02/文章来源:https://blog.csdn.net/weixin_39568706/article/details/111116234

4d18633a10dd11e7d435d41461769a26.png

本文主要讲述网站架构演化历史,主要是让大家对当前主流技术演化的目的,以及技术背景有所了解。本文内容主要参照于大型网站技术架构:核心原理与案例分析[1],也推荐大家深入研读这本书。

自上世纪90年代初CERN正式发布 Web 标准和第一个 Web 服务的出现当做网站的开始,那么网站的发展只经历了短短 30 年的时间。在此过程中网站架构经历过许多次演化,每次演化都解决了许多问题。

网站架构演化历程

与一般的企业应用不一样,互联网应用系统有如下特点。

•高并发、大流量。数以亿计的请求。•高可用。在复杂网络情况下,要求服务可用。•海量数据。每天产生的数据上PB级。•安全环境恶劣。层出不穷恶意请求。•需求快速变更,发布迭代。•渐进式发展。

初始的网站架构

一开始没太多人访问,我们只需要一台服务器就可以满足网站业务需求,应用程序、文件、数据库所有资源都放在同一台服务器上。网站架构如图,通常使用LAMP技术(Linux系统+PHP开发+Apache部署+MySQL数据库),汇集各种开源软件。

5746d24fbaf3dcf9307071ab130ef0f2.png

初始的网站架构

应用与数据分离

随着网站业务发展,越来越多的用户访问导致性能越来越差,越来越多的数据导致磁盘存储空间不足。

此时需要将应用和数据分离,即分为:应用服务器文件服务器数据库服务器。具体架构如下图,另外,不同的服务器对性能的要求不一样。

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

e0fe7ef6ff998c2e91a29af2ad58e4e7.png

应用与数据分离

应用服务和数据服务分离后,不同功能的服务器承担不同的服务,网站并发处理能力和数据存储空间得到了很大改善。

缓存改善网站性能

随着网站业务继续扩展,网站用户继续增加,我们又面临新的问题:数据库查询压力太大导致网站访问延迟,影响网站访问的性能。

网站访问特点遵循二八定律:80%的业务访问集中于20%的数据上,即热点数据。

缓存热点数据,既可以减轻数据库的访问压力,并且可以提升服务响应速度。

一般来说,缓存可以分为两类:

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

18f7e68c1c80d7b69c1b84f97c269af0.png

通过使用缓存,改善网站性能

服务器集群提升网站并发处理能力

采用缓存服务后,网站的数据访问压力得到有效缓解,但仅仅一台服务器同时能够处理的网络请求有限,尤其是在网站访问高峰期,容易出现宕机,从而无法正常提供服务。

当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。

这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。

对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能,从而实现系统的可伸缩性。

集群是网站可伸缩集群架构设计中较为简单成熟的一种,如图所示。

b85d932f8beaf3b973c38759880681da.png

应用服务器集群

数据库读写分离

网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。

目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。

259a25b2c7870d82afd12ca123eb955d.png

数据库读写分离

应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。

为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。

反向代理和 CDN 加速网站响应

由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。

有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。

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

• CDN 部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;•反向代理部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

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

9b0e4626edf1bb3ce8ac4fe27045d267.png

反向代理、CDN 加速网站响应

分布式文件系统、数据库系统

任何强大的单一服务器都满足不了大型网站持续增长的业务需求。

数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。文件系统也是一样,需要使用分布式文件系统,分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。

不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

5c1ad535376f993a14c6d8694e8a0474.png

分布式文件系统、数据库系统

 NoSQL 和搜索引擎

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

1be53ffc2e3f022e0e82b3aee1ed6c63.png

NoSQL、搜索引擎

业务拆分

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

具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。

应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列(如RabbitMQ)进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

356b9e3992e681363abffc29fadb5e3d.png

业务拆分

分布式服务

随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。

由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致数据库接资源不足,拒绝服务。

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

0b83b429cc85ac96a1442854c432aaef.png

分布式服务

后话

大型网站的架构演化到这里,基本上大多数的技术问题都得以解决,诸如跨数据中心的实时数据同步和具体网站业务相关的问题也都可以通过组合改进现有技术架构来解决。但事物发展到一定阶段,就会拥有自身的发展冲动,摆脱其初衷,向着使自己更强大的方向发展。

云计算

既然大型网站架构解决了海量数据的管理和高并发事务的处理,那么就可以把这些解决方案应用到网站自身以外的业务上去。

我们看到目前许多大型网站都开始建设云计算平台,将计算作为一种基础资源出售,中小网站不需要再关心技术架构问题,只需要按需付费,就可以使网站随着业务的增长逐渐获得更大的存储空间和更多的计算资源。

一些网站架构误区

1.一味追随大公司的解决方案。2.为了技术而技术。3.企图用技术解决所有问题。有些问题应该从业务流程上进行优化。

小结

时至今日,大型网站的架构演化方案已经非常成熟,各种技术方案也逐渐产品化。

许多小型网站已经慢慢不需要再经历大型网站经历过的架构演化之路就可以逐步发展壮大,因为现在越来越多的网站从建立之初就是搭建在大型网站提供的云计算服务基础之上,所需要的一切技术资源:计算、存储、网络都可以按需购买,线性伸缩,不需要自己一点一点地拼凑各种资源,综合使用各种技术方案逐步去完善自己的网站架构了。

所以能亲身经历一个网站从小到大的架构演化过程的网站架构师越来越少,虽然过去有这种经历的架构师也很少(从小型网站发展成大型网站的机会本来就极少),但是将来可能真就没有了。

引用链接

[1] 大型网站技术架构:核心原理与案例分析: https://baike.baidu.com/item/%E5%A4%A7%E5%9E%8B%E7%BD%91%E7%AB%99%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84%EF%BC%9A%E6%A0%B8%E5%BF%83%E5%8E%9F%E7%90%86%E4%B8%8E%E6%A1%88%E4%BE%8B%E5%88%86%E6%9E%90/12806435?fr=aladdin

074e41cf269b2b04c50a7221b3da3522.png

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

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

相关文章

网站兼容——火狐浏览器刷新没有清空表单

2019独角兽企业重金招聘Python工程师标准>>> 在进行项目开发中,发现一些筛选条件,上一次选中后,刷新页面仍然存在。页面上的数据仍然是上一次表单中的数据,其实是很火狐浏览器的兼容性造成的。 解决办法: 经…

31.网站数据监控-1

31.网站数据监控-1 网站数据监控:思路:对网站数据字段监控并做MD5加密存入到数据,为了后期监控数据是否更新作比对,然后邮件通知,存入四个字段。 引入的包:md5_tools.py # -*- coding:utf-8 -*-import hash…

基于LNMP的小米电商网站搭建——运维实战手记第一篇

分享一篇文章,来自马哥教育学员阿龙。总项目流程图,详见Linux运维企业架构实战系列 - 阿龙along - 博客园实战一:搭建lnmp及类小米等商业网站的实现环境:关闭防火墙,selinux1、安装包,开启服务yum -y insta…

实现网站页面的QQ临时会话,分享到空间微博等按钮.

一 qq临时会话要实现qq临时会话首先要到qq在线状态官网开通qq在线状态&#xff0c;其中临时对话也分为加密和未加密。1.1:加密模式<a target"_blank" href"http://sighttp.qq.com/authd?IDKEY9a2ea740a2af0f88c15eb511395e2460bd84bf549dd66365">&l…

服务器物理分离,不同功能进行物理分离实现网站架构的伸缩性设计

回顾网站架构发展历程&#xff0c;网站架构发展史就是一部不断向网站增加服务器的历史。只要工程师能向网站的服务器集群中增加新的机器&#xff0c;只要新增加的服务器能线性提高网站的整体服务处理能力&#xff0c;网站就无需为不断增长的用户和访问而焦虑。一般说来&#xf…

java 网站cookie_JavaWeb之Cookie和Session

七、Cookie和Session目录&#xff1a;会话、Cookie、Session(重点)1.会话会话&#xff1a;用户打开一个浏览器&#xff0c;点击了很多超链接&#xff0c;访问多个Web资源&#xff0c;关闭浏览器&#xff0c;这个过程可以称之为会话。有状态会话&#xff1a;一位用户访问过某网站…

SEO优化如何让提高收录量

相信在做SEO优化的网络人员来说&#xff0c;最高兴的时候就是看见自己辛苦打出来的文章被收录了。 可是&#xff0c;收录量就有点。。。。 今天&#xff0c;我就来教教大家怎么提高收录量&#xff0c;主要分四个方面。 1、收录网站的时间间隔 网站的重点是网站页面收录之间的时…

网站被黑提醒该站点可能受到黑客攻击,部分页面已被非法篡改...

大清早的一上班收到3个网站客户的QQ联系&#xff0c;说是自己公司的网站被跳转到了北京sai车&#xff0c;cai票&#xff0c;du博网站上去了&#xff0c;我们SINE安全公司对3个网站进行了详细的安全检测&#xff0c;发现这3个客户的网站都是同样的症状&#xff0c;网站首页文件i…

网站SEO优化如何让百度搜索引擎绝的你的网站更有抓取和收录价值呢?_孙森SEO...

今天孙森SEO为大家唠唠网站到底该如何优化才会让百度搜索引擎绝的你的网站更有抓取和收录价值呢&#xff1f; 第一方面&#xff1a;网站创造高品质的内容&#xff0c;可以为用户提供独特的价值. 1.百度作为搜索引擎&#xff0c;网站内容必须满足 搜索用户的需求 &#xff0c;现…

大型网站技术架构(七)网站的可扩展性架构

2019独角兽企业重金招聘Python工程师标准>>> 扩展性是指对现有系统影响最小的情况下&#xff0c;系统功能可持续扩展或提升的能力。 设计网站可扩展架构的核心思想是模块化&#xff0c;并在此基础上&#xff0c;降低模块间的耦合性&#xff0c;提供模块的复用性。模…

静态网站生成和部署(一)静态网站生成器 Gridsome

静态网站生成器 什么是静态网站生成器 使用一系列配置、模板以及数据&#xff0c;生成静态 HTML 文件及相关资源的工具由于它用来提前生成静态网页&#xff0c;所以这个功能也称为 预渲染生成的网站不需要类似 PHP 这样的服务器去部署运行只需要放到支持静态资源的 Web Serve…

静态网站生成和部署(二)项目构成和部署(Strapi + Vercle)

项目介绍 使用 Gridsome 创建项目模板参考 startbootstrap-clean-blog使用 Strapi 管理内容&#xff0c;提供 API 和 GraphQL查询 Gridsome 是静态站点生成器&#xff0c;打包时可以通过 API 或 GraphQL 获取动态数据&#xff0c;生成对应的静态文件。 例如&#xff1a;获取…

低级html5css3模板,45个高质量的 HTML5 和 CSS3 网站模板

今天为大家分享45个高质量的 HTML5 和 CSS3 网站模板&#xff0c;这将使你的网站开发更容易&#xff0c;更有趣。CSS3和HTML5是要设计一个非常时尚和新潮的网页设计之前必须要使用的方法&#xff0c;CSS3和HTML5提供的功能为用户提供强大功能。1. Vivid Photo: Free Photograph…

mysql数据库登陆地址_Php网站MySQL数据库四点:地址、数据库名、用户名和密码如何获取?...

我们每天都在使用的 wordpress网站 MySQL数据库四点&#xff1a;MySQL数据库地址、数据库、用户名和密码。 每个网站连接数据库都需要正确填写这四点&#xff0c;否则无法访问数据库。本文中老魏以 wordpress和宝塔面板为例&#xff0c;讲解如何获取数据库四点。本文主要是针对…

钉钉扫码登录网站(两种方式实现)

钉钉扫码登录网站(两种方式实现) 效果&#xff1a; 源代码地址&#xff1a;https://github.com/jellydong/DingQrCodeLogin 动手敲代码&#xff01; 第一步&#xff0c;钉钉后台配置 参考链接&#xff1a;获取appId及appSecret. 点击进入钉钉开发者平台 的页面&#xff0c;点…

网站架构发展历程

注&#xff1a;本文摘自李智慧的《大型网站技术架构》 1.初始阶段的网站架构 小型互联网公司一般在最初阶段都是将&#xff1a;应用程序、数据库、文件等所有的资源都在一台服务器上。通常服务器操作系统使用Linux&#xff0c;应用程序使用PHP开发&#xff0c;然后部署在Apach…

c#http服务器源码,C# 自定义 HTTP服务器源码(可用于没有iis的情况下搭建站点)

HTTP服务器源码&#xff0c;可以实现POST模式收发&#xff0c;非常值得参考资源下载此资源下载价格为2D币&#xff0c;请先登录资源文件列表C# WebServer/bins/bins/BizApplication.dll , 21504C# WebServer/bins/bins/ComunicationLayer.dll , 5632C# WebServer/bins/bins/Dem…

tcp网站服务器编写,C#编写简单TCP服务器

【实例简介】【实例截图】【核心代码】using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;namespace TCP{class Program{static void Main(string[] args){Socket …

wordpress怎么搜索别人_wordpress深层seo优化技法:自定义栏目和tag标签页面title标题...

seo注重整站优化&#xff0c;也就是希望网站每个页面都参与进来&#xff0c;每个页面都有不同的title标题不重复。对于wordpress默认设置来说&#xff0c;这个基本上是ok的&#xff0c;不需要怎么折腾。但碰到一个问题是&#xff1a;网站栏目及标签页&#xff0c;承载着一些重要…

解决火车头7.6版本对一些https网站的采集报错问题

针对火车头7.6爬取https网站报错System.Net.HttpWebRequest问题的处理方案 1.先看看火车头7.6爬取https网站时出现的报错情况 System.Net.HttpWebRequest 2.废话不多说&#xff0c;先看看解决方案的效果&#xff0c;可以看到已经没有报错了&#xff0c;而且标题也采集到了(其它…