作者回复: 这些知识都可以互相串起来,你可以从我的目录安排上找到串联方式^_^
作者回复: 你好凉人,如果是一个企业内部云上的主机,都会有NTP等服务来同步时间的,此时这套算法总体的计算成本最低。如果时间确实无法同步,需要应用代码来处理,那么时间轮也是一个不错的算法。
作者回复: 你好有铭,这种设计下,还必须限制每次移除心跳包的数量(分多次执行),以防止加入过程长时间得不到执行。 而且,在这种极限场景下,必须监控CPU的使用率,如果长期维持在高占用率(可能你的集群规模已经超大,要每秒处理数百万心跳包),那么应当通过扩容更多的CPU核、分布式系统等其他方案来解决,这已经不是单台机器能解决的了。
作者回复: 你好那时刻,生产环境中必须容忍网络的抖动,因此容忍一定比例的丢包,是正常的,你的这个方法是可以的,当然,如果有些主机频繁的出现网络不稳定的话,也可以考虑用更平滑的函数来判断宕机
作者回复: 通过IP等构成的Key,到哈希表中找到Value,其中包括指向队列中的引用,就可以操作队列了
作者回复: 时间轮也需要1个字典,字典即使不用hash实现,也是必不可少的,因为1个主机发出的多个心跳需要进行数据同步
作者回复: 1、1个包只分发到1个线程的队列中,分发完毕后就结束,这不就是互斥了吗? 2、只要消费者的速度是大于生产者的,就是及时的。监控线程队列,如果发现生产速度过快,需要进行线程扩容或者服务器扩容。
作者回复: ^_^
作者回复: hash表是用来在报文到达、判断是否过期这两个过程中,加速检索速度的。它的Key就是主机,Value指向队列中的报文。
作者回复: 是的