分布式负载均衡和熔断器

负载均衡

服务器为了提高并发性能、可用性一般会以集群方式部署。

负载均衡是将流量均匀的分配到每一台服务器上,从而实现集群作用的最大化。

负载均衡的分类:

服务器端实现:Nginx(软件)、F5(硬件)

 客户端实现:Ribbon基于注册中心实现,服务消费者调用服务提供者集群时,Ribbon通过注册中心拉取服务地址,通过特定的负载均衡策略实现服务调用。

 Ribbon的使用

1.引入Ribbon依赖,已经包含在Eureka-Client依赖中。

2.在配置类里面的RestTemplate加@LoadBalanced。


/**
 * 配置RestTemplate
 */
@Configuration
public class RestTemplateConfig {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3.调用提供者时自动生效。

Ribbon负载均衡的策略

Ribbon的负载均衡策略,都实现com.netflix.loadbalancer.IRule接口。

配置方法:

全局:
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.策略名称
局部:
服务名.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.策略名称类名

Hystrix的使用

Netflix提供的熔断器,能在服务出现长时间等待或崩溃的情况下提供一系列处理方法,解决服务雪崩的问题。

方法有:

熔断:当失败率达到一定的阈值,会触发熔断,进行快速失败。

降级:降级处理,返回兜底数据

缓存:对请求进行缓存、请求合并处理

实时监控、报警、控制等

使用步骤:

1.引入hystrix依赖

2.在启动类加 @EnableHystrix

3.在需要熔断降级的方法上添加注解 @HystrixCommand(fallbackMethod="降级方法名")

4.在同一个类中添加降级方法,返回兜底数据

@Service
public class ProductService {

    @Autowired
    private RestTemplate restTemplate;

    //熔断和降级
    @HystrixCommand(fallbackMethod = "getProductByIdFallback")
    public Product getProductById(Long id){
        //商品服务查询商品
        ResponseEntity<Product> entity =
                restTemplate.getForEntity("http://product-service/product/" + id, Product.class);
        return entity.getBody();
    }

    //降级方法
    public Product getProductByIdFallback(Long id){
        //兜底的商品对象
        return new Product(0L,"兜底商品",new BigDecimal("0"));
    }
}

Hystrix的资源隔离模式

Hystrix会为每个调用的方法(@HystrixCommand)分配一定的资源,资源之间相互隔离。

分为两种:

1.线程池隔离

2.信号量隔离

线程池隔离

服务消费者调用每个服务提供者时,都分配单独的线程池,进行远程的调用。

 线程池隔离的优缺点:

优点:1. 可以配置线程池的长度,从而对流量进行限流。
           2. 线程异步执行,并发效率高。

缺点:1.消耗系统资源较多。2.线程池的控制相对复杂。

信号量隔离

为每个调用方法设置信号量,当请求数超过信号量后就被丢弃。

信号量隔离的优缺点:

优点:1.占用资源少,2.控制简单。

缺点:功能相对简单。

配置:

线程池
hystrix.command.default.execution.isolation.strategy=THREAD
信号量
hystrix.command.default.execution.isolation.strategy=SEMAPHORE

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx是一种高性能的开源Web服务器和反向代理服务器,具有快速、轻量级、可扩展性强等特点。nginx的负载均衡功能是通过将请求分配到多个服务器节点上来实现的。nginx可以对请求进行多种方式的负载均衡,包括:轮询、IP Hash、least_conn、fair等等。nginx负载均衡的优点在于其高性能和稳定性,能够有效地提高应用程序的吞吐量和响应速度。 Spring Cloud是一套基于Spring Boot的分布式系统开发工具,具有服务注册与发现、服务调用、负载均衡熔断器、配置管理等功能。Spring Cloud负载均衡功能是通过Ribbon实现的,在服务调用时通过Ribbon发起请求,Ribbon会根据预定义的负载均衡算法将请求分配到不同的服务器节点上。Spring Cloud支持的负载均衡算法包括:ZoneAvoidanceRule、RandomRule、RoundRobinRule、WeightedResponseTimeRule等。Spring Cloud负载均衡功能具有简单易用、与Spring Boot集成度高等优点,同时也能有效地提高应用程序的负载能力和可用性。 总的来说,nginx和Spring Cloud都是具有负载均衡功能的工具,选择哪种工具取决于应用场景和需求。如果侧重于高性能和稳定性,可以选择用nginx进行负载均衡;如果侧重于简单易用和集成度高,可以选择使用Spring Cloud进行负载均衡。当然,两者也可以结合使用,在需要高性能和负载均衡时选择nginx,在需要简单易用和服务注册与发现时选择Spring Cloud,以达到更好的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值