编程指南-学习建议编程指南-学习建议
首页
学习方向
技术学习
🚀 编程指南
首页
学习方向
技术学习
🚀 编程指南
  • 三、技术学习

    • 技术指南

      • 前端技术知识

        • 什么是前端?
      • 后端技术知识

        • 什么是缓存?
        • 什么是工作流技术?
        • 什么是反向压力?
        • 什么是热数据探测?
        • 数据库也能版本控制?
        • /tech-learning/guide/backend/how-search-engine-works.html
        • /tech-learning/guide/backend/learn-concurrency.html
        • /tech-learning/guide/backend/other-databases.html
      • 通用技术知识

        • 什么是前后端分离?
        • /tech-learning/guide/general/what-is-redirect.html
        • 什么是单例模式?
        • /tech-learning/guide/general/what-is-magic-value.html
        • 什么是负载均衡?
        • /tech-learning/guide/general/what-is-multi-env.html
        • /tech-learning/guide/general/what-is-magic-number.html
        • 什么是 Linux?
        • /tech-learning/guide/general/what-is-cloud-dev.html
    • 系统设计

      • 如何设计一个实时排行榜系统?
      • /tech-learning/system-design/elasticsearch-optimization.html
      • /tech-learning/system-design/file-upload.html
      • /tech-learning/system-design/log-system.html
      • /tech-learning/system-design/software-sword.html
      • 如何设计好 API 接口?
      • /tech-learning/system-design/sdk-development.html
      • /tech-learning/system-design/architecture-design.html
      • /tech-learning/system-design/release-stability.html
    • 开发经验

      • 解决 Bug 经验
      • 如何快速上手新项目?
      • /tech-learning/dev-experience/enterprise-software.html
      • /tech-learning/dev-experience/opensource-contribute.html
      • 什么是代码规范?为什么要遵循代码规范?
      • /tech-learning/dev-experience/company-standards.html
      • /tech-learning/dev-experience/code-reuse.html
      • /tech-learning/dev-experience/quick-website.html
      • /tech-learning/dev-experience/vscode-remote.html
      • /tech-learning/dev-experience/linux-vm-remote.html
      • /tech-learning/dev-experience/young-contributor.html
      • /tech-learning/dev-experience/no-force-shutdown.html
      • /tech-learning/dev-experience/no-hardcode.html
      • /tech-learning/dev-experience/backend-attention.html
      • 千万别直接敲代码!(写代码前要做的事)
      • /tech-learning/dev-experience/project-attention.html
      • /tech-learning/dev-experience/website-online.html
      • /tech-learning/dev-experience/tech-selection.html

什么是负载均衡?

负载均衡是分布式系统中很重要的概念,今天来聊聊。

什么是负载均衡

简单说,负载均衡就是把请求分散到多台服务器上。

举个例子:

  • 你一个人窗口买票,队伍排得很长
  • 开10个窗口,队伍就短多了

负载均衡就是这10个窗口,把用户的请求分散开。

为什么需要负载均衡

单台服务器扛不住

一台服务器能处理的请求是有限的。双十一那么多人访问淘宝,一台服务器肯定不行。

提高可用性

如果只有一台服务器,挂了就全挂了。

有多台服务器,挂了一台还有其他的顶着。

负载均衡的策略

轮询

一个一个来,第一个请求给服务器A,第二个给B,第三个给A……

最简单的策略。

加权轮询

性能好的服务器多分一点请求,性能差的少分一点。

随机

随机分配,简单粗暴。

最少连接

哪台服务器当前连接数最少,就分给哪台。

IP哈希

根据用户IP分配,同一个用户总是访问同一台服务器。

常见的负载均衡方案

Nginx

最常用的负载均衡方案。配置简单,性能很好。

upstream backend {
    server 192.168.1.1:8080;
    server 192.168.1.2:8080;
    server 192.168.1.3:8080;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

云厂商的负载均衡

阿里云的SLB、腾讯云的CLB、AWS的ELB。

不用自己搭,直接用,按量付费。

硬件负载均衡

F5、A10这些,很贵,一般大公司才用。

负载均衡的位置

客户端负载均衡

客户端自己决定请求发给哪台服务器。比如Spring Cloud的Ribbon。

服务端负载均衡

有一个统一的入口(比如Nginx),由它来分配请求。

面试会问

负载均衡是面试常考的内容:

  • 负载均衡有哪些策略?
  • Nginx怎么配置负载均衡?
  • 客户端负载均衡和服务端负载均衡的区别?

最后

负载均衡的核心思想是:分散压力。

单点扛不住就加机器,请求分散到多台机器上。

这是应对高并发的基本思路。

上次更新: 2025/12/7 09:34
Prev
/tech-learning/guide/general/what-is-magic-value.html
Next
/tech-learning/guide/general/what-is-multi-env.html