① 异步通信(减少响应时间,增加吞吐量)
系统处理用户请求时,涉及到对其它任务的调用,这些任务可能比较耗时,同时并不需要立即得到执行结果,这种情况就可以利用消息队列来减少用户响应时间和增加系统吞吐量。
例如涉及到邮件确认的注册业务,用户注册时,注册信息写入数据库,然后系统发送确认邮件给用户,用户可以随后到邮箱中完成注册 认证。由于用户对邮件发送的实时性要求没有那么高(例如延迟个1分钟都是可以忍受的),所以可以考虑在注册业务以及邮件发送任务之间加入消息队列,从而减少用户注册时的响应时间。用户注册信息写入数据库后,可以将此消息写入消息队列中并立即返回结果给用户,后续的事情交给邮件发送任务,不用再操心。然后邮件发送任务从消息队列中拉取消息并发送给用户。
消息队列简介
架构设计中,经常会使用消息队列MQ(Message Queue),MQ是一种跨进程的通信机制,用于上下游的消息传递,使用MQ可以使上下游解耦,消息发送上游只需要依赖MQ,逻辑和物理上都不需要依赖其他下游服务。
消息队列的使用场景:
① 异步通信(减少响应时间,增加吞吐量)
系统处理用户请求时,涉及到对其它任务的调用,这些任务可能比较耗时,同时并不需要立即得到执行结果,这种情况就可以利用消息队列来减少用户响应时间和增加系统吞吐量。
例如涉及到邮件确认的注册业务,用户注册时,注册信息写入数据库,然后系统发送确认邮件给用户,用户可以随后到邮箱中完成注册 认证。由于用户对邮件发送的实时性要求没有那么高(例如延迟个1分钟都是可以忍受的),所以可以考虑在注册业务以及邮件发送任务之间加入消息队列,从而减少用户注册时的响应时间。用户注册信息写入数据库后,可以将此消息写入消息队列中并立即返回结果给用户,后续的事情交给邮件发送任务,不用再操心。然后邮件发送任务从消息队列中拉取消息并发送给用户。
②应用解耦
对于两个业务耦合的应用,可以考虑使用消息队列对其进行业务解耦。
例如下订单业务与减库存业务,下订单业务通过API调用减库存业务,如果减库存业务执行失败,下订单业务也会随之失败(减库存的失败影响到了正常下单)。可以在下订单业务与减库存业务之间加上消息队列,下订单业务执行完毕后就将消息写入消息队列中,后续的事情都不用再操心,及时库存系统不能正常使用,也不会影响正常下单。
③ 流量削峰
缓解短时间内高流量压垮应用。
用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
④日志传输
日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。
to do.....一些实践
参考文章
[http://blog.csdn.net/seven__________7/article/details/70225830]
[http://www.jianshu.com/p/43a9fa3bdad7]