从浏览器输入url到页面加载(八)你的web网站有几台服务器?

news2025/1/14 18:20:36

你有没有想过一个问题,做为一名前端开发,你的网站上线后,准备了几台服务器?前端静态资源用了几台,你调接口的那个后端部署了几台?

 

目录

1 没接触过这个问题很正常 

2 当访问量上升的时候

2.1 提升带宽

2.2 换服务器

2.3 分布式架构

2.4 分布式的缺点

2.5 重定向式


1 没接触过这个问题很正常 

很多人会说,我自己部署的,我能不知道部署了几台服务器嘛,连IP地址我都能告诉你,那恭喜你,你们公司还是挺不错的,而且我断定你一天如果工作8小时的话,每天还会花费一定的时间去搞服务器。

但没接触过部署也很正常,比如说我,在最初工作的几年里,我就从来不关心这些问题,要么本地SVN上传了,跟后端说,好了部署吧。要么本地npm run build一下,打个压缩包,发给后端说,来,大哥,部署一下。然后后端过会儿跟我说,部署好了看一下。我一看,哎呀,有问题,我再给你打个压缩包,你先别走啊,等着我。

就这种情况,我敢断定,一直到现在,还有很多前端就是这种工作流程,他接触不到部署,或者前端的dist文件,最终就是在服务端的某个web目录下。你让他怎么回答这个问题?

 

2 当访问量上升的时候

我之前就遇到过这种问题,平时好好的,疫情期间突然在线课程网站点不动了,按钮不动了,页面打开的慢了,然后后端就跟领导说,不行了,前端出问题了,更可恶的是,领导还真找到我说,你赶紧看一下,有bug赶紧改,这也让我催吗?

2.1 提升带宽

这就是很明显的,当服务器访问量上升的时候,性能跟不上了。服务器线路的带宽毕竟是有限的,你加带宽有时候效果也不是很明显,带宽增加了,很有可能你的服务器性能就是跟不上,一旦访问量大了,网络线路传输了大量的数据包,网页不就卡住了嘛。

2.2 换服务器

提升带宽了,如果服务器性能还是跟不上,那好办,换一台性能更好的服务器不就行了。不过这也是一种比较简单的办法,如果你的网站真的用户量很大,或者某一时间流量很大的话,很显然,这并不可行。也就是说,紧靠一台服务器,难堪重任,除非你们公司的网站其实就没打算让更多的人访问,人多了,我关了他。

2.3 分布式架构

如果多用几台服务器,分担流量压力是不是就更好了呢,这样总体访问量并没有减少,而且恰恰可以使每一天的压力变小。假设我们现在有3台服务器,这样,每一台的压力不就是之前的三分之一了嘛,对吧。

想解决这个问题,必须有一个机制将客户端发送的请求分配到每台服务器上。比如我们发送一个前端请求:

const url = 'http://a.text.com/getUser';
axios(url, data).then((res) => {
    console.log('res:', res.data);
})

那么按之前正常的思路来说,我们把请求发送到这个目标URL的域名上,然后请求的接口是getUser,希望获取用户信息。当我们访问服务器的时候,这个URL域名就可以通过DNS设置,分配多个IP地址,比如我们3台服务器的IP地址分别是123.123.123.1 和 123.123.123.2 和 123.123.123.3。那么当我们访问这个URL的时候,DNS服务器会将IP地址按顺序返回,例如

第一次查询域名的时候,服务器IP顺序是

23.123.123.1    123.123.123.2     123.123.123.3

第二次查询域名的时候,服务器IP顺序是

23.123.123.2    123.123.123.3     123.123.123.1

第三次查询域名的时候,服务器IP顺序是

23.123.123.3    123.123.123.1    123.123.123.2

这样就可以每次调用接口的时候,轮询着访问了。

2.4 分布式的缺点

