24 | 负载均衡架构:如何用10行代码实现一个负载均衡服务?
李智慧
该思维导图由 AI 生成,仅供参考
负载均衡是互联网系统架构中必不可少的一个技术。通过负载均衡,可以将高并发的用户请求分发到多台应用服务器组成的一个服务器集群上,利用更多的服务器资源处理高并发下的计算压力。
那么负载均衡是如何实现的,如何将不同的请求分发到不同的服务器上呢?
早期,实现负载均衡需要使用专门的负载均衡硬件设备,这些硬件通常比较昂贵。随着互联网的普及,越来越多的企业需要部署自己的互联网应用系统,而这些专用的负载均衡硬件对他们来说成本太高,于是出现了各种通过软件实现负载均衡的技术方案。
HTTP 重定向负载均衡
HTTP 重定向负载均衡是一种比较简单的负载均衡技术实现。来自用户的 HTTP 请求到达负载均衡服务器以后,负载均衡服务器根据某种负载均衡算法计算得到一个应用服务器的地址,通过 HTTP 状态码 302 重定向响应,将新的 IP 地址发送给用户浏览器,用户浏览器收到重定向响应以后,重新发送请求到真正的应用服务器,以此来实现负载均衡。
这种负载均衡实现方法比较简单,如果是用 Java 开发的话,只需要在 Servlet 代码中调用响应重定向方法就可以了。在简化的情况下,只需要不到十行代码就可以实现一个 HTTP 重定向负载均衡服务器。
HTTP 重定向负载均衡的优点是设计比较简单,但是它的缺点也比较明显,一方面用户完成一次访问,就需要请求两次数据中心,一次请求负载均衡服务器,一次是请求应用服务器,请求处理性能会受很大的影响。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
负载均衡技术在互联网系统架构中扮演着重要角色,本文介绍了几种负载均衡技术方案。首先是HTTP重定向负载均衡,虽然简化了负载均衡的实现,但存在性能和安全性问题,因此实践中很少使用。其次是DNS负载均衡,被大型互联网应用广泛采用,通过在DNS域名解析时返回不同的IP地址实现负载均衡,且不会存在性能和安全性问题。另一种是反向代理负载均衡,适用于小规模系统,工作在HTTP协议层。IP负载均衡则在TCP/IP协议的IP层进行负载均衡,效率更高,但存在流量瓶颈。最后是数据链路层负载均衡,通过修改数据链路层的网卡mac地址实现负载均衡,避免了流量瓶颈,被大型互联网应用广泛采用。总的来说,不同的负载均衡技术方案各有优劣,应根据实际需求选择合适的方案。负载均衡算法也是实现负载均衡的关键,主要包括轮询、随机、最少连接等几种。随着互联网技术的发展与普及,负载均衡已经成为最常用的分布式技术之一,使用也变得简单。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》,新⼈⾸单¥59
《后端技术面试 38 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(15)
- 最新
- 精选
- 旅途智慧老师 问一个问题 mac负载均衡能直接返回客户端是因为 和负载均衡节点一样配置了外网ip吗?这块客户端和服务端的交互 感觉还是不太清晰 麻烦您再详细讲下
作者回复: 是的,应用服务器和负载均衡服务器IP地址一样
2020-01-3134 - 天天向上HTTP层比IP层多了处理环节,因此说HTTP 协议相对说来比较重?!
作者回复: 可以这么说。主要是处理HTTP协议需要消耗更多的计算机资源。
2020-01-312 - 苏志辉IP层负载均衡为什么返回的不是网关地址而是200.10.10.1
作者回复: 谢谢指正,尽快修正~
2020-01-172 - 丶二月二请教下,写了一个简易的HTTP重定向负载均衡,发现客户端没有主动将body发给重定向后的url,有什么参数可以控制嘛?还是只能客户端内部做逻辑处理
作者回复: 重定向是HTTP协议约定的,是由客户端发起的,需要客户端处理。
2021-11-173 - Paul Shan负载均衡是为了让不同服务器处理不同的请求,在服务器上平均分配任务,如何分配任务就成了不同解决方案本质所在。HTTP重定向是用专门的HTTP服务器来对每个请求分配服务器,这样每个请求需要两次HTTP访问,效率低下。DNS负载均衡是在IP地址和域名映射转化的地方做文章,效率明显提升。DNS只解决公网上的负载均衡,服务器集群内部也需要负载均衡。这项任务有三种解决方案,分别在HTTP层,IP层和数据链路层做文章。HTTP层属于高层协议,也就是所有协议都处理一遍才知道最终要去那个应用服务器,而且不在内核中处理,效率最差。IP层的路由分发效率高一点,因为不用打开HTTP层了,而且全在内核中解析。但是IP是服务器的全局地址,在这一层做分发,势必每个包的接和收都得分发。数据链路层的负载均衡效率更高,原因在于一方面不用再打开到IP层了,而且IP地址没改过,包回来的时候就不用再处理了,这样就大大减轻了负载均衡服务器的工作量。2020-03-0118
- escray专栏好像没有提到硬件负载均衡 F5 或者 A10,虽然贵,但是性能强大,支持百万以上并发,并且还具备防火墙、防 DDoS 攻击等安全功能。 实现了 IP 负载均衡和链路层负载均衡的 LVS 是 4 层负载均衡,与协议无关,性能是十万级,传说可达 80 万/秒; 应用层负载均衡,Nginx 是 7 层负载均衡,可以支持 HTTP、E-mail 协议,性能大概是 5 万/秒。 大概一般的互联网平台,如果用户的地理分布比较广泛,那么先上 DNS 的地理级别负载均衡(域名商提供,一般免费); 如果流量正的很大,或者土豪,那么就在当地机房上集群级别的硬件负载均衡 F5,在我的印象里面,似乎维基百科也没有使用硬件负载均衡; 进入当地机房以后,可以再使用机器级别的负载均衡 Nginx 将用户请求发送给及群众的某台机器。 也可以采用级联的方式,一级用 F5,二级用 LVS,三级用 Nginx。我觉的一般人用不到这个方案。 参考《从零开始学架构》中有关高性能负载均衡的章节。2020-10-0712
- 不要挑战自己的智商1, HTTP 302 Redirection LB: the client app needs to send the requests twice to reach the target server. IP of application server is exposed to public, thus weaken the security. This method is rarely used. 2. DNS LB. Widly used. Configured at the DNS provider table. No coding. 3. reserse proxy: works on HTTP layer, needs to open and parse the HTTP protocol. Serves as a cache in front of the applicaiton server. 4. IP LB. More efficient than reverse proxy. By chaning the destination IP to a private IP, the request is forwarded to the target server. Meanwhile, all responses have to go through this LB, which adding more load to this single point. 5. Link layer LB: LB and server have same IP, different mac address. The responses would not need to pass through the LB, but going to client directly.2022-09-30归属地:美国1
- 非同凡想nginx与lvs该怎么选,有不有什么原则?2020-03-2821
- test1. 硬件负载均衡:支持百万以上 2. 软件负载均衡: 2.1 HTTP重定向:访问HTTP重定向负载均衡服务器获得新的地址后访问 2.2 DNS负载均衡:访问DNS或者地址后访问 2.3 反向代理:反向代理有资源则返回,无资源则请求下游服务器。nginx,通过将请求分发来实现。性能是5 万级别 2.2 LVS:性能是十万级 2.2.1 IP层:请求到达负载均衡后,负载均衡服务器在操作系统内核修改IP地址 2.2.2 数据链路层负载均衡:解决响应数据量大而导致的负载均衡服务器输出带宽不足的问题。负载均衡服务器修改mac地址,而服务器和下游应用服务器共享相同的虚拟IP,所以应用服务器处理完之后不用再把response返回负载均衡服务器去修改IP以返回给客户端,而是直接返回给客户端。2022-11-06归属地:广东
- 鱼LVS工作在IP层和链路层,为什么常常被称作4层负载均衡呢?2021-02-041
收起评论