Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡 以及 远程调用
目录
Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡
Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡
Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。
它们之间的关系像是:
客户端发送某个查询请求,先通过nginx反向代理,nginx采用负载均衡到后台某一指定服务器接口但是该服务器接口业务逻辑的实现依赖于其他服务,因此内部还需要远程调用其他服务。
由因为需要被远程调用的服务也是集群模式,因此需要本地负载均衡。
而ribbon就是本地负载均衡的客户端工具。
Nacos、Eureka这些注册中心内部都内置了Ribbon,因此不需要我们额外引入依赖。
我们可以通过RestTemplate、OpenFeign等工具实现远程调用。
而OpenFeign自带负载均衡配置项,不需要再单独配置。
但是RestTemplate需要加上@LoadBalanced注解来完成远程调用的负载均衡。
Nacos中集成了Ribbon,可以实现本地负载均衡。也即是我们RestTemplate进行远程调用某一集群服务的时候,就可以实现轮询。前提是RestTemplate的bean对象必须添加@LoadBalanced注解,赋予RestTemplate负载均衡的能力,负载均衡才可以。
当然了,远程调用,我们除了使用RestTemplate,也可以使用OpenFeign的方式。
举例说明:
被调用的服务:
sms系统,我们模拟两台,都注册到nacos注册中心上去。我们提供了被调用的测试接口为:/test1
远程调用服务:
同样需要加入到nacos注册中心,
然后我们通过springmvc提供的RestTemplate进行远程调用刚才sms系统提供的/test接口。
使用restTemplate,我们最好将他创建为单例bean。因为被远程调用的服务是集群,所以必须@LoadBalanced注解。
测试
我们直接通过访问pps服务的/pps/ok接口,看看是否能调用到sms系统的/test接口
可以,而且是轮询的在调用。
如果不想使用RestTemplate,也可以使用OpenFeign进行远程调用。
使用OpenFeign,则需要引入相关的依赖
主启动类需要加上@EnableFeignClients注解
然后远程调用接口
编写测试方法测试
成功,以上两种方式进行远程调用,都可以实现负载均衡~
当然除了这些,HttpClient也可以实现远程调用,Java自带的HttpUrlConnection也可以。至于它们能否实现对集群的访问,这里就不研究了。
我们实际开发中,更倾向于使用openfeign进行远程调用。它的书写方式和日常开发接口很相似。
OpenFeign默认超时时间
OpenFeign默认超过1s没有返回结果直接报超时异常。
下面我们模拟看看:
下面重启项目,测试访问
控制台直接报超时异常
但是使用restTemplate进行远程调用的方式不存在这个超时的问题。
修改OpenFeign的默认超时时间
默认Feign客户端只等待一秒钟,但是服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接返回报错。
为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制。
OpenFeign的日志监控
Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。
说白了就是对Feign接口的调用情况进行监控和输出。
它提供的日志级别有如下四种:
使用的方式很简单:
ok,直接测试接口,成功!
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击