Middleware Tips & Tracks

技术选型

面对技术选型时,就是一个关于如何取舍的问题,不要不经过思考就觉得那个方案好,那个方案不好。需要根据具体场景分析
技术选型不只是技术问题,还与团队、管理、组织结构有关

  • 业务功能角度
  • 技术资源角度

    所处的环境、技术资源能否匹配这些技术方案

消息中间件

1
2
3
4
5
6
7
8
9
10
11
12
# 专业消息中间件需要满足:
1. 消息不丢失
a. 生产者会不会丢消息?
- 消息没发送出去: 网络故障或者其他原因导致发布失败,中间件直接返回失败
- 不确定是否发送成功: 网络问题导致发布超时,可能数据已发送成功,但是读取响应结果超时

生产者设置最大重试次数,超过上限依旧失败,需要记录日志报警处理, 生产者会不会丢消息,取决于生产者对于异常情况的处理是否合理, 保证消息不丢,宁可重发,也不能丢弃
b. 消费者会不会丢消息?
- 消费者在处理完消息后,必须告知队列中间件,队列中间件才会把标记已处理,否则仍旧把这些数据发给消费者
c. 队列中间件会不会丢消息?
- 生产者在发布消息时,队列中间件通常会写多个节点,以此保证消息的完整性,即便其中一个节点挂,也能保证集群数据不丢失
2. 消息可堆积
  • Redis 作为消息中间件
    1
    2
    1. Redis本身可能会丢数据
    2. 面对消息积压,Redis内存资源紧张