目录
4.写RestTemplate太繁琐?提供方与调用方沟通成本大,效率不高? Open Feign
6.网关Zuul,Router and Filter,令牌桶限流(单机)
1、如何调用底层服务? RestTemplate
rpc 调用。spring cloud 使用 http 作为底层协议。
spring 提供了一个访问 http 服务的客户端类 RestTemplate ,RestTemplate 传入服务端服务名&端口&方法的Mapping路径、服务端需要的Request参数、服务端的返回值
2、是如何找到底层服务的呢?Eureka
就像 Consumer 租房子,是如何找到有房出租的人?如何发现中意的房子?
简单粗暴法,一个个人去问,你有没有房子出租?Provider是这个街区的本地人,他刚好有房,但是这个街区足足好几万人。对于供需双方而言,效率太都过低下。
有困难的地方就有生意?
这时Eureka出现了,这片区域所有有房出租的房东都会去Eureka那里登记,因为听说登记之后房子曝光率大大提升了,好房子几乎很快就能被租出去,Provider当然要去试一试。需要房子的Consumer也听说了这个消息,只需要花相比之前极少的时间就能获得一个出租房列表,找到中意的房子。原来,Eureka就叫中介。
房东电话打不通?房东不租了?
但有时候,房子列表也有写问题,租房人找到房东,有电话打不通的,也有宕房东却说不租了,这是怎么回事?原来,房子列表一直在增加信息,一些过时的信息却没有去掉,宕房东早就不想出租了,但忘记跟Eureka讲,Eureka也没主动去问。聪明的Eureka想了个办法,房屋出租服务续约:每隔一个规定时间,房东需要来告知他房子是否还出租;房屋出租服务剔除:3次没有告知视为不出租了;Eureka将此项写进合同。这样,出岔子的事几乎没有了,对并没有完全解决,时不时还是会出现。Eureka认为一定是房东的问题,这次他又在合同中加了一条,房屋出租服务下线:房东确定不想出租时,必须及时通知!问题又有些许好转。最后Eureka在一个找房子的顾客得到了答案,原来那个顾客用笔记记下了自己重点关注的几个房子的信息,因为太忙现在房子也还没有到期不是很急,半个月后才去联系上面的房东。这难不倒,聪明的Eureka,他做了一个信息网站用以维护出租房屋的信息,这样顾客就能及时在需要的时候获取到新的信息,及时记录下的重点信息有变动,也能及时更改。
Eureka集团?生意大好,Eureka一个人忙不过来,于是Eureka集团诞生了。
3.服务负载均衡 Ribbon
Nginx的集中式负载均衡,这也叫负载均衡?那你自己挂了怎么办?Ribbon来帮忙
牛逼的负载均衡就是每个客户端自己实现负载均衡!——Ribbon
负载均衡具体策略?
默认使用RoundRobinRule轮询、RandomRule随机、RetryRule先轮询+重试
Ribbon建立在RestTemplate之上。
4.写RestTemplate太繁琐?提供方与调用方沟通成本大,效率不高? Open Feign
RestTemplate 传入服务端服务名&端口、服务端需要的Request参数、服务端的返回值。这些都由客户端来处理容易出问题。
Open Feign(内置Ribbon)来解决,@FeignClient由提供方提供成jar包,调用方引用即可,顺滑。
5、底层系统响应慢,超负载要宕机了怎么办? Hystrix
不让病情恶化:服务降级(如:配置快速失败 HystrixCommand.fallbackMethod),让服务有自行恢复的可能。
打疫苗:配置熔断时间(EnableHystrix),快速阻断病毒传播造成雪崩式灾难。
强身体健体才是根本:水平扩展(增加服务个数,分流处理),垂直扩展(单机硬件性能、软件性能提升)。
6.网关Zuul,Router and Filter,令牌桶限流(单机)
如何实现分布式下的限流?redis过期时间 & incr() 方法可以利用起来