1、什么是负载均衡
负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均分】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】
2、常见的负载均衡方案
2.1、正向代理
正向代理 是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回客户端。客户端必须要进行一些特别的设置才能使用正向代理。
比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,着取决了代理告不告诉网站。
用途:
- 访问原来无法访问的资源
- 可以做缓存,可以加速访问资源
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
2.2、反向代理
反向代理 实际运行方式是指以代理服务器来接受Internet上的链接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回Internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器
比如:我要访问localhost:8080/xxx/view这个页面,但是xxx对应的服务器并没有view这个资源,它是从另一台服务器上调用这个资源,这样的vies对应的那个服务器就使用了反向代理服务器,具体请求是由服务器统一处理的,用户并不需要知道。
用途:
- 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
- 负载均衡,通过反向代理服务器来优化网站的负载
3、spring cloud的 Netflix ribbon 和 feign 的区别
Ribbon:Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载它在联合 Eureka 使用时ribbonServerList 会被 DiscoveryEnabledNIWSServerList 重写,扩展成从 Eureka 注册中心获取服务端列表同时它也会用 NIWSDiscoveryPing 来取代 IPing,它将职责委托给 Eureka 来确定服务端是否已经启动。 使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐。
用法:
RestTemplate注入到容器中,@LoadBalanced注解使用默认负载均衡算法(可以使用自定义)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework