消息队列
消息队列中间件是分布式系统中的重要组件,主要解决应用解耦、异步处理、流量削峰等问题,实现高性能、高可用、可伸缩。常用的消息队列中间件有Kafka、RabbitMQ、ActiveMQ、RocketMQ等。
应用场景
1.异步处理
场景说明:新用户注册成功以后需要发送通知邮件或通知短信;商城订创建之后需要给用户发送订单通知消息;因为消息通知通常牵涉到调用第三方的服务属于耗时操作,而对用户主进程有没有特别影响。可以在主线处理完成后把需要发送的通知消息放入消息队列由专用的消息发送服务处理,避免了主线程因为消息发送陷入等待。
2.应用解耦
场景说明:商城系统里用户下单后,订单系统需要通知库存系统减库存,通知积分系统给用户增加积分;秒杀场景下用户点击按钮后,如果参与秒杀成功秒杀系统需要通知订单系统创建订单;可以将待处理的订单放入消息队列,这样在用户下单后或者秒杀成功后,再有独立服务处理减库存、下秒杀订单等业务。
3.流量削峰
场景说明:在秒杀活动中一般流量会比较大导致访问量暴增,如果采用同步的方式秒杀系统需要处理的业务逻辑会很长,访问数据库频次会很高容易造成数据库崩溃。采用消息队列后,秒杀消息会按照次序统一放入队列中,订单处理服务会按照频次依次处理秒杀订单,防止大流量情况下造成数据库系统崩溃。
4.日志处理
场景说明:结合消息队列在系统中将需要日志记录的消息发送给队列,由消息队列负责日志的接受,由Logstash做日志解析统一成json输出给ElasticSearch,ElasticSearch负责日志的实时分析和存储。
5.消息通信
场景说明:消息队列一般内置有高校的通信机制,可以实现一对一、一对多的消息发送与接收,类似IM场景下的聊天效果。