Feign(负载均衡与熔断粗浅理解)

一、负载均衡

        用户请求服务,当用户群体过大或者项目本身过大,只开启一个服务端口会造成服务器负担过重,因此需要多线程实例,从而分担单一机器的压力 。但在项目部署过程中,如果后端对于多线程项目不加以控制(参考java基础练习中多线程实例 -- 四窗口卖票100张),会出现同一台机器接收请求过多甚至只有一台机器接收请求,所以需要负载均衡。

二、熔断

        大型项目中,每一项功能调用链会很长,即程序员为了简化操作和便于理解,调用过程会持续成:A--->B--->C--->D--->E,利用框架底层的算法等会大大减少程序员的工作。但同时也因为调用过多,当在某一个节点调用过程中出现用户等待时间过长造成拥挤的情况,节点崩溃导致功能无法实现甚至系统崩溃(常见游戏加载人数过多、页面加载人数过多)。

熔断 -- 打断调用链提早结束不正常的调用

降级 -- 使某一个节点暂时退出系统减少接收请求量,等它恢复

三、Feign整合

        feign在SpringCloud中Ribbon是处理负载均衡,Hystrix是处理熔断和降级的,两者同时使用。

Feign定义接口规范用于声明用户调用的哪个服务及访问的哪个资源(注解方式,由底层实现)

接口声明调用的服务,方法声明访问的资源。

@EnableFeignClients  描述配置类,加于启动类,告诉底层启动feign starter组件

@FeignClient  在项目启动时,Feign Starter为此注解描述的接口创建实现类-代理类

Feign  底层基于ribbon组件实现负载均衡

Feign接口指向代理对象即feign接口的实现类对象

四、远程调用超时配置

        当Feign开启了熔断,默认的熔断超时时间只有1秒,这会导致服务的调用还没完成然后因为超时就被熔断。

feign:
  hystrix:
    enabled: true #false,true表示启动超时熔断机制
  client:
    config:
     default: #表示所有服务均采用此配置,通过 remoteProviderService 指定具体服务名。
        connectTimeout: 20000 #连接超时
        readTimeout: 20000 #读取数据超时

你可能感兴趣的:(负载均衡,java,运维)