这么做看似是不错的,而且很多公司也都是这么用的。但这样做有个缺点,因为DNS不知道这3台机器的健康情况,比如第一台机器宕机了,他肯定不知道,然后就还会往过发送请求,这样一来,我们访问第2台,第3台的时候,发现没问题,但总是有那么一会儿发现,就是不返回数据,很难查到这个问题。

再比如说,我们很多公司有自己的机房,而很多时候,刚一分配的机器没有太多的网络权限。这个时候,你就会发现有时候接口通,有时候接口不通,排查起来特别麻烦。

2.5 重定向式

刚才我们说了DNS轮询IP,部署多台服务器,来缓解流量压力。还有一种方式也挺好使的,比如我们有2个接口请求

const url = 'http://a.text.com/getUser';
axios(url, data).then((res) => {
    console.log('res:', res.data);
})

const urlList = 'http://a.text.com/getList';
axios(urlList, data).then((res) => {
    console.log('res:', res.data);
})

分别是查询用户和查询列表的(咱就说这么个意思) ,这个时候,都会访问到这个域名的机器上,你可以对getUser和getList这两个路由做重定向啊,比如nginx重定向代理

server {
    listen 80;
    server_name a.text.com;

    location /getUser {
        proxy_pass http://other_machine_ip/getUser;
    }

    location /getList {
        proxy_pass http://another_machine_ip/getList;
    }
}
  • listen 指令指定 Nginx 监听的端口和协议。
  • server_name 指令指定了服务器的域名。
  • location 指令用于匹配特定的 URI 路径。
  • proxy_pass 指令将请求转发到指定的后端服务器地址。

当然,这其实也是准备了多台服务器,甚至你需要getUser这个重定向后的机器,再通过负载均衡,准备多台服务器来解决大流量的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机科学与技术就业方向和前景怎么样

计算机科学与技术专业的就业方向极为广泛,方向可以是软件开发与工程、网络与信息安全、数据科学与大数据分析等,几乎渗透到现代社会的每一个角落。以下是上大学网 (www.sdaxue.com)对计算机科学与技术专业一些主要的就业方向及其前景分析&…

GitLab(史上最全GitLab安装使用文章!!!)

GitLab 是一个基于网络的Git仓库管理工具,是开源的。基本每个公司都会有属于自己公司内部的GitLab 官方网站:https://about.gitlab.com/ GitLab文档:https://docs.gitlab.cn/jh/install/requirements.html 安装 所需配置 这里采用Cento…

PHP源码_最新Ai对话系统网站源码 ChatGPT+搭建教程+前后端

基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论…

Cloudflare防火墙其他WAF设置

其他WAF设置 缓存设置 缓存设置好也可以帮助我们抵挡巨量的CC攻击。有些CC是很多IP随即攻击一个地址,如果我们的安全策略没有拦截到攻击。但是我们设置了缓存,那这些请求则会在CloudFlare边缘节点直接将缓存内容返回给请求。也达到了抗攻击的效果。 缓…

13.4.1 实验1:配置VTP

1、使用目的 通过本实验可以掌握 VTP三种模式的区别。VTP工作原理。VTP的配置和调试方法 2、实验拓扑 配置VTP的实验拓扑如下图所示 3、实验拓扑 3.1、实验准备 通过命令 delete nash:van.dat和erasestartup-config把3台交换机的配置清除干净,重启交换机&#…

基于深度学习的3D目标检测与跟踪

目标检测和跟踪对于自动驾驶来说是至关重要和基础的任务,旨在从场景中识别和定位出那些预定义类别的对象。在所有形式的自动驾驶数据中,3D点云学习引起了越来越多的关注。目前,有许多用于3D目标检测的深度学习方法。然而,鉴于点云…

MySQL数据库——事务操作-begin-commit-rollback

schooldb库——utf8字符集——utf8_general_ci排序规则 先创建库,再去使用下列的DDL语句。 DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL COMMENT 创建时间,modifyDate datetime DEFAULT NULL …

