从零手写实现 nginx-31-load balance 负载均衡介绍

打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

媒介

大家好,我是老马。很高兴遇到你。
我们为 java 开发者实现了 java 版本的 nginx
https://github.com/houbb/nginx4j
如果你想知道 servlet 如何处置惩罚的,可以参考我的另一个项目:
手写从零实现简易版 tomcat minicat
手写 nginx 系列

如果你对 nginx 原理感兴趣,可以阅读:
从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?
从零手写实现 nginx-02-nginx 的核心能力
从零手写实现 nginx-03-nginx 基于 Netty 实现
从零手写实现 nginx-04-基于 netty http 出入参优化处置惩罚
从零手写实现 nginx-05-MIME范例(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展范例)
从零手写实现 nginx-06-文件夹自动索引
从零手写实现 nginx-07-大文件下载
从零手写实现 nginx-08-范围查询
从零手写实现 nginx-09-文件压缩
从零手写实现 nginx-10-sendfile 零拷贝
从零手写实现 nginx-11-file+range 合并
从零手写实现 nginx-12-keep-alive 连接复用
从零手写实现 nginx-13-nginx.conf 配置文件介绍
从零手写实现 nginx-14-nginx.conf 和 hocon 格式有关系吗?
从零手写实现 nginx-15-nginx.conf 如何通过 java 解析处置惩罚?
从零手写实现 nginx-16-nginx 支持配置多个 server
从零手写实现 nginx-17-nginx 默认配置优化
从零手写实现 nginx-18-nginx 请求头+响应头利用
从零手写实现 nginx-19-nginx cors
从零手写实现 nginx-20-nginx 占位符 placeholder
从零手写实现 nginx-21-nginx modules 模块信息概览
从零手写实现 nginx-22-nginx modules 分模块加载优化
从零手写实现 nginx-23-nginx cookie 的利用处置惩罚
从零手写实现 nginx-24-nginx IF 指令
从零手写实现 nginx-25-nginx map 指令
从零手写实现 nginx-26-nginx rewrite 指令
从零手写实现 nginx-27-nginx return 指令
从零手写实现 nginx-28-nginx error_pages 指令
从零手写实现 nginx-29-nginx try_files 指令
从零手写实现 nginx-30-nginx proxy_pass upstream 指令
从零手写实现 nginx-31-nginx load-balance 负载均衡
从零手写实现 nginx-32-nginx load-balance 算法 java 实现
nginx 负载均衡是什么?

Nginx 负载均衡,就像一个聪明的分餐员,帮你把大量订单均匀地分配给不同的大厨,让每个大厨都能忙而不乱,最终让顾客都能快速拿到本身的餐品。
例子

假设你经营了一家非常受欢迎的餐馆,来吃饭的顾客特别多。
如果只有一个大厨来做饭,他很快就会忙不外来,顾客就得等很久。为了进步服从,你雇了好几个大厨,每个大厨都能做雷同的菜。

  • 负载均衡器(Load Balancer):Nginx 就像餐馆的一个聪明分餐员,他的工作就是接到订单后,把订单均匀地分给每个大厨。这就叫负载均衡。
具体场景:


  • 客户请求:很多顾客来点餐(客户端请求)。
  • Nginx 分发请求:Nginx 分餐员接到订单后,把订单分配给不同的大厨(后端服务器)。
  • 大厨处置惩罚请求:每个大厨根据分配到的订单做菜(处置惩罚请求),然后把做好的菜(响应)交给分餐员。
  • 返回效果:分餐员把菜送到顾客手中(返回响应给客户端)。
举个例子:
  1. http {
  2.     upstream my_backend {
  3.         server 192.168.0.1;
  4.         server 192.168.0.2;
  5.         server 192.168.0.3;
  6.     }
  7.     server {
  8.         listen 80;
  9.         server_name www.example.com;
  10.         location / {
  11.             proxy_pass http://my_backend;
  12.         }
  13.     }
  14. }
复制代码

  • upstream my_backend:定义了三位大厨的 IP 地点(后端服务器)。
  • proxy_pass http://my_backend:Nginx 分餐员接到顾客的订单后,会把订单均匀地分给这三位大厨处置惩罚。
总结

Nginx 负载均衡的目标是通过均匀分配请求,确保每台服务器(大厨)都不至于过载,从而提升整体系统的服从和可靠性。
这样,每个顾客都能更快地得到服务,整个餐馆的运营也更加顺畅。
nginx 支持哪些负载均衡算法?给出对应的例子

Nginx 支持多种负载均衡算法,可以根据不同的需求来选择符合的算法。以下是主要的几种负载均衡算法及其配置示例:
1. 轮询(Round Robin)

这是 Nginx 默认的负载均衡算法。请求依次分配给每个后端服务器,按顺序循环。
  1. upstream my_backend {
  2.     server 192.168.0.1;
  3.     server 192.168.0.2;
  4.     server 192.168.0.3;
  5. }
  6. server {
  7.     listen 80;
  8.     server_name www.example.com;
  9.     location / {
  10.         proxy_pass http://my_backend;
  11.     }
  12. }
复制代码
2. 权重轮询(Weighted Round Robin)

可以为每个服务器设置权重,权重越高,分配到的请求越多。
  1. upstream my_backend {
  2.     server 192.168.0.1 weight=3;
  3.     server 192.168.0.2 weight=2;
  4.     server 192.168.0.3 weight=1;
  5. }
  6. server {
  7.     listen 80;
  8.     server_name www.example.com;
  9.     location / {
  10.         proxy_pass http://my_backend;
  11.     }
  12. }
复制代码
3. 最少连接(Least Connections)

将新请求分配给当前活动连接数最少的服务器,实用于请求处置惩罚时间不均匀的情况。
  1. upstream my_backend {
  2.     least_conn;
  3.     server 192.168.0.1;
  4.     server 192.168.0.2;
  5.     server 192.168.0.3;
  6. }
  7. server {
  8.     listen 80;
  9.     server_name www.example.com;
  10.     location / {
  11.         proxy_pass http://my_backend;
  12.     }
  13. }
复制代码
4. IP 哈希(IP Hash)

根据客户端的 IP 地点分配请求,同一 IP 地点的请求会分配到同一台服务器上,实用于需要会话保持的场景。
  1. upstream my_backend {
  2.     ip_hash;
  3.     server 192.168.0.1;
  4.     server 192.168.0.2;
  5.     server 192.168.0.3;
  6. }
  7. server {
  8.     listen 80;
  9.     server_name www.example.com;
  10.     location / {
  11.         proxy_pass http://my_backend;
  12.     }
  13. }
复制代码
5. 一致性哈希(Hash)

根据用户定义的键(好比 URL、cookie 等)分配请求,确保雷同键的请求分配到同一台服务器。
  1. upstream my_backend {
  2.     hash $request_uri;
  3.     server 192.168.0.1;
  4.     server 192.168.0.2;
  5.     server 192.168.0.3;
  6. }
  7. server {
  8.     listen 80;
  9.     server_name www.example.com;
  10.     location / {
  11.         proxy_pass http://my_backend;
  12.     }
  13. }
复制代码
总结

Nginx 提供了多种负载均衡算法,包罗轮询、权重轮询、最少连接、IP 哈希和一致性哈希。
每种算法实用于不同的场景和需求,选择符合的算法可以提升系统的性能和可靠性。
通过配置 upstream 指令和相关参数,可以灵活地实现各种负载均衡策略。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表