分布式常见概念
分布式常见概念
- 反向代理
- 正向代理 vs 反向代理(对比理解名称)
- 正向代理示意(“我去帮你拿数据”)
- 反向代理示意(“你找我,我替你联系内部服务器”)
- 为什么叫“反向”?
- API网关
- 一、为什么需要 API 网关?
- 二、API 网关的核心功能
- 三、工作流程示意图(简化):
- 四、常见的 API 网关实现
- 五、举例说明
- 负载均衡(Load Balancing)
- 一、负载均衡的作用
- 二、负载均衡的分类
- 三、DNS 负载均衡(基于域名系统)
- 四、硬件负载均衡(如 F5、Citrix、H3C)
- 五、软件负载均衡(运行在普通服务器或容器中)
- 六、对比总结表
- 七、常见负载均衡工具和平台
- 八、实际部署组合建议
- 九、典型应用场景
反向代理
“反向代理”(Reverse Proxy)之所以叫“反向”,是相对于“正向代理”(Forward Proxy)而言的。我们先理解“正向代理”,然后对比就能明白“反向代理”名字的来源。
正向代理 vs 反向代理(对比理解名称)
代理类型 | 客户端视角 | 服务端视角 | 功能方向(代理谁) | 示例用途 |
---|---|---|---|---|
正向代理 | 代理客户端 | 服务端不知道真实客户端 | 代理客户端向服务器发请求 | 科学上网、访问被屏蔽网站 |
反向代理 | 客户端不知道真实服务器 | 代理服务器接收请求 | 代理服务器代理真实服务器 | 负载均衡、隐藏源站、加速网站 |
正向代理示意(“我去帮你拿数据”)
- 用户(客户端)配置一个代理服务器。
- 用户的请求先发给代理服务器,由代理代替用户向目标网站发起请求。
- 代理收到响应后,再返回给用户。
📌 特点:客户端知道自己用的是代理,服务器不知道谁是原始请求者。
反向代理示意(“你找我,我替你联系内部服务器”)
- 用户访问网站,请求发给一个代理服务器。
- 代理服务器决定将请求转发给哪个后端服务器(真实源站)。
- 用户不直接接触后端服务器,只与代理打交道。
📌 特点:客户端不知道后端服务器的存在,感觉就像访问的是反向代理本身。
为什么叫“反向”?
- 在正向代理中,客户端知道代理存在并主动使用它,代理代表“客户端”去访问外部世界。
- 在反向代理中,客户端无感知,代理是服务器部署的“防线”,代表“服务器”处理外部请求。
所以,“反向代理”这个名字强调的是方向变了:
正向代理是 客户端→代理→服务器,
反向代理是 客户端→代理(看似服务器)→真实服务器。
如果你还想知道反向代理和负载均衡、防火墙等功能模块的细节关系,我可以进一步展开。是否需要?
API网关
API 网关(API Gateway)是一个位于客户端与一组后端服务之间的服务器,作为所有客户端请求的唯一入口点。它的主要作用是接收客户端的 API 请求,路由到合适的后端服务,聚合结果,并返回给客户端。
一、为什么需要 API 网关?
在现代微服务架构中,一个系统通常由多个小的服务组成。如果客户端直接访问每个服务,会带来以下问题:
- 客户端需要维护多个服务的地址和通信逻辑;
- 每个服务可能有不同的认证、限流、安全要求;
- 请求可能需要访问多个服务来聚合数据,客户端需要承担复杂逻辑;
- 服务迁移或重构时客户端容易受到影响。
API 网关解决了这些问题。
二、API 网关的核心功能
功能 | 描述 |
---|---|
路由请求 | 根据 URL 或请求内容,把请求转发给相应的后端服务 |
请求聚合 | 聚合多个服务的响应,形成一个统一的返回结果 |
身份验证与授权 | 在统一入口进行用户身份认证(如 OAuth、JWT)、权限检查等 |
日志与监控 | 记录访问日志、请求耗时、错误信息,便于监控和调试 |
限流与熔断 | 控制请求频率,防止系统过载,提升系统稳定性 |
协议转换 | 如 HTTP 转 gRPC,或 SOAP 转 REST |
缓存 | 对一些频繁访问的数据进行缓存,提升响应速度 |
CORS处理 | 统一处理跨域资源共享(Cross-Origin Resource Sharing)问题 |
三、工作流程示意图(简化):
客户端|v
[ API 网关 ]| \| ---> 微服务 A| ---> 微服务 B| ---> 微服务 Cv返回聚合结果
四、常见的 API 网关实现
名称 | 特点 |
---|---|
Nginx | 可作为轻量级 API 网关,需手动编写配置 |
Kong | 基于 Nginx,功能强大,支持插件机制 |
Apigee | Google 提供的企业级网关,集成分析、认证等 |
AWS API Gateway | 云原生服务,与 AWS 服务集成紧密 |
Spring Cloud Gateway | Java生态,适用于 Spring 微服务架构 |
Zuul | Netflix 开源的旧网关,已逐步被替代 |
五、举例说明
假设你有三个微服务:
- 用户服务
/user/info
- 商品服务
/product/list
- 订单服务
/order/create
如果没有网关,客户端需要分别请求这三个服务。使用 API 网关后,只需请求统一入口,如:
GET /api/user/info --> 转发到用户服务
GET /api/product/list --> 转发到商品服务
POST /api/order/create --> 转发到订单服务
当然可以,以下是完整内容的重新编排版,结构更加清晰,从概念、作用,到各类型负载均衡的原理、对比、工具和应用建议,一步步递进:
负载均衡(Load Balancing)
负载均衡是指将来自客户端的请求合理分发到多个后端服务器(或节点)上,以提升系统的可用性、吞吐能力和响应速度,避免单点故障或过载。
一、负载均衡的作用
- 提升系统吞吐量:多个服务器并发处理请求,提升整体性能
- 提高系统可用性:某台服务器宕机,其它服务器接管请求,保障连续性
- 增强可扩展性:可随需扩容或缩容服务器节点
- 加快响应速度:流量分配至负载较轻或地理更近的服务器,提升体验
二、负载均衡的分类
按照实现方式和网络层级,常见的负载均衡可分为三类:
分类 | 层级 | 实现位置 |
---|---|---|
DNS 负载均衡 | L3/L4 | DNS 服务器 |
硬件负载均衡 | L4/L7 | 网络硬件设备(如 F5) |
软件负载均衡 | L4/L7 | 普通服务器或容器中运行的软件 |
三、DNS 负载均衡(基于域名系统)
DNS 服务器为一个域名配置多个 IP 地址(A 记录),客户端每次解析域名时会得到不同 IP,实现“伪轮询”。
example.com → [192.168.1.1, 192.168.1.2, 192.168.1.3]
✅ 优点:
- 成本低、实现简单
- 全球 CDN 常用,可结合 GeoDNS 实现地域调度
❌ 缺点:
- 缓存延迟高(TTL 问题)
- 无法判断服务器健康状态
- 不支持权重、会话保持等策略
四、硬件负载均衡(如 F5、Citrix、H3C)
使用专用硬件设备,将外部流量按特定策略转发到后端服务器,通常支持:
- L4:基于 IP+端口 的 TCP/UDP 分发
- L7:基于 HTTP 的 URI、Host、Header、Cookie 等转发
✅ 优点:
- 高性能、高吞吐、超低延迟
- 支持高级安全功能、DDoS 防护、SSL 卸载等
- 适合大型企业、金融系统等核心业务
❌ 缺点:
- 成本昂贵,维护复杂
- 扩展性差,不易集成到云原生架构中
五、软件负载均衡(运行在普通服务器或容器中)
通过通用软件(如 Nginx、HAProxy、Envoy、Traefik)处理和转发流量,可作为独立组件运行或嵌入微服务体系。
🔥 常见软件对比:
软件 | 特点 |
---|---|
Nginx | 高性能反向代理,支持 TCP/UDP,配置简单,静态场景优先 |
HAProxy | 专业级负载均衡器,稳定性强,支持丰富策略和健康检查 |
Envoy | 云原生友好,支持 gRPC、服务发现、熔断、链路追踪等 |
Traefik | 动态配置,适用于 K8s 和 Docker 等容器编排环境 |
✅ 优点:
- 支持动态服务发现,配置灵活
- 适配微服务与云环境,自动路由、自动注册
- 支持复杂的 L4/L7 策略(如权重、Header 路由等)
❌ 缺点:
- 高并发下需调优
- 依赖宿主资源,性能略逊硬件方案
六、对比总结表
类型 | 网络层级 | 成本 | 灵活性 | 健康检查 | 缓存延迟 | 适用场景 |
---|---|---|---|---|---|---|
DNS 负载均衡 | L3/L4 | 低 | 低 | ❌ 无 | 高 | 简单服务分发、CDN 地域分流 |
硬件负载均衡 | L4/L7 | 高 | 中 | ✅ 支持 | 低 | 金融、政企、大型数据中心入口流量管控 |
软件负载均衡 | L4/L7 | 低 ~ 中 | 高 | ✅ 支持 | 低 | 微服务架构、云原生环境、Kubernetes 集群 |
七、常见负载均衡工具和平台
工具/平台 | 类型 | 说明 |
---|---|---|
Nginx | 软件 | 轻量级,支持静态资源代理、反向代理等 |
HAProxy | 软件 | 高可靠、性能优异,适用于金融、电商、高并发系统 |
Envoy | 软件 | 服务网格核心组件,支持动态发现、gRPC、指标采集等 |
Traefik | 软件 | 云原生场景中首选,自动配置、支持热更新 |
F5 BIG-IP | 硬件 | 企业级设备,支持 SSL 卸载、会话保持等高级特性 |
LVS(Linux Virtual Server) | 内核模块 | 高性能,内核态转发,适合高吞吐部署 |
Kubernetes Ingress | 云原生组件 | 集群服务访问入口,支持基于域名/路径的转发规则 |
八、实际部署组合建议
现代架构常采用多种负载均衡方式的组合部署,以兼顾性能、灵活性和高可用:
- DNS + 软件负载均衡:DNS 将请求解析至多个 Nginx/HAProxy 节点,再由其进行转发
- 硬件负载均衡 + 云原生集群:使用 F5 作为集群入口,内部通过 Ingress 控制器管理流量
- 服务网格(如 Istio + Envoy):实现微服务间的透明通信与负载均衡,配合流控、链路追踪等能力
九、典型应用场景
- 网站访问分发:均匀调度用户请求至多台 Web 服务器,缓解热点
- 微服务调用控制:服务间调用通过 Envoy、Traefik 等实现自动路由与容错
- 高可用集群容灾:自动剔除宕机节点,保障业务连续性和用户体验
相关文章:
分布式常见概念
分布式常见概念 反向代理正向代理 vs 反向代理(对比理解名称)正向代理示意(“我去帮你拿数据”)反向代理示意(“你找我,我替你联系内部服务器”)为什么叫“反向”? API网关一、为什么…...
数据库的事务(Transaction)
在数据库中,事务(Transaction) 是保证数据操作一致性和完整性的核心机制。它通过一组原子性的操作单元,确保所有操作要么全部成功(提交),要么全部失败(回滚)。以下是数据…...

