返回

美团实时消息推送服务的技术演进之路

前端

前言

美团实时消息推送服务是一个基于分布式系统的大规模实时消息推送平台,承载着美团各个业务线的消息推送需求,包括但不限于订单通知、物流通知、支付通知、活动通知等。随着业务的快速发展,对实时消息推送服务的稳定性、可靠性、可扩展性提出了更高的要求。本文将详细介绍美团实时消息推送服务的技术演进之路,希望对业界同行有所启发。

技术演进

  1. 系统架构升级

美团实时消息推送服务 1.0 版本采用传统的分布式系统架构,包括消息生产者、消息队列、消息消费者三个组件。随着业务的快速发展,这种架构存在以下几个问题:

  • 可靠性差: 消息队列存在消息丢失的风险,导致消息无法被消费者接收。
  • 可扩展性差: 随着业务的增长,消息队列的规模需要不断扩容,导致系统维护成本高昂。
  • 运维复杂: 系统组件过多,运维复杂度高,容易出现问题。

为了解决上述问题,美团实时消息推送服务 2.0 版本采用了全新的系统架构,如下图所示:

[系统架构图]

新的系统架构主要包括以下几个组件:

  • 消息生产者: 负责产生消息,并将其发送到消息代理。
  • 消息代理: 负责接收消息,并将其存储到消息存储中。
  • 消息存储: 负责存储消息,并提供消息查询和检索服务。
  • 消息消费者: 负责从消息存储中获取消息,并对其进行处理。

这种新的系统架构具有以下几个优点:

  • 可靠性高: 消息存储采用多副本存储机制,确保消息不会丢失。
  • 可扩展性好: 消息存储可以弹性扩容,满足业务增长的需求。
  • 运维简单: 系统组件减少,运维复杂度降低。
  1. 工作模式升级

美团实时消息推送服务 1.0 版本采用的是拉取模式,即消息消费者主动从消息队列中拉取消息。这种工作模式存在以下几个问题:

  • 资源浪费: 消息消费者需要不断地轮询消息队列,即使没有新消息产生,也会消耗系统资源。
  • 实时性差: 消息消费者需要等待消息队列中的消息达到一定数量后才能进行处理,导致消息的处理存在一定的延迟。

为了解决上述问题,美团实时消息推送服务 2.0 版本采用了推送模式,即消息代理主动将消息推送到消息消费者。这种工作模式具有以下几个优点:

  • 资源节省: 消息消费者只有在有新消息产生时才需要进行处理,减少了系统资源的消耗。
  • 实时性高: 消息代理可以直接将消息推送到消息消费者,减少了消息的处理延迟。
  1. 长稳保活机制升级

美团实时消息推送服务 1.0 版本采用的是简单的长连接机制,即消息消费者与消息代理之间建立长连接,并不断地发送心跳包来保持连接。这种机制存在以下几个问题:

  • 连接不稳定: 长连接容易受到网络抖动等因素的影响,导致连接断开。
  • 资源消耗大: 长连接需要不断地发送心跳包来保持连接,消耗了大量的网络带宽和系统资源。

为了解决上述问题,美团实时消息推送服务 2.0 版本采用了长稳保活机制,即在长连接的基础上增加了心跳检测和重连机制。这种机制具有以下几个优点:

  • 连接稳定: 心跳检测和重连机制可以确保消息消费者与消息代理之间的连接稳定。
  • 资源节省: 长稳保活机制只在需要的时候才发送心跳包,减少了网络带宽和系统资源的消耗。

新业务场景下的技术特性支持

随着美团业务的不断发展,实时消息推送服务也面临着越来越多的新业务场景,这些新业务场景对实时消息推送服务的稳定性、可靠性、可扩展性提出了更高的要求。

例如,直播业务需要实时推送直播消息给观众,对消息的实时性要求很高。游戏业务需要实时推送游戏消息给玩家,对消息的可靠性要求很高。

为了满足这些新业务场景的需求,美团实时消息推送服务进行了以下技术特性升级:

  • 支持多协议: 支持 HTTP、MQTT、WebSocket 等多种消息协议,满足不同业务场景的需求。
  • 支持负载均衡: 支持消息负载均衡,将消息均匀地分发到不同的消息代理上,提高系统的可扩展性。
  • 支持消息过滤: 支持消息过滤,允许消息消费者只接收自己感兴趣的消息,减少消息的处理开销。
  • 支持消息重试: 支持消息重试,当消息处理失败时,自动重试,确保消息不会丢失。

技术实践

在整个系统升级过程中,美团实时消息推送服务团队积累了丰富的技术实践经验,包括但不限于:

  • 使用分布式系统框架: 使用分布式系统框架,如 Apache Dubbo、Apache Kafka 等,提高系统的稳定性和可靠性。
  • 使用微服务架构: 使用微服务架构,将系统拆分成多个独立的服务,提高系统的可扩展性和灵活性。
  • 使用云原生技术: 使用云原生技术,如容器、Kubernetes 等,提高系统的部署和运维效率。

总结

本文详细介绍了美团实时消息推送服务的技术演进之路,包括 Pike 的系统架构升级、工作模式升级、长稳保活机制升级等技术演进内容,以及在直播、游戏等新业务场景下的技术特性支持,并总结了整个系统升级过程中的技术实践。希望本文对业界同行有所启发。