一, 什么是
负载均衡(Load Balance,简称 LB)是高并发、app开发定制高可用系统必不可少的关键组件,app开发定制目标是尽力将网络流量app开发定制平均分发到多个服务器上,app开发定制以提高系统整体的响应app开发定制速度和可用性。
二,app开发定制负载均衡的主要作用
高并发:app开发定制负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力()。
伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。
高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。
安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。
三,负载均衡分类
支持负载均衡的技术很多,我们可以通过不同维度去进行分类。负载均衡并不只是nginx.
3.1 载体维度分类
从支持负载均衡的载体来看,可以将负载均衡分为两类:硬件负载均衡、软件负载均衡
3.2 硬件负载均衡
硬件负载均衡,一般是在定制处理器上运行的独立负载均衡服务器,价格昂贵,土豪专属。硬件负载均衡的主流产品有:F5 和 A10。
硬件负载均衡的 优点:
- 功能强大:支持全局负载均衡并提供较全面的、复杂的负载均衡算法。
- 性能强悍:硬件负载均衡由于是在专用处理器上运行,因此吞吐量大,可支持单机百万以上的并发。
- 安全性高:往往具备防火墙,防 DDos 攻击等安全功能。
硬件负载均衡的 缺点:
- 成本昂贵:购买和维护硬件负载均衡的成本都很高。
- 扩展性差:当访问量突增时,超过限度不能动态扩容。
3.3 软件负载均衡
软件负载均衡,应用最广泛,无论大公司还是小公司都会使用。
软件负载均衡从软件层面实现负载均衡,一般可以在任何标准物理设备上运行。
软件负载均衡的 主流产品 有:Nginx、HAProxy、LVS。
- LVS 可以作为四层负载均衡器。其负载均衡的性能要优于 Nginx。
- HAProxy 可以作为 HTTP 和 TCP 负载均衡器。
- Nginx、HAProxy 可以作为四层或七层负载均衡器。
软件负载均衡的 优点:
- 扩展性好:适应动态变化,可以通过添加软件负载均衡实例,动态扩展到超出初始容量的能力。
- 成本低廉:软件负载均衡可以在任何标准物理设备上运行,降低了购买和运维的成本。
软件负载均衡的 缺点:
- 性能略差:相比于硬件负载均衡,软件负载均衡的性能要略低一些。
四, 使用
4.1 在服务消费者的启动类上加上 @Bean RestTemplate 类上加上@LoadBalance 注解
- @SpringBootApplication
- @EntityScan("com.zjk.order.com.zjk.product.entity")
- @EnableEurekaClient
- public class OrderApplication {
-
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
-
- public static void main(String[] args) {
- SpringApplication.run(OrderApplication.class,args);
- }
- }
4.2 服务消费者调用服务提供者的时候,只需要调用服务提供者的服务名称
- /**
- * 基于ribbon 的服务调用,使用服务提供者的服务名称
- * @param Id
- * @return
- */
- @GetMapping(value = "/findByIdByRibbon/{Id}")
- public TbProduct findByIdByRibbon(@PathVariable Long Id){
- try {
- TbProduct tbProduct = restTemplate.getForEntity("http://service-product/product/{Id}", TbProduct.class,Id).getBody();
- return tbProduct;
- }catch (Exception e){
- e.printStackTrace();
- }
- return null;
- }
4.3 展示效果
访问消息消费者接口,通过数据的变化,来查看调用服务的不同。