当前位置: 首页 > news >正文

Day57-Nginx反向代理与负载均衡初步应用

Day57-Nginx反向代理与负载均衡初步应用

  • 1. Nginx代理介绍
  • 2. Nginx代理常见模式
    • 2.1 正向代理
    • 2.2 反向代理
    • 2.3 正向与反向代理区别
  • 3. Nginx代理支持协议
  • 4. Nginx反向代理场景实践
  • 5. lb01安装部署nginx

1. Nginx代理介绍

1)在没有代理的情况下,都是客户端直接请求服务端,服务端直接响应客户端。
在这里插入图片描述

2)租客租房,中介代理
在这里插入图片描述

3)在有代理模式的情况下,客户端往往无法直接向服务端发起请求,而是需要使用到中间代理服务,来实现客户端和服务通信。
在这里插入图片描述

4)为什么要使用代理功能?

  1. 提高访问效率。
  2. 承担单机无法处理的大并发流量请求。
  3. 满足7&24不宕机不丢数据需求。

2. Nginx代理常见模式

Nginx作为代理服务, 按照应用场景模式主要分为正向代理、反向代理两种模式

2.1 正向代理

*正向代理,早期的应用场景主要用于局域网内的电脑内部上网,主要解决的痛点是早期企业带宽有限,用户上网拥挤,速度慢,以及上网行为管理。目前带宽已不是问题,并且智能路由器等实现上网管理功能,因此正向代理应用已不那么流行了。
在这里插入图片描述

在这里插入图片描述

2.2 反向代理

反向代理的核心应用场景为用于公司后台网站集群架构中,客户端->代理<–>服务端,解决的主要痛点是单台机器无法承受大量并发用户的服务请求。需要有多台服务器同时处理请求。

在这里插入图片描述

在这里插入图片描述

2.3 正向与反向代理区别

1.服务的"对象"不同

正向代理代理的对象是局域网内的上网客户端,为其服务。

反向代理代理的对象是服务端,为上网的用户提供服务服务。

2.架设位置不同

正向代理架设在企业办公上网出口位置

反向代理架设在企业网站服务器的前端

3.代理作用不同

正向代理解决局域网上网提速、节约网站带宽、管控员工上网行为。

反向代理解决单台网站服务器撑不住流量并发问题,同时保障网站7X24不间断提供服务的需求。

3. Nginx代理支持协议

1.Nginx作为代理服务,可支持的代理协议非常的多,具体如下图
在这里插入图片描述

2.Nginx作为反向代理,常常会用到如下几种代理协议,如下图所示
在这里插入图片描述

Grpc:
链接: https://www.jianshu.com/p/9c947d98e192
链接: http://doc.oschina.net/grpc?t=58008

gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
websocket
链接: https://www.zhihu.com/question/20215561
链接: https://baike.baidu.com/item/WebSocket/1953845?fr=aladdin

3.最后我将企业常用反向代理模式与Nginx反向代理模块对应关系总结如下表格

反向代理模式Nginx反向代理模块
http、websocket、httpsngx_http_proxy_module
fastcgingx_http_fastcgi_module
uwsgingx_http_uwsgi_module
grpcngx_http_v2_module

4. Nginx反向代理场景实践

1)Nginx反向代理配置语法示例

Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
#示例
proxy_pass http://localhost:8000/uri/
proxy_pass http://10.0.0.7:8000/uri/
proxy_pass http://unix:/tmp/backend.socket:/uri/

2)Nginx反向代理配置实例
在这里插入图片描述

角色外网IP(NAT)内网IP(LAN)主机名
反向代理eth0:10.0.0.5eth1:172.16.1.5lb01
Web服务eth1:172.16.1.7web01

3)web01、web02服务器, 分别配置虚拟主机

