多元消息融合分发平台

一、背景与挑战

随着货拉拉业务的迅猛发展,我们的订单量不断攀升,随之而来的是用户消息量的激增。这些海量的用户消息需要得到及时而有效的处理和流转。为了应对这一挑战,我们构建了一个高效的消息融合分发平台。

在平台建设初期,我们面临了以下挑战

消息多样性:多样化的业务需求、 丰富的消息类型支持、广泛多样的终端兼容性;

海量数据:随着订单量的增加,消息数量也急剧上升,平均每个订单可以产出50~100条子消息;

扩展性诉求:随着业务的增长,平台需要能够灵活扩展以适应不断变化的需求,实时快速的业务响应支持在线编辑能力,降低产研的接入成本;

**异常机制:**消息处理异常后的解决方案,尤其是当下游服务或第三方应用不可用或宕机时,如何确保消息处理的一致性,降低人工维护成本、提高系统自愈能力;

通过克服这些挑战,我们的消息融合平台能够为用户提供更加高效、可靠和个性化的服务体验。

二、方案探索

2.1 海量数据处理

随着订单量的持续增长,我们的消息量也随之激增。为了应对来自不同上游系统的多样化数据,我们实施了一套综合的数据集成策略,涵盖消息队列(MQ)、面向服务的架构(SOA)以及大数据处理技术,从而高效处理各种复杂的数据来源。

针对海量数据的处理需求,我们首先对数据进行分类,然后根据数据类型(事务****消息、延迟消息、一次性消息 )采取相应的处理措施。为了进一步提升数据处理的效率,我们采用了分布式任务处理 技术,实现消息的并行分发和处理。在处理过程中,对于处理异常的场景,我们采取了事务消息,通过最终一致性 原则和消息自愈机制来确保数据的准确性和系统的稳定性。这些措施有助于我们在保持高效率的同时,也保障了数据处理的可靠性。

事件分发系统做为融合平台的中枢,它承担着将采集到的数据转化为可操作信息的关键任务。主要分成如下几个模块:消息采集->消息分类->消息处理->消息自愈;

  • 事件分发

2.2 界面可视化诉求

为了管理五花八门的用户消息,提高消息的复用性,我们引入消息套餐的概念。主要由消息模版、消息套餐、消息可视化三个部分组成**,**一个套餐下可以挂多个消息模版,允许自由组合(1:N)。将复杂的代码变成可视化的界面,降低产研的接入成本,使得非技术人员也能轻松管理和分发消息;

**模版:**具体某个消息需要推送的内容,以及消息的通道管理;

**套餐:**由多个消息模版组合而成,模版之间可自由组合成一个具体的消息套餐;

**可视化:**设计一个直观的图形用户界面,使用拖放、预览和一键发布等功能,减少对代码的依赖;

以可视化的方式搭建消息之间的桥梁,聚合不同类型的消息,构建一类消息套餐,通过桥接模式和模板方法模式来提高代码复用性,并降低研发成本;

  • 套餐案例

2.3 平台框架设计

基于上述问题,结合业界方案的调研。我们主要将平台分成如下四个模块数据采集模块、归类分发模块、消息套餐管理模块、目标群体分类。下方是我们的业务架构图;

  • 消息融合平台

三、详细设计

3.1 归类分发

我们对收集到的消息进行分类,确保每条消息都能被正确地识别,之后分发给对应的处理流程。该模块主要负责多样化数据采集,以及采集后数据的分类和流转; **数据采集:**消息队列(MQ)、面向服务的架构(SOA)以及大数据处理技术;

智能路由:我们使用智能路由算法,根据消息的类型、优先级和目标用户,将数据自动路由到相应的处理流程;

反馈循环:我们建立了一个反馈机制,收集处理过程数据实时反馈,以便不断优化我们的数据处理和分发策略;

消息控流:通过流量控制和削峰策略,利用消息队列的缓冲机制,来应对高并发场景,防止系统过载。通过限制消息生产和消费速率来进一步控制消息流速;

  • 归类分发

