spring 分布式进阶
感悟:不要漫无目的的学习 有计划的开始。目前最好的目标是分布式
消息队列 (Pub/Sub 发布订阅消息模型)(Message queue)
Kafka、ActiveMQ、RabbitMQ、RocketMQ
意义
解耦:
情景:系统之间调用关系的多变、系统的业务状态多变
异步:
系统接收处理一个请求和交互关系
削峰:
请求积压在 MQ 中、缓存过高峰期
缺点
可用性降低(如何保证消息队列的高可用)减少停工时间,而保持其服务的高度可用性 MQ情况复杂
系统复杂度提高 保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性
一致性问题 系统调用失败了情况
抉择
ActiveMQ< RabbitMQ(erlang 语言比较难)(中等公司)
RocketMQ (阿里的 但是给力apache 社区活跃度一般)(大型公司)
大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的
RabbitMQ
基于主从(非分布式)做高可用性的
三模式
单机模式(没人生产用)、普通集群模式(主放队列 其他取)、镜像集群模式( 每个RabbitMQ 节点 一个同步的队列 )