windows服务如何做到负载均衡 nigx负载均衡原理?

[更新]
·
·
分类:互联网
1426 阅读

windows服务如何做到负载均衡

nigx负载均衡原理?

nigx负载均衡原理?

所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游的应用服务器,这样即使某一个服务器宕机也不会影响请求的处理,或者当应用服务器扛不住了,可以随时进行扩容。
在 x 轴上,可以通过横向扩展应用服务器集群,Nginx 基于 Round-Robin 或者 Least-Connected 算法分发请求。但是横向扩展并不能解决所有问题,当数据量大的情况下,无论扩展多少台服务,单台服务器数据量依然很大。
在 y 轴上,可以基于 URL 进行不同功能的分发。需要对 Nginx 基于 URL 进行 location 的配置,成本较高。
在 z 轴上可以基于用户信息进行扩展。例如将用户 IP 地址或者其他信息映射到某个特定的服务或者集群上去。
这就是 Nginx 的负载均衡功能,它的主要目的就是为了增强服务的处理能力和容灾能力。

springcloud-feign实现原理,如何实现负载均衡?

首先说明一下,feign只是一个声明式的Http客户端,提供以声明式的方式定义Http调用。本身并没有实现负载均衡,负载均衡是ribbon实现的,feign只是使用而已。
我从不使用feign进行接口调用开始,到使用feign进行接口调用,来说明使用和不使用feign的区别以及如何实现负载均衡的。
不使用Feign的调用不使用Feign的情况下,进行接口调用,一般都是使用Spring提供的RestTemplate。RestTempate提供了很多调用接口的方法,你可以简单的把RestTemplate理解为是Spring提供的HttpClient。
如果要实现负载均衡,那么只需要加一个LoadBalanced注解,就像下面这样:
那它是怎么实现负载均衡的呢?简单梳理一下源码:
LoadBalancerAutoConfiguration中有下面这段代码,它会将所有有LoadBalanced注解的RestTemplate注入进来
然后通过下面的逻辑,将负载均衡逻辑给添加进去
RestTemplate会在执行之前,先执行拦截器,然后去执行最终的请求
而拦截器中有负载均衡逻辑
首先客户端从服务列表中获取到所有的服务列表信息
客户端按照负载均衡算法逻辑,选择一个服务进行调用具体代码流程比较复杂,这里不具体说明,后续可能会专门写几篇关于SpringCloud源码分析的文章问题使用RestTemplate有什么问题呢?
和RestTemplate强依赖,不利于扩展或重构
和本地接口调用方式不统一
我们来看看使用Feign后会变成什么情况。使用Feign假设我要调用一个远程接口,获取用户的信息。那么我们可以这么写:
1处,注解UserApiService为FeignClient,其中的name是需要调用的应用的AppName,即注册到注册中心上的名字
2处,声明调用的接口的地址和Method,这里是/api/getuserinfo,GET请求。1、2结合,即该接口访问的地址是GET http://USER/api/getuserinfo3处,请求的参数。完整的请求是GET http://USER/api/getuserinfo?userNameivanamppassword123456怎么调用呢?
调用方式是不是和普通的接口一样?调用端根本就不必关系UserApiService是一个本地实现,还是一个远程调用。这就解决了上面提到的两个问题。