1. 部署,一种常用的高可用部署方案
对于节点比较少的集群,可以采用每个节点都是镜像模式,从而队列数据做全镜像备份,保证数据安全和高可用,如果节点书比较多,可以采用超过半数(n/2+1)的节点设置为镜像模式,;采用HAproxy 做负载均衡,为了高可用采用双负载均衡,且用 keepAlived 实现主备备份和切换, 且生成虚拟IP 暴露给客户端.
2. 优点:异步、解耦、消峰
3.生产者实现不丢消息。 任何设计不能脱离业务需求和业务场景,如果系统对数据可靠性要求比较高,极端情况也不能丢数,那就需要先将消息持久化入库,然后再发送给MQ ;等待MQ ack 后修改消息状态,如果超齿没有收到ack 触发重发模式(定义重发次数),重发n次后还是收不到,修改消息状态为未收到ack,设计一个定时job 定时扫描数据中没有收到ack 的消息触发重发,依旧收不到的可以标记为失败,失败数据可以发送邮件等方式进行通知。因为是先入的数据库那么对于消峰的业务场景就不实用,实用MQ 就是为了应对高并发是数据的瓶颈,可以先暂时放入到redis 中,然后等重发失败后再入库,这样概率已经大大降低,或者对于那种消息不是特别严谨的场景可以直接先发送,尝试重发失败后再入库,风险就是重试和发送都在内存中,服务挂了,消息丢失。
4.幂等性。幂等性主要解决消息重复问题。首先需要找出消息得唯一标识。对于生产端可以借助于mq 的intercepter 实现对重复消息得丢弃。消费者端,再拉取消息得时候可以跟数据库或者redis 里的数据通过唯一标识作比对,看是否已经做过处理,从而决定是否消费还是丢弃。
5.怎么保证数据可靠性。通过ack 机制保证发送和消费不丢数; 队列消息可以做磁盘存储做持久化;通过高可用集群中节点镜像模式保证某一个节点挂了还有备份节点可用,数据不丢失