作者回复: 可以看看mqtt的github项目,另外国内应该蘑菇街开源了一款叫teamtalk的im软件,也可以看看。
作者回复: 硬件层面可以上硬件防火墙来清洗异常流量,软件层面可以通过缩短syn半连接的超时来缓降。
作者回复: 欣慰,感谢支持,继续努力~
作者回复: 嗯,分库分表是一个有效提升写入能力的手段,除了这个还有其他优化方式吗?
作者回复: 嗯,不错的想法,业务允许一定的风险的话这是一个不错的优化手段。
作者回复: 嗯,redis作为计数没问题的,不过异步写入只是起到削峰填谷的作用,并不能提升写入的绝对能力,可以再想一想哈
作者回复: 是个方案,不过队列更多起到的是削峰填谷的作用,对写入瓶颈的真实写入能力提升有限。
作者回复: 如果发送消息是否成功依赖于消息存储是否成功,而消息存储的逻辑在业务层,那么发消息需要业务层明确告知是否存储查成功,这种情况rpc通过response明确告知网关层是否成功实现上更方便。
作者回复: 服务发现本身是rpc框架自带的通用特性,对系统消耗很小,再增加一层会使消息收发链路变长,整体稳定性可能会有影响。
业务层推送消息是通过消息队列来实现的,不需要依赖rpc。
作者回复: 对openresty了解不多,据我所知openresty主要是对标nginx的吧,tcp连接相关的信息不知道是否会暴露给使用者,另外即使可以长连接基于它实现可能得大量的lua嵌入开发吧,实现上可能会比较困难。
作者回复: 跟随流量波动来进行资源层的扩缩容对于数据读取可能比较有效,但是对于数据依赖master的写入扩缩容实现会比较麻烦。对于写入的优化可以采用类似操作系统buffer的机制,来对写入数据进行合并后批量写入,甚至根据业务来进行更高级的定制化合并逻辑。这一块我在第20篇万人群聊系统的设计中会讲一下。
作者回复: 这个是由于对端客户端关闭连接时发送的是强制关闭连接的rst包而不是正常关闭的fin包,注意观察客户端是否对应的有crash的情况出现,一般对服务端连接层没啥影响。