nginx负载均衡简介:
首先实现负载均衡比较常见的有nginx反向代理方式,水平扩展方式,一个项目部署多个,端口不一样即可,然后用nginx做负载均衡,客户端通过访问nginx的代理地址,由nginx根据负载均衡策略选择哪个实例提供服务。
而Fegin是基于Ribbon实现的负载均衡,我们只需要把服务名一样,端口不一样的微服务注册到EUREKA,则Fegin客户端调用时将会自动启用负载均衡策略,无需我们用nginx代理。
网上抄一段 Feign和Ribbon区别
Ribbon
Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器
它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载
它在联合 Eureka 使用时
ribbonServerList 会被 DiscoveryEnabledNIWSServerList 重写,扩展成从 Eureka 注册中心获取服务端列表
同时它也会用 NIWSDiscoveryPing 来取代 IPing,它将职责委托给 Eureka 来确定服务端是否已经启动
Feign
Spring Cloud Netflix 的微服务都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient 或 Spring 的 RestTemplate 去调用
而 Feign 是一个使用起来更加方便的 HTTP 客户端,它用起来就好像掉用本地方法一样,完全感觉不到是调用的远程方法
总结起来就是:发布到注册中心的服务方接口,是 HTTP 的,也可以不用 Ribbon 或者 Feign,直接浏览器一样能够访问
只不过 Ribbon 或者 Feign 调用起来要方便一些,最重要的是:它俩都支持软负载均衡
注意:spring-cloud-starter-feign 里面已经包含了 spring-cloud-starter-ribbon(Feign 中也使用了 Ribbon)
Feign是在 Ribbon的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端
从实践上看,采用feign的方式更优雅(feign内部也使用了ribbon做负载均衡)。
Feign默认就是支持负载均衡的,默认是使用的轮询的方式,测试效果需要部署2个服务提供方,这个和nginx代理一样,nginx代理实现负载均衡也是要部署集群服务的。
一.Feign负载均衡效果测试
1.在启动一个pes-service-02实例,和8013端口的pes-service-02组成集群
1.1 idea已经启动了一个,另外一个就直接打包jar启动了
1.2 打包后把端口改为8014,服务名称依然是 pes-service-02
1.3 启动第二个pes-service-02微服务
1.4 前往Eureka查看,发现pes-service-02下8013,8014端口的微服务都成功挂上了
pes-service-02集群部署成功
1.5 用postman测试 Feign 微服务调用
第一次调用
Feign去访问了8084端口的pes-service-02微服务