网站架构发展历程

news/2024/5/20 21:07:23/文章来源:https://blog.csdn.net/qq_45533868/article/details/107027718

注:本文摘自李智慧的《大型网站技术架构》

1.初始阶段的网站架构

  图1

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

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

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

  图2

  这三台服务器对硬件资源的要求各不相同,应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘。

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

  应用和数据分离后,不同特性的服务器承担不同的服务角色,网站的并发处理能力和数据存储空间得到了很大改善,支持网站业务进一步发展。但是随着用户逐渐增多,网站又一次面临挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验受到影响。我们都知道网站访问的特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。既然大部分的业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,是不是就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能了呢?

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

  图3

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

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

  图4

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

5.数据库读写分离

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

  图5

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

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

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

  图6

  CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。(注:当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务)

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

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

  图7

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

8.使用NoSQL和搜索引擎

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

  图8

  NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。(关于什么是NoSQL可以参考这篇博客:https://yq.aliyun.com/articles/96769?spm=5176.10695662.1996646101.searchclickresult.564e5706ZTlk0r

9.业务拆分

  大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线,如大型购物交易网站就会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统,如图:

  图9

10.分布式服务

  随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致存数据库接资源不足,拒绝服务。既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作,如图:

  图10

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

 

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

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

相关文章

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

HTTP服务器源码,可以实现POST模式收发,非常值得参考资源下载此资源下载价格为2D币,请先登录资源文件列表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注重整站优化,也就是希望网站每个页面都参与进来,每个页面都有不同的title标题不重复。对于wordpress默认设置来说,这个基本上是ok的,不需要怎么折腾。但碰到一个问题是:网站栏目及标签页,承载着一些重要…

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

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

伪静态隐藏域名后缀_seo新手如何注册利于网站优化的域名?立刻分享

如何注册域名?选择比较好的域名服务商,输入合理的组成,选择适合的后缀。选中购买,支付成功后,就算彻底完成域名注册了。1、域名服务商简单来说,域名服务商,就是指能注册域名的地方。不同的服务商…

2012php网站搭建,Windows Server 2012 搭建PHP+MySQL环境

随着windows 8的发布,其服务器版本Windows Server 2012也相继推出,本篇将全面介绍如何在Windows Server 2012搭建phpmysql环境,同时也将介绍如何在Windows Server 2012中设定服务器站点的安全。1.添加IIS服务器角色点击任务栏左下角的“服务器…

mysql宕机时保存sql列表_MySQL的一条慢SQL查询导致整个网站宕机的解决方法

直接切入正题吧:通常来说,我们看到的慢查询一般还不致于导致挂站,顶多就是应用响应变慢不过这个恰好今天被我撞见了,一个慢查询把整个网站搞挂了先看看这个SQL张撒样子:# Query_time:70.472013Lock_time: 0.000078 Rows_sent: 791…

python爬虫自动登录网站_【实战】爬虫自动登录访问授权页面

概述:在人工智能来临的今天,数据显得格外重要。在互联网的浩瀚大海洋中,隐藏着无穷的数据和信息。因此学习网络爬虫是在今天立足的一项必备技能。本路线专门针对想要从事Python网络爬虫的同学而准备的,并且是严格按照企业的标准定…

某网站测试

我得到的只有一个后台网址,首先也就是信息搜集了。在网络空间安全搜索引擎fofa上查询一下,再就是端口扫描 ,直接略过说有利用价值的端口:80,81,1433,3389 脆弱点:http://49.xxx.xx.xxx:81/Login/index SQL注入post包(在…

免费申请Let's Encrypt HTTPS 证书(登陆网站和脚本两种方法)

方法一(要交互,成功率高) 申请过程 1.首先打开SSL For Free (https://www.sslforfree.com/)。 3.此时需要选择验证方式,分别为“自动FTP验证”(会要求输入FTP信息,担心安全的还是不要选择这一项)、“手动…

php程序如何发布,如何发布小程序 | 使用手册 | 帮助中心 | DouPHP模块化企业建站系统...

一,首先需要注册小程序账号,这分为两种情况1,已经有认证过的公众号登录已认证的公众号,网址为:https://mp.weixin.qq.com,然后点击左侧“小程序”-》“小程序管理”菜单,点击“添加”选择快速注…

宝塔--同一IP下架设多个网站

在内网服务器上搭建另一个网站,之前已经有一个网站使用了88端口,接下来的网站打算使用99端口,然鹅这货死活不让建: 解法是随便加一个域名欺骗面板的验证程序: 提交成功后点开刚新建的站点里面把那个欺骗的假域名删掉…

服务器系统识别网站,基于边缘或服务器的人群检测系统部署主要取决于什么

选择是否部署基于边缘的或基于服务器的人群检测系统取决于应用程序和环境。运营商应考虑人群大小,出口点等,并记住没有“一刀切”的方法。基于边缘的人群分析的好处CrowdVision 首席运营官Stuart Mills表示,在成本方面,视频监控是…

自建网站随机名言警句API也就是一言随机名句api【教程】

自建版的好处就是,api 及经典语句内容完全由自己管控,并且稳定性受自己影响,不受外部网站影响;当然,缺点也很明显了,木有一言的语句多。 一言网(Hitokoto.cn)隶属于萌创 Team&#x…

一款可留言的甜甜的恋爱计时网站源码

源码介绍: 这是可留言的恋爱计时HTML源码,采用背景图片每日随必应首页更换,评论系统使用了无需后台的Valine官方文档! 修改说明: 起始时间:请在 index.html中的计时器模块第131行自行修改 背景图&#…

登录网站后自动退出需重新登录_怎样实现登录?| Cookie or JWT

Q:先问小伙伴们一个问题,登录难吗?“登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了。”凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名…

Nginx: Centos7.3中nginx配置ssl证书,实现https访问网站

1、购买阿里云SSL证书(网上有很多教程,这里不做赘述) 2、ssl证书控制台申请,绑定已有备案域名,跟着提示做即可,证书审核通过后会出现如下界面 根据自己的需要下载对应的ssl证书配置即可,这里我…

Nginx:Nginx配置SSL证书(申请免费SSL证书)怎样给网站的“http“加上“s“,即网站可以通过“https“访问?

Nginx配置SSL证书(申请免费SSL证书)怎样给网站的"http"加上"s",即网站可以通过"https"访问? 当然,首先得有一个已经购买的域名! 我现在以阿里云为例,进行配置&#xff01…

Gitlab - 解决访问 gitlab 网站出现 502 报错信息的问题

问题: 访问 gitlab 网站,出现 502 解决方案 先查看运行 gitlab 容器的 id docker ps运行命令 # 容器里启动服务 docker exec id gitlab-ctl reconfigure # 关闭防火墙 systemctl stop firewalld再次访问 gitlab 网站就能成功啦

ask2 php,php开源问答论谁家seo最好,当然是ask2问答系统

当你进入网站看到这个界面的时候,我可以告诉你,到这个版本ask2问答系统已经经历过很多个迭代版本,这是一套开源的php问答系统,企业版的seo优化至今没有哪家开源问答系统能超越,不信你可以去别家问答官网首页随便复制几…