消息队列使用场景
队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种业务来处理。
消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:
- 解耦
- 异步通信
- 削峰填谷
来看一个用户注册业务,在传统的单体项目中,假如注册流程是:
如果用户注册相关处理耗费30ms,发送短信又耗时30ms,那么一个完整的注册业务就耗时60ms,这60ms期间,服务器资源是被这一个注册业务独占的。
如果发送短信的业务出现了故障,那么整个注册业务就不成功:
再来看分布式系统中的注册业务,注册和发短信拆分为两个业务,用户填写完注册信息,将“用户注册”的消息发送到消息队列,然后直接响应给客户端:
这样即使发送短信业务出现了故障,用户的注册业务是完成了的,只不过客户端收到成功通知的时间晚了一会而已。
这就是消息队列用到的解耦和异步通信的场景。
还有一种比较典型的场景就是分布式系统中各个业务产生的各种日志:
这里消息队列起到了一个缓冲的作用,辅助数据库,减少流计算给数据库造成的压力。
Kafka作为消息队列的一种,它也有这么多的使用场景。