markdown 复制代码
延迟消息***.kafka.***.consumer.**.bme_trade_order_****_event.action-type-3002.delay-time = 300
事物消息(落库)***.kafka.***.consumer.**. bme_trade_order_****_event. action-type-3004.***.delay-time = 0
普通消息***.kafka.***.consumer.**. bme_trade_order_****_event. action-typeOnce-3004.delay-time = 0

3.2 消息处理

3.2.1 分布式任务处理

为了高效地处理日益增长的消息,我们引入了分布式任务xxl-job。通过分布式任务调度处理,并行处理海量消息,显著提高了数据处理的效率。我们数据分配的策略,主要是基于消息ID的唯一性,对消息id取模具体流程如下:

  • 任务分配:根据任务的特点和节点的状态,将任务分配给不同的节点进行处理(消息ID取模);

  • **任务执行:**不同的节点可以同时处理不同的记录实现并行处理,这种分布式处理模式不仅提高了处理速度,还增强了系统的扩展性和容错能力。

  • 任务监控:过程数据落库,对任务的执行状态(飞书告警+db+xxl)进行监控和跟踪,以便出现问题时及时处理。

  • 可扩展性:随着业务的扩展和数据量的增长,我们可以轻松地添加更多的处理节点,而无需重新设计数据分配策略。

  • **补偿机制:**异常记录落库,定期补偿重试;

  • 结果汇总:收集各个节点的执行结果,进行汇总和处理;

  • 分布式任务处理

3.2.2 消息处理流程

为了确保系统消息的可靠性和数据的一致性,我们采用了分布式事务最终一致性的方案,通过数据库记录过程数据。这种方案强调最终能够达到一个一致的状态,而不需要实时保证系统数据的强一致性。我们通过如下几个步骤:

1、开始处理消息(同步或者异步),更新消息状态为处理中;

2、发起三方请求进行事件处理;

3、消息中心业务处理完成后的结果反馈(接口调用同步返回、消息异步callback、soa请求);

4、处理完成后的消息回调;

5、更新消息事物表状态(成功、失败);

6、ack应答确认;

  • 消息处理

痛点:

消息没有正常消费?

消息消费后事件处理异常?

碰巧下游服务或者三方应用不可用宕机了?

这样就会导致数据不一致的情况!(构建事务表)

Q:有人说我们可以利用kafka消费端的ack应答机制,业务处理成功后再告知集群我们消费成功了?

A:那么业务处理的耗时必然会导致消费速率的下降、拖慢消费速度,导致消息积压;

3.2.3 自愈重试

平时我们稳定性的同事在降级、限流、熔断等方面做了很多努力来保证服务的高可用和自愈能力,除了系统方面的自愈能力外,其实业务层面的自愈能力也是至关重要的;

  • 由xxl-job定时捞取异常记录进行补偿重试 --(限定时间和数量)

  • Job分片处理多节点并行,哈希的方式每个节点处理不同的数据 --(分布式任务处理)

  • 根据业务的不同设置相应的补偿策略(如指数递增间隔重试、固定间隔指定最大重试时间、个性化业务重试)

  • 根据策略补偿重试后还是异常的,系统已无法处理,只能执行最终方案了人工介入或者丢弃

  • 自愈重试

痛点:

处理失败后我们该如何进行数据补偿重试呢?

需要处理的数据量比较大怎么办?

补偿的时机是否合理,补偿机制该如何定义?

补偿必然会导致数据接口的幂等问题?

3.3 套餐管理

该模块是消息处理流程的最终环节,负责将上游处理完毕的消息转化为用户可接收的具体内容。以可视化的方式构建消息模版,再由模版组合成一类具体的消息套餐,通过多渠道分发的形式推送给用户,该模块有如下几个特点; 可视化界面设计:直观的用户界面,使得非技术用户也能轻松管理和分发消息;

