(资料图片)
1、MQ场景 1)订单异步解耦 2)解决分布式事务问题 3)应用于聊天平台 4)大规模机器的Cache同步 5)MySQL BinLog订阅数据分发2、ONS应用场景 异步、解耦、最终一致、并行3、设计假定 1)每台PC机器都可能down机不可服务 2)任意集群都可能处理能力不足 3)最坏情况一定会发生 4)内网环境需要低延迟来提供你最佳用户体验4、关键设计 1)分布式集群化 a、理论上无限处理能力 b、集群级别高可用 2)强数据安全 a、单机磁盘级别冗余 b、单组多队列级别冗余 c、多组消息队列冗余 3)海量数据堆积 a、推模式:订阅者逻辑简单 b、拉模式:关注吞吐量,快 c、推拉结合:队列通知消费者,消费者去拉取(两次交互) d、阿里采用长连接和轮询:轮询去拉,有则拉取,无则保持长连接等待,直到有消息 4)毫秒级投递延迟5、关键概念 1)Topic:第一级消息类型,主标题 2)Tug:第二级消息类型,分标题 3)发送组:生产者所在集群 4)订阅组:消费者所在集群 5)RocketMQ不是一对一,也不是一对多,是随机一对一 6)网络三种状态:成功、失败、没响应6、消息乱序问题:Message服务器不处理,恰好不需要解决 1)发送时对消息进行编号 2)一组消息只有唯一一个订阅者处理(sharding) 3)一组消息的数量(即“锁的颗粒度”)越小越好7、消息重复问题 1)重复原因:网络不可达 2)幂等:某个操作无论重复多少次,结果都一样(不需要解决,性能极高) 3)非幂等,去重 a、保证有个唯一ID标记每一条消息; b、保证消息处理成功与去重表日志同时出现 4)去重代价:额外的tps和qps8、事务的分布式优化 1)事务1-->MQ Server-->事务2 2)同时成功,同时失败: a、发消息; b、执行事务1; c、确认消息发送; d、投递消息到消费者 3)处理超时问题(重复):事务2增加消息确认表(去重表) 4)消息失败(事务2失败):记录后人工处理 小概率事件