SpringCloud
Posted dejavu-f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud相关的知识,希望对你有一定的参考价值。
Ribbon是什么?
- SpringCloud Ribbon是基于Netfix Ribbon实现的一套 客户端负载均衡的工具。
- 简单的说,Ribbon是Netfilx发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将NetFlix的中间层服务连接在一起。Ribbon的客户端组件提供一系列完整的配置项如:连接超时、重试等等。简单的说就是在配置文件中列出LoadBalancer( LB:负载均衡)后面所有的机器。Ribbon会自动地帮助你基于某种规则(如简单轮询,随机连接等)去连接折现机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
Ribbon能干什么?
- LB,即负载均衡(Load Balance)在微服务或分布式急群众经常用到的一种应用。
- 负载均衡简单的说就是将用户的请求平摊的分配到多个服务器上,从而达到系统的HA(高可用)。
- 常见的负载均衡软件有nginx,Lvs等等
- Dubbo、SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义
负载均衡简单分类:
- 集中式LB:
- 即在服务的消费方之间使用独立的LB设施,如Nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方。
- 进程式LB:
- 将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器。
- Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
Ribbon和Ereka整合后,客户端可以直接调用,不用关心IP地址
Ribbon负载均衡默认是遵循轮询访问
Ribbon负载均衡策略:
- AvailabilityFilteringRule:会先过滤掉,跳闸,访问故障的服务。对剩下的进行轮询
- RoundRobinRule:轮询
- WeightedResponseTimeRule:权重
- RandomRule:随机
- RetryRule:会先按照轮询获取服务,如果服务获取失败,则会再执行的时间内进行重试
- ...
Feign负载均衡
Feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似Controller调用Service。SpringCloud集成了Ribbon和Eureka,可使用Feign时提供负载均衡的http客户端。
Feign能干什么?
- Feign旨再使用Java Http客户端变得更容易
- Ribbon + RestTemplate时,利用RestTemplate对http请求进行封装处理,形成了一套模块化的调用方法,但在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都回用针对每个微服务自行封装一些客户端类包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(类似于DAO层接口上标注Mapper注解,现在时一个微服务接口上标注一个Feign注解即可。)即可完成对服务提供方的接口绑定,简化了使用SpringCloud Ribbon时,自动封装服务调用客户端的开发量。
Feign集成是Ribbon
利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询是现实了客户端的负载均衡,而与Ribbon不用的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而且简单的实现了服务调用。
Feign和Ribbon的区别
Ribbon
- Ribbon是一个基于HTTP和TCP客户端的负载均衡器
- 它可以在客户端配置ribbonServerList(服务端列表),然后默认通过轮询的方式实现负载均衡
- 它在联合Eureka使用时,ribbonServerList会被DiscoveryEnabledNIWSServiceList重写,扩展从Eureka注册中心获取服务端列表,同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否启动。
Feign
- SpringCloud Netflix的微服务都是以HTTP接口的形式暴漏的,所以可以使用Apache的HttpClienthhuoSpring的RestTemplate嗲用
- 而Feign是一个使用起来更加方便地HTTP客户端,它用起来就好像调用本地方法一样,根本感觉不出来调用的是远程的方法
总结:Ribbon和Feign都支持负载均衡,其中Feign内部也使用了Ribbon做负载均衡。Feign类似面向接口编程,Ribbon类似RestFul。
以上是关于SpringCloud的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloudSpringCloud 简单的 Demo
springcloudspringcloud与springboot的版本对应关系