实时更新:为了提供实时的用户体验,我们的平台能够实时更新数据,并确保用户能够及时收到最新的信息;

多渠道分发:处理后的数据将通过不同的渠道分发给用户,包括APP、小程序(如微信、支付宝等)和公众号;

消息套餐组合:利用预构建的模板,我们可以组合成一系列具体的消息套餐。这些套餐可以根据用户的行为、偏好或业务逻辑来定制,以确保消息的相关性和个性化;

  • 套餐管理

3.3.1 消息可视化

运营人员在后端配置消息模板,可直观的感受推送界面的具体样式,降低人工异常,使得非技术用户也能轻松管理和分发消息;

  • 消息可视化

3.3.2 消息模版创建

引入消息模板的概念,我们将繁琐的编码工作转变为简单直观的界面配置,这不仅提高了生产效率,还可以支持在线编辑,审批通过后支持生产变更实时生效,提升系统的容错性;

  • 消息模版列表
  • 消息模版编辑

3.3.3 组合套餐管理

一个消息套餐内可以包含多个消息模板,大多数消息模版是可以复用的,并且是基于套餐的维度来进行消息推送的,可自由组合不同消息模版,直观的用户界面,使得非技术用户也能轻松管理和分发消息;

  • 消息套餐列表
  • 消息套餐编辑

四、落地实践

目前该方案已落地使用,组合套餐300余个,构建消息模版1000+,日均处理流转消息量超亿级;

  • 提供简单易用的消息套餐可视化界面,使得非技术用户也能轻松管理和分发消息;

  • 平稳处理海量数据,支持在线扩容、在线编辑,提高数据处理效率;

  • 统一代码框架,降低接入成本,有效提高研发效率;

  • 异常自愈,提高系统容错性;

五、总结与展望

在技术领域,不存在所谓的最佳技术,只有最适合特定场景的技术。无论是产业界的专家还是互联网的先锋,要想在产业互联网的浪潮中稳步前行,关键在于培养迭代思维。产业在不断地迭代,互联网在不断地迭代,组织和个人同样在不断地迭代。正是在这种持续的迭代和更新中,我们才能摸索出最适合自身业务发展的技术路径。

随着业务的不断演进和市场需求的持续扩大,多元消息融合平台的优化可以从以下几个关键方向发展:

丰富媒体元素:在push推送通知中使用图像、视频和交互式按钮等富媒体元素,使通知更具吸引力和视觉冲击感,提高用户的互动频率;

**个性化推送:**利用人工智能算法分析用户行为偏好,提供高度个性化的通知,提高和用户互动的可能性;

**数据监控与分析:**加强用户消息触达率的监控,选择对目标受众覆盖率高、时效性好的渠道。

相关推荐
天天进步20152 分钟前
Vue 3 + Vite:构建闪电般快速的开发环境
前端·javascript·vue.js
knoci9 分钟前
【Go】-go中的锁机制
后端·学习·golang
Mike_1887027835113 分钟前
深入探索Golang的GMP调度机制:源码解析与实现原理
开发语言·后端·golang
Dragon Wu14 分钟前
前端框架 Redux tool RTK 总结
前端·javascript·前端框架
yqcoder22 分钟前
reactflow 中 useStoreApi 模块作用
前端·javascript
williamdsy26 分钟前
【vue】关于异步函数使用不当导致的template内容完全无法渲染的问题
前端·javascript·vue.js
2402_8397080526 分钟前
第十章:作业
开发语言·前端·javascript
诗水人间29 分钟前
前后端分离,解决vue+axios跨域和proxyTable不生效等问题
前端·javascript·vue.js·springboot·springsecurity·跨域·cros
恩爸编程30 分钟前
纯前端js完成游戏吃豆人
前端·javascript·游戏·游戏程序·开源软件·游戏策划·游戏机
@大迁世界30 分钟前
停止在 React 组件回调中使用箭头函数!
前端·javascript·react.js·前端框架·ecmascript