大语言模型 提示词的少样本案例的 演示选择与排序新突破
提示词中 演示示例的选择与排序 这篇论文《Rapid Selection and Ordering of In-Context Demonstrations via Prompt Embedding Clustering》聚焦于提升大语言模型(LLMs)在自适应上下文学习(ICL)场景中演示示例的选择与排序效率 一、论文要解决的问题 在上下文学习(ICL)…...

【算法篇】二分查找算法:基础篇
题目链接: 34.在排序数组中查找元素的第一个和最后一个位置 题目描述: 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返…...
Qtc++开发遇到的问题-按钮点击不管用?
我在设计自己的控件的时候,遇到了按钮点击不管用的问题,而且是有的自定义控件不管用,有的管用,有的一开始管用,多点几次就不管用了, 它是这样的,一个lineEdit和位于两侧的按钮,分别…...

重磅发布 | 复旦533页《大规模语言模型:从理论到实践(第2版)》(免费下载)
在人工智能浪潮席卷全球的今天,大语言模型正以前所未有的速度推动着科技进步和产业变革。从 ChatGPT 到各类行业应用,LLM 不仅重塑了人机交互的方式,更成为推动学术研究与产业创新的关键技术。 面对这一飞速演进的技术体系,如何系…...

智能体赋能效率,企业知识库沉淀价值:UMI企业智脑的双轮驱动!
智能体企业知识库:UMI企业智脑的核心功能与价值 在人工智能技术飞速发展的今天,企业智能化转型已经成为不可逆转的趋势。作为企业级AI智能体开发平台的佼佼者,优秘智能推出的UMI企业智脑,以其强大的智能体开发能力和全面的企业知…...
STM32CubeMX,arm-none-eabi-gcc简单试用
在windows下,为stm32系列单片机编程,keil有了免费的试用版,有很多开发板示例,给学习单片机编程带来很大的方便。 STM32CubeMX提供了stm32单片机的功能设置,在输出方式上给出了几种方式,有mdk(k…...
Spring AI(一)
Spring AI 官网 Spring AI 是一个用于 AI 工程的应用程序框架。其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI 领域,并将使用 POJO 作为应用程序的构建块推广到 AI 领域。 Spring AI 的核心是解决了 AI 集成的根本挑战:将您的企业数据和 API 与 A…...
Nacos适配GaussDB超详细部署流程
1部署openGauss 官方文档下载 https://support.huaweicloud.com/download_gaussdb/index.html 社区地址 安装包下载 本文主要是以部署轻量级为主要教程 1.1系统环境准备 操作系统选择 系统AARCH64X86-64openEuler√√CentOS7√Docker√√1.2软硬件安装环境 版本轻量版(单…...
vue-pure-admin动态路由无Layout实现解决方案
背景: 最近在使用vue-pure-admin开发后台项目的时候发现作者并没有动态路由的全屏无Layout实现方案。查询作者路由发现,作者只做了静态路由的无Layout方案,其它动态路由,作者在做整合的时候,都放进了 \ 下面的子路由&…...

vue项目 build时@vue-office/docx报错
我在打包vue项目时, 开始用的npm run build和cnpm run build,总是提示 vue-office/docx 错误,尝试过用cnpm重新安装node_modules几次都没用。类似下面的提示一直有。 Error: [commonjs--resolver] Failed to resolve entry for package "…...
卓力达蚀刻工艺:精密制造的跨行业赋能者
引言 蚀刻技术作为现代精密制造的核心工艺之一,通过化学或物理方法对金属材料进行选择性去除,实现微米级复杂结构的加工。南通卓力达凭借20余年技术积淀与全产业链布局,成为全球高端制造领域的重要支撑力量。本文将从蚀刻技术的多领域应用与…...
【大模型面试每日一题】Day 30:解释一下 FlashAttention 技术,并对比其与传统注意力在显存效率和计算性能上的差异。
【大模型面试每日一题】Day 30:解释一下 FlashAttention 技术,并对比其与传统注意力在显存效率和计算性能上的差异。 📌 题目重现 🌟🌟 面试官:解释一下 FlashAttention 技术,并对比其与传统注…...

#RabbitMQ# 消息队列入门
目录 一 MQ技术选型 1 运行rabbitmq 2 基本介绍 3 快速入门 1 交换机负责路由消息给队列 2 数据隔离 二 Java客户端 1 快速入门 2 WorkQueue 3 FanOut交换机 4 Direct交换机 5 Topic交换机 *6 声明队列交换机 1 在配置类当中声明 2 使用注解的方式指定 7 消息转…...
在promise中,多个then如何传值
在 JavaScript 中,Promise 的多个 .then() 是链式调用的,值可以通过返回值的方式,在多个 .then() 之间传递。这是 Promise 链式调用的核心机制。 基本原理:每个 then 接收上一个 then 的返回值 new Promise((resolve, reject) &g…...
TCP 三次握手过程详解
TCP 三次握手过程详解 一、TCP握手基础概念 1.1 什么是TCP握手 TCP三次握手是传输控制协议(Transmission Control Protocol)在建立连接时的标准过程,目的是确保通信双方具备可靠的双向通信能力。 关键结论:三次握手的本质是通过序列号同步和能力协商建立可靠的逻辑连接。 …...

EPT(Efficient Prompt Tuning)方法,旨在解决提示调优(Prompt Tuning)中效率与准确性平衡和跨任务一致性的问题
EPT(Efficient Prompt Tuning)方法,旨在解决提示调优(Prompt Tuning)中效率与准确性平衡和跨任务一致性的问题 一、核心原理:分解提示与多空间投影 1. 提示分解:用低秩矩阵压缩长提示 传统问题: 长提示(如100个token)精度高但训练慢,短提示(如20个token)速度快但…...

云原生安全核心:云安全责任共担模型(Shared Responsibility Model)详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 1. 基础概念 什么是云安全责任共担模型? 云安全责任共担模型(Shared Responsibility Model, SRM)是云服务提供商&…...

go并发与锁之sync.Mutex入门
sync.Mutex 原理:一个共享的变量,哪个线程握到了,哪个线程可以执行代码 功能:一个性能不错的悲观锁,使用方式和Java的ReentrantLock很像,就是手动Lock,手动UnLock。 使用例子: v…...

[Java恶补day8] 3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…...

LabVIEW教学用开发平台
一、培训目标 基础编程:掌握 LabVIEW 数据类型、程序结构、子 VI 设计与调试技巧。 硬件通信:精通 RS-232/485、TCP/IP、Modbus、PLC 等工业通信协议及实现。 高级设计模式:熟练运用状态机、生产者 - 消费者模式构建复杂测控系统。 项目实…...

Package Size Comparison – 6 Leads
Package Size Comparison 6 LeadsTSOP SOT SM SMT SOT23 SC-74 SC-59 SC-88 SOT363 US6 UMT6 SC-70 SOT563 ES EMT SC-75-6...

python打卡day38
Dataset和DataLoader 知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图片 在遇到大规模数据集时,…...

vLLM 核心技术 PagedAttention 原理详解
本文是 vLLM 系列文章的第二篇,介绍 vLLM 核心技术 PagedAttention 的设计理念与实现机制。 vLLM PagedAttention 论文精读视频可以在这里观看:https://www.bilibili.com/video/BV1GWjjzfE1b 往期文章: vLLM 快速部署指南 1 引言…...
rpm安装jenkins-2.452
rpm安装jenkins-2.452 一、下载和安装 1、Jenkins下载 版本2.452可用windows下载: https://mirrors.jenkins-ci.org/redhat-stable/jenkins-2.452.4-1.1.noarch.rpm 其他版本 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.440.3-1.1.noarch.rpm 2、jenkins安装 $r…...

《软件工程》第 2 章 -UML 与 RUP 统一过程
在软件工程领域,UML(统一建模语言)与 RUP(统一过程)是进行面向对象软件开发的重要工具和方法。接下来,我们将深入探讨第 2 章的内容,通过案例和代码,帮助大家理解和掌握相关知识。 …...

(转)Docker与K8S的区别
1 定义角度 Docker是一种开放源码的应用容器引擎,允许开发人员将其应用和依赖包打包成可移植的容器/镜像中;然后,发布到任何流行的 Linux 或 Windows 机器上,也能实现虚拟化。该容器完全使用沙箱机制,彼此之间没有任何…...
服务器数据迁移
写在前面:为满足业务需求,我们采购了一台新的高性能服务器,现在想把旧服务器中的用户文件以及conda环境等迁移到新服务器中去。为了保证迁移过程尽可能不出错,并且迁移后新的服务器可以直接使用,以下方案提供一个稳健、…...
VB.NET与SQL连接问题解决方案
1.基本连接步骤 使用SqlConnection、SqlCommand和SqlDataReader进行基础操作: vb.net Imports System.Data.SqlClient Public Sub ConnectToDatabase() Dim connectionString As String "ServermyServerAddress;DatabasemyDataBase;Integrated Security…...