#web01服务器配置测试虚拟主机
[root@web01 ~]# cat /etc/nginx/conf.d/01_test.etiantian.org.conf
#server{
#    listen 80;
#    server_name _default;
#    return 404;
#}server {listen 80;server_name test.etiantian.org;charset utf-8;location / {root /usr/share/nginx/html/test;index index.html index.htm;}
}[root@web01 conf.d]# mkdir /usr/share/nginx/html/test
[root@web01 conf.d]# echo "web01" >/usr/share/nginx/html/test/index.html
[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.7
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@web01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.7
web01#web02服务器配置测试虚拟主机
[root@web02 ~]# cat /etc/nginx/conf.d/01_test.etiantian.org.conf
server{listen 80;server_name _default;return 404;
}server {listen 80;server_name test.etiantian.org;charset utf-8;location / {root /usr/share/nginx/html/test;index index.html index.htm;}
}[root@web02 conf.d]# mkdir /usr/share/nginx/html/test
[root@web02 conf.d]# echo "web02" >/usr/share/nginx/html/test/index.html
[root@web02 conf.d]# systemctl restart nginx
[root@web02 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.8
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@web02 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.8
web02

在这里插入图片描述

4)proxy代理服务器, 配置监听eth0的80端口,使10.0.0.0网段的用户,能够通过代理服务器访问到后端的172.16.1.7的80端口站点内容

[root@lb01 conf.d]# cat /etc/nginx/conf.d/blog.etiantian.org.conf
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host; #nginx代理携带请求头请求后端Web节点}
}
[root@lb01 conf.d]# systemctl enable nginx
[root@lb01 conf.d]# systemctl start nginx

在这里插入图片描述

更多见day57-oldboy最牛.txt
5)抓包分析Nginx代理处理整个请求的过程
扩展作业
6)添加发往后端服务器的请求头信息, 如图

Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
# 客户端请求Host的值是blog.etiantian.org, 那么代理服务会像后端请求时携带Host变量为blog.etiantian.org
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务,后端服务会通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;

7)代理的向后端请求时使用的HTTP协议版本。默认1.0版本。如果使用长连接,建议调整为1.1版本协议。

Syntax: proxy_http_version 1.0 | 1.1;
Default: proxy_http_version 1.0;
Context: http, server, location
This directive appeared in version 1.1.4.
# proxy_http_version 1.1;

8)代理到后端的TCP连接、响应、返回等超时时间, 如图

#nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location#nginx代理等待后端服务器的响应时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location#后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

5. lb01安装部署nginx

  1. 使用官方仓库安装Nginx
#yum install nginx -y 可能优先使用epel里的源,怎么确保我们配置的官方优先。
[root@web01 ~]# rpm -qa yum-plugin-priorities
[root@web02 ~]# yum install yum-plugin-priorities -y
[root@web01 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
priority=1  #增加优先参数,使得官方源优先epel源。#安装Nginx
[root@web01 ~]# yum install nginx -y
  1. 配置Nginx进程运行的用户
[root@web01 ~]# useradd -u1111 www -s /sbin/nologin -M
[root@web01 ~]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
[root@web01 ~]# grep "^user" /etc/nginx/nginx.conf
  1. 启动Nginx,并将Nginx加入开机自启
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx[root@web01 ~]# lsof -i :80 #查看端口对应的服务
[root@web01 ~]# nginx -v    #查看版本
nginx version: nginx/1.20.1 
[root@web01 ~]# curl 10.0.0.5 #welcome to Nginx 表示正常。

实验1:

[root@lb01 conf.d]# vim 01_test.etiantian.org.conf 
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host;}
}[root@lb01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.5
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

实验2:

[root@lb01 conf.d]# vim 01_test.etiantian.org.conf 
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host; #实现Nginx代理携带host字段请求节点。}
}# 成功
[root@lb01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.5
web01
  1. 拆分不同的后端服务器提供访问。
    1.动静分离。
    2.不同的动态业务分离。

网站集群:一个项目下的

www.etiantian.org                   #
www.etiantian.org/dynamic/xx//xxxx  #动态服务器集群
www.etiantian.org/regi/xx//xxxx     #注册登录服务器集群
www.etiantian.org/regi/xx//xxxx     #手机服务器集群
......

二级页面:

tongzhuang.etiantian.org  
neiyi.etiantian.org
image.etiantian.org

静态服务:独立域名
image.ett.com

[root@web01 conf.d]# cat location01.etiantian.org.conf 
server {listen 80;server_name www.etiantian.org;#www.etiantian.orglocation / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host;}#www.etiantian.org/dynamic/xx//xxxx  #动态服务器集群location /dynamic/ {proxy_pass http://172.16.1.8:80; ##动态proxy_set_header Host $http_host;}#www.etiantian.org/regi/xx//xxxx     #注册登录服务器location ^~ /regi/ {proxy_pass http://172.16.1.9:80; #注册登录服务器集群proxy_set_header Host $http_host;}#www.etiantian.org/regi/xx//xxxx     #手机服务器集群#location ^~ $http_user_agent = 安卓英文 {proxy_pass http://172.16.1.9:80; ##手机服务器集群proxy_set_header Host $http_host;}##静态location ~* \.(gif|jpg|jpeg)$ {proxy_pass http://172.16.1.10:80;proxy_set_header Host $http_host;}
}
  1. 负载均衡 backend服务器池
    1)基本负载均衡实验