stm32单片机开发一、中断之外部中断实验

stm32单片机的外部中断和定时器中断、ADC中断等都由stm32的内核中的NVIC模块控制,stm32的中断有很多中,比如供电不足中断,当供电不足时,会产生的一种中断,这么多中断如果都接在CPU上,或者说CPU去处理&#…

【LAMMPS学习】八、基础知识(5.2)粒度模型

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

蓝网科技临床浏览系统 deleteStudy SQL注入漏洞复现(CVE-2024-4257)

0x01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 0x02 漏洞概述 蓝网科技临床浏览系统 deleteStudy接口处SQL注入漏洞,未经身份验证的恶意攻击者利用 SQL 注入漏洞获取…

AI大模型探索之路-训练篇8:大语言模型Transformer库-预训练流程编码体验

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

Codigger数据篇(下):数据安全的全方位保障

在数字化浪潮中,数据已成为现代企业的核心财富。Codigger作为领先的数据服务平台,深知数据安全对于用户的重要性,因此在深挖数据价值的同时,我们始终坚守数据安全防线。 一、双重加密技术保障 Codigger平台运用先进的加密通信和…

【C/C++】动态内存管理(C:malloc,realloc,calloc,free || C++:new,delete)

🔥个人主页: Forcible Bug Maker 🔥专栏: C | | C语言 目录 前言C/C内存分布C语言中的动态内存管理:malloc/realloc/realloc/freemallocrealloccallocfree C中的动态内存管理:new/deletenew和delete操作内…

android studio 编译一直显示Download maven-metadata.xml

今天打开之前的项目的时候遇到这个问题:android studio 编译一直显示Download maven-metadata.xml, AI 查询 报错问题:"android studio 编译一直显示Download maven-metadata.xml" 解释: 这个错误通常表示Android Studio在尝试从Maven仓库…

用Python Turtle画一个中国结

中国结,作为中华民族传统文化的象征之一,以其独特的编织技艺和深厚的文化内涵,深受人们喜爱。今天,我们就来用Python的turtle模块,尝试绘制一个充满韵味的中国结。 我们先来看看整个中国结生成的过程: 中国…

机器学习 | 准确率、召回率、精准率、特异度傻傻分不清?ROC曲线怎么看?一篇文章帮你搞定

一、真正类、假负类、假正类与真负类 二、准确率、召回率、精准率、特异度与假正率 1. 准确率 (Accuracy) 准确率表明成功预测(预测为负或为正)的结果占总样本的百分比。 准确率 , 2. 召回率/查全率/灵敏度/真正率(Recall&a…

C语言进阶|双链表

✈链表的分类 链表的结构非常多样,以下情况组合起来就有8种(2x22)链表结构: 虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:单链表和双向带头循环链表 1.无头单向非循环链表:结构简单&…

springboot基于SpringBoot的网上订餐系统开题报告+1w字文档+ppt

项目演示视频: 【源码免费送】基于SpringBoot的网上订餐系统录像 摘 要 随着我国经济的飞速发展,人们的生活速度明显加快,在餐厅吃饭排队的情况到处可见,近年来由于新兴IT行业的空前发展,它与传统餐饮行业也进行了新旧的结合&…

实验八智能手机互联网程序设计(微信程序方向)实验报告

请在上一次实验的基础之上完成“手机快速注册”页面、“企业用户注册”页面,并实现点击手机快速注册和企业用户注册后转跳至该页面在“手机快速注册”页面,输入框内输入内容并失去焦点后,下方的按钮会变化 在企业用户注册页面,用户…

Anomalib:用于异常检测的深度学习库!

大家好,今天给大家介绍了一个用于无监督异常检测和定位的新型库:anomalib,Github链接:https://github.com/openvinotoolkit/anomalib 简介 考虑到可重复性和模块化,这个开源库提供了文献中的算法和一组工具,以通过即插即用的方法设计自定义异常检测算法。 Anomalib 包…