内容简介:首先,有人可能对Martian-cloud不了解,甚至是第一次听说,所以有兴趣的朋友可以先看下详细的原理 https://www.bilibili.com/read/cv8314554 好了下面切入主题,本次升级,所解决的问题正如标题所说,通过丢弃心跳...
首先,有人可能对Martian-cloud不了解,甚至是第一次听说,所以有兴趣的朋友可以先看下详细的原理
https://www.bilibili.com/read/cv8314554
好了下面切入主题,本次升级,所解决的问题正如标题所说,通过丢弃心跳机制,来解决网络压力
心跳机制丢弃后如何实现下线通知
1. 首先是自私机制
所谓的自私机制,就是每个服务只顾自己,不管别人,每个服务如果发现自己本地缓存的接口连接不上,那就会从本地把他下掉,至于别人,他是不管的。
2. 投票机制
这是每个服务的内部投票,跟外面无关,如果一个服务发现他本地缓存的某个接口连接不上,那么他就会给这个接口指向的服务投一票,让它从本机下线,当调通后会把票数清0,当票数积累到一定程度时,这个服务的所有接口都会被从当前服务上清理掉。【每个服务都有一套这样的机制,来维护自己的本地接口缓存】
3. 如果(下线某个服务的决定)是误判怎么办
有一个补偿机制,就是每个服务在下掉别的服务的时候,都会给被下掉的那个服务发一个通知,让他把自己从已广播列表中移除(比如A服务调不通B服务的接口,当票数累积到一定程度后,A会把B的接口全部清理掉,清理后A会给B发一个通知,让B把A从已广播列表移除,这样如果B服务没挂,那么B在下一次轮询时 会把接口重新广播给A)
如果B服务明明没挂,但是A服务连续调不通,而且连下线通知都无法通知到B服务,那我只能说B服务活该了,即使是误判也比留着报错影响性能好吧。
4. 调不通的情况有很多,不一定是服务挂了,那么什么样的情况会给服务投下线票
很简单,当调用接口时,出现了以下三种异常,就会投票
ConnectException ,连接不上,这不是404之类的,而是根本连不上这个ip:port
UnknownHostException,无法解析地址,提供的 ip:port 无法被解析识别
SocketTimeoutException,连接超时,不是read time out,而是 connect time out
5. 然后是垃圾回收机制
垃圾回收很简单,就是定时去本地缓存中扫描出被下线的服务的接口,然后删除掉。
上面这这一套机制,可以保证当服务宕机以后,接口会自动从其他的服上下线
官方网站
http://mars-framework.com/index.html
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 丢弃掉那些 BeanUtils 工具类吧,MapStruct 真香
- zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
- Chrome 72 丢弃 HPKP,不再支持TLS1.0和TLS1.1!
- Golang 心跳的实现
- Golang 心跳的实现
- Flink 心跳机制分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
An Introduction to the Analysis of Algorithms
Robert Sedgewick、Philippe Flajolet / Addison-Wesley Professional / 1995-12-10 / CAD 67.99
This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discre......一起来看看 《An Introduction to the Analysis of Algorithms》 这本书的介绍吧!