[root@lb01 conf.d]# cat 01_test.etiantian.org.conf 
upstream backend {#server backend1.example.com       weight=5;#server backend2.example.com:8080;#server unix:/tmp/backend3;server 172.16.1.7        weight=2; #默认80端口server 172.16.1.8        weight=1; #默认80端口#server 8080.etiantian.org:8080     backup; #热备#server backup2.example.com:8080   backup; #热备
}server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://backend;#proxy_pass http://a.etiantian.org:80;proxy_set_header Host $http_host;}
}

配置web01:

[root@web01 conf.d]# cat 01_test.etiantian.org.conf 
server{listen 80;server_name _default;return 404;
}server {listen       80;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test;index  index.html index.htm;}
}
server {listen       8080;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test8080;index  index.html index.htm;}
}

配置web02:

[root@web02 conf.d]# cat 01_test.etiantian.org.conf 
server{listen 80;server_name _default;return 404;
}server {listen       80;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test;index  index.html index.htm;}
}systemctl restart nginx# 实现效果:
[root@web02 conf.d]# curl -H "host:test.etiantian.org" 10.0.0.8
web02
[root@web02 conf.d]# curl -H "host:test.etiantian.org" 10.0.0.7
web01

结果:

[root@lb01 conf.d]# for n in {1..100}; do curl test.etiantian.org;sleep 1;done
web01
web02
web01
web01
web02
web01
web01
web02

2)测试backup功能

[root@lb01 conf.d]# cat 01_test.etiantian.org.conf 
upstream backend {#server backend1.example.com       weight=5;#server backend2.example.com:8080;#server unix:/tmp/backend3;server 172.16.1.7        weight=2; #默认80端口server 172.16.1.8        weight=1; #默认80端口#server 8080.etiantian.org:8080     backup; #热备#server backup2.example.com:8080   backup; #热备
}
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://backend;#proxy_pass http://a.etiantian.org:80;proxy_set_header Host $http_host;}
}

#host解析

[root@lb01 conf.d]# grep 80 /etc/hosts
172.16.1.7 web01 8080.etiantian.org关掉web02 nginx:pkill nginx,然后回到lb01访问
[root@lb01 conf.d]# for n in {1..100}; do curl test.etiantian.org;sleep 1;done
web02
web02
web02
web01-8080
web01-8080
web01-8080
web02
web02

相关文章:

Day57-Nginx反向代理与负载均衡初步应用

