作者回复: 抱歉,尽量不在这里讨论公司相关的话题。
作者回复: 个人觉得不需要针对群来维护在线状态,直接把所有群消息都pub给网关机,网关机根据本机维护的“当前这条消息的群的用户哪些在我本机上”这个映射来下推就可以了。
作者回复: 可以使用原子性的、线程安全的数据结构来存储令牌,比如AotomicLong等,这种数据结构支持一次decr多个而且能保证线程安全和高性能的。
作者回复: 失败需要熔断,超时同样也需要熔断,要不然也会把服务拖死。降级的话看情况吧,如果是旁路非核心,对用户影响不大的可以直接“轻微有损返回”,对于核心的链路的熔断,可以直接返回失败让用户重试(熔断的价值在于避免服务整体不可用),或者通过重试队列把当时失败的请求先buffer起来后续恢复后再继续处理。
作者回复: 单机限流推荐guava的RateLimiter,全局限流直接基于Redis+Lua写一个很简单。
对,限流阈值需要模拟压测,避免由于阈值设置太宽松导致服务仍然可能被拖死或者阈值太敏感导致一点抖动也会整体熔断。
作者回复: 不知道我理解对没,如果是要限制这个交互的频次,可以在这个交互的入口接口进行限流就可以呀。
作者回复: netty的水位应该只是和tcp buffer相关的,如果需要消息条数维度的控制还是guava。