Day57-Nginx反向代理与负载均衡初步应用 1. Nginx代理介绍2. Nginx代理常见模式2.1 正向代理2.2 反向代理2.3 正向与反向代理区别 3. Nginx代理支持协议4. Nginx反向代理场景实践5. lb01安装部署nginx 1. Nginx代理介绍 1&#xff09;在没有代理的情况下&#xff0c;都是客户端…...

【PHP】通过PHP开启/暂停Apache、MySQL或其他服务

目录 一、前言 二、代码 一、前言 有些时候我们需要开启或暂停一些服务&#xff0c;比如说开启Apach或暂停MySQL服务等&#xff0c;最近工作中也开发了这方面的功能&#xff0c;记录下来怎样使用PHP语言来开启或暂停Apache、MySQL服务的运行状态。 这种方法也适用其他服务。…...

JAVA中spring介绍

Spring框架是一个开源的Java平台&#xff0c;它最初由Rod Johnson于2003年创建&#xff0c;目的是简化企业级应用的开发。Spring框架的核心特性包括控制反转&#xff08;IoC&#xff09;、面向切面编程&#xff08;AOP&#xff09;、事务管理、数据访问等。它通过提供一套综合的…...

latex下载与安装

用jupyter导出pdf时&#xff0c;需要用到Tex 1.Tex下载安装 官网 直接git下载 git clone https://github.com/latex3/latex2e.git 或者 清华大学开源软件镜像 双击.bat文件 大概需要1-2小时&#xff0c;如果安装失败&#xff0c;重新进行安装 查看是否安装成功&#xff…...

JavaParser 手动安装和配置

目录 前言 一、安装 Maven 工具 1.1 Maven 软件的下载 1.2 Maven 软件的安装 1.3 Maven 环境变量配置 1.4 通过命令检查 Maven 版本 二、配置 Maven 仓库 2.1 修改仓库目录 2.2 添加国内镜像 三、从 Github 下载 JavaParser 3.1 下载并解压 JavaParser 3.2 从路径打…...

再次度过我的创作纪念日

机缘 写博客的机缘巧合已经在上一篇博客中写到了&#xff0c;至于收获和成就也不一一赘述了。想和大家聊的呢就这最近这一年左右的经历吧 日常 自从2022年开始&#xff0c;入职了一家大型的项目外派公司&#xff0c;名字就不说了。开始了我的保险公司系统的开发工作。工作地点…...

云电脑火爆出圈,如何选择和使用?--腾讯云、ToDesk云电脑、青椒云使用评测和攻略

前言&#xff1a; Hello大家好&#xff0c;我是Dream。在当下&#xff0c;科技的飞速发展已经深入影响着我们的日常生活&#xff0c;特别是随着物联网的兴起和5G网络的普及&#xff0c;云计算作为一个重要的技术概念也逐渐走进了我们的视野。云计算早已不再是一个陌生的名词&am…...

webpack原理之-打包流程热更新HMR

webpack打包流程&#xff1f; 1. 初始化: 启动构建&#xff0c;读取与合并配置参数&#xff0c;加载Plugin&#xff0c;实例化Compiler&#xff1b; 2. 编译: 从 entry出发&#xff0c;针对每个 Module 串行调用对应的 loader 去翻译文件的内容&#xff0c;再找到该 Module 依赖…...

SELinux详解

文章目录 SELinux详解什么是SELinux当初设计的目标&#xff1a;避免资源的误用传统的文件权限与账号主要的关系&#xff1a;自主访问控制(DAC)以策略规则制定特定进程读取特定文件&#xff1a;强制访问控制(MAC) SELinux的运行模式安全上下文进程与文件SELinux类型字段的相关性…...

Go语言实现SSE中转demo

Go语言实现SSE中转demo 文章概要&#xff1a;本文主要通过一个demo来介绍如何使用Go语言实现SSE中转。 本文内容来自&#xff1a;谷流仓AI - ai.guliucang.com 前提 已安装Go语言环境&#xff08;参考这篇文章:Macbook安装Go以及镜像设置&#xff09; 创建项目 创建项目目录…...

国内IP修改软件下载指南

在互联网时代&#xff0c;IP地址扮演了一个非常重要的角色。国内IP修改成为一些用户迫切需求的问题&#xff0c;因为它可以帮助用户解决一些特定的网络访问问题。那么&#xff0c;要修改国内IP地址&#xff0c;我们该使用哪些软件呢&#xff1f;虎观代理小二将为大家列举几款可…...

模数转换器 SIG1230A 国产平替 ADS1230,替代 ADS1230

信格勒微电子的芯片产品已通过行业头部大厂导入验证&#xff0c;深受百万终端客户好评。 而且因为 fully compatible. 板子拿来&#xff0c;换个芯片&#xff0c; 性能更好 。MCU不用改 c code。 SIG1230A 10/80SPS 20-bit ADC with PGA Compatible Parts ADS1230 fully…...

获取淘宝商品评论的爬虫技术分享(已封装API,可测试)

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,it…...

由vue2版本升级vue3版本遇到的问题

一、vuedraggable 由vue2版本升级vue3版本后&#xff0c;可能会遇到以下几种bug&#xff1a; 1、vue3vuedraggable报错TypeError: Cannot read properties of undefined (reading ‘updated’)&#xff1a;这个一般是因为插件使用语法有问题&#xff0c;vue3版本的插件使用时&…...

数据挖掘终篇!一文学习模型融合!从加权融合到stacking, boosting

模型融合&#xff1a;通过融合多个不同的模型&#xff0c;可能提升机器学习的性能。这一方法在各种机器学习比赛中广泛应用&#xff0c; 也是在比赛的攻坚时刻冲刺Top的关键。而融合模型往往又可以从模型结果&#xff0c;模型自身&#xff0c;样本集等不同的角度进行融合。 数据…...

24考研数学炸了,给25考研人的启示

复习原则和要素 在选择老师、思路的时候&#xff0c;一定要看清楚&#xff0c;认不认可这个老师的复习思路。 有的老师认为大家基础不错&#xff0c;讲的内容可能不会特别细致。有的老师注重基础&#xff0c;讲的很细致&#xff0c;防止0基础的学生吃力。所以&#xff0c;思路…...

嵌入式学习第三十天!(单向链表练习)

1. 单向链表的逆序&#xff1a; int Is_Empty_Link(LINK_LIST *plist) {return plist->phead NULL; }void Reverse_Link(LINK_LIST *plist) {LINK_NODE *ptmp plist->phead;LINK_NODE *pinsert NULL;plist->phead NULL;if(Is_Empty_Link(plist)){return;}else{wh…...

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统&#xff0c;ip为&#xff1a;192.168.6.6 2G运存 连接外网 Jenkins需要java环境&#xff0c;java的jdk包你可以去网上下载离线包&#xff0c;或者直接去yum安装&#xff0c;我这里使用的是yum安装 再去获取Jenkins的rpm包…...

新能源汽车充电桩站点烟火AI识别检测算法应用方案

新能源汽车作为现代科技与环保理念的完美结合&#xff0c;其普及和应用本应带给人们更加便捷和绿色的出行体验。然而&#xff0c;近年来新能源汽车充电火灾事故的频发&#xff0c;无疑给这一领域投下了巨大的阴影。这不禁让人深思&#xff0c;为何这一先进的交通工具在充电过程…...

Macbook安装Go以及镜像设置

Macbook安装Go 文章概要&#xff1a;本文主要介绍了在MacOS上安装Go的步骤 本文内容来自&#xff1a;谷流仓AI - ai.guliucang.com 有两种方式安装go&#xff1a; 通过homebrew安装通过Go官网直接下载安装文件安装 1. 通过homebrew安装 brew update && brew install…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...