企业级实践:分布式系统中的可靠消息最终一致性方案

news2025/1/16 5:55:07

背景

公司由于业务爆发式增长,新上了许多业务系统,例如:本地生活、社区团购、旅投B2B、旅投B2C等系统;同时,由于业务系统越来越多,为了运营方便,把分销、营销、订单、会员等多个业务系统公共业务,抽离出一个独立平台来操作,例如:统一会员、统一订单、统一分销等系统。

需求

基于上述的背景,我负责的电商项目要与这些中台系统进行对接。在对接的过程中其中有一个需求是:

商城推送所有的商品到统一分销系统,分销系统设置相应的商品,分销系统把设置佣金的分销商品推送给商城,商城售卖该商品。

设计思路

  • 定时任务:定时推送商城有状态变更的商品到统一分销中心,推送商品后,需要把推送信息记录到推送记录表中。

  • 消息重试:如果出现推送失败,根据相应的商品id调用重试接口进行重试,或者等待下一次定时任务推送数据。

  • 确保幂等性:为了保证每一个批次的商品数据不重复,推送数据的时候都会对商品id进行去重。

  • 性能:要计算出每一分钟传送商品的极限数量,然后根据商品总数量除以每分钟的数量,算出第一次历史迁移商品的时间,并合理规划每次定时任务推送的商品数量。

可靠消息最终一致性

可靠消息最终一致性是一种分布式系统中常用的设计模式,用于在异步通信的场景下保障消息传递的可靠性和系统的最终一致性。以下是一种常见的可靠消息最终一致性方案的概述:

  • 发送方将消息发送到消息队列:发送方将要发送的消息写入消息队列,例如 Apache Kafka、RabbitMQ 等。

  • 接收方从消息队列中消费消息:接收方从消息队列中消费消息,处理消息并更新本地状态。

  • 确认消息处理完成:接收方在处理消息后,向消息队列发送确认消息,通知消息队列消息已经处理完成。

  • 消息队列持久化消息:消息队列将消息进行持久化,确保消息在存储中不会丢失。

  • 异步处理消息:接收方可能会异步处理消息,例如将消息写入数据库、调用其他服务等,以完成消息的实际处理逻辑。

  • 处理失败时进行重试:如果消息处理失败,接收方可以进行重试操作,例如重新发送消息到消息队列等。

  • 使用定时任务进行消息回溯:如果消息处理失败或者发生异常情况,可以使用定时任务或者其他方式对消息进行回溯,重新处理失败的消息。

  • 确保幂等性:在消息处理的过程中,需要确保处理逻辑是幂等的,即多次处理相同的消息产生的结果是一致的,以防止重复处理消息导致的副作用。

  • 最终一致性:由于消息的处理是异步的,不同接收方可能在不同时间点处理消息,因此系统可能在瞬时出现不一致的状态,但通过消息的重试和回溯机制,最终可以保证系统的一致性。

需要注意的是,可靠消息最终一致性方案并不是适用于所有的场景,需要根据具体的业务需求和系统架构来选择合适的消息传递方式和一致性保障策略。同时,实现可靠消息最终一致性方案时,还需要考虑消息队列的选型、消息序列化、异常处理、重试策略、消息回溯机制等细节问题,以保障系统的稳定性和可靠性。

END

勇气是一个人处于逆境中的光明,赠友人。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Babel零基础教程

参考https://www.jiangruitao.com/babel/ 写的非常好,本人只是为了方便查找,记录在自己博客上,原文可以去该链接拜读 1、 Babel 简介 Babel是什么? Babel是一个工具集,主要用于将ES6版本的JavaScript代码转为ES5等向…

遗传算法的概念和python实现

遗传算法是一个非常经典的智能算法,主要用于解决优化问题。本文主要简单介绍一些原理,同时给出一个基于python实现的,用于解决实数内优化问题的模板。 本文参考: 原理:遗传算法入门详解 - 知乎 简单介绍 遗传算法就…

服务型企业如何使用飞项实现项目化管理?

服务型企业的业务模式一般都是按项目来运作的,其业务分为售前,售中和售后三个阶段,分别由不同部门和人员对客户进行个性化服务。在这个过程中需要对人、流程和知识的高效统筹管理,即项目的整体管理,因此存在着不小的挑…

Nvidia Jetson Orin: SPE/AON Cortex-R5 固件开发

Nvidia Jetson Orin: SPE/AON Cortex-R5 固件开发 写在最前边开发/下载 SPE 固件关于修改DTS 写在最前边 SPE 只能控制 AON GPIO 最多32个PIN 开发/下载 SPE 固件 S1:打开 https://developer.nvidia.com/embedded/jetson-linux S2:这里下载 S3&#x…

Linux环境使用日志切割工具-cronolog

Linux环境使用日志切割工具 需明白的点:1.安装 2.如何使用 一、安装cronolog 1.首先检查是否存在cronolog 命令:whereis cronolog 或 which cronolog 2.不存在则安装 安装方式: a.yum 安装:yum install cronolog b. 源码安装&am…

C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-数组-学习笔记(10)

参考:麦子学院-嵌入式C语言高级-内存空间 2-3 : C语言内存空间的使用-数组 内存分配的一种形式 数组的定义及初始化 定义一个空间: 1、大小 2、读取方式 数组名[]:升级为连续空间的名称, [m]的作用域只在申请的时候起作用 每个多大?数组…

太给力了,这款java表单设计器可提高办公协作效率!

随着办公自动化的快速发展,java表单设计器的应用价值和突出优势也逐渐成为企业提高办公效率的好帮手。传统的表单操作起来费时费力,效率不高,逐渐满足不了日益繁多的业务需求了,在广大用户的呼声和市场发展下,简洁、灵…

ESP32学习五-启动流程

一、简介 在ESP32的开发中,通常我们会从app_main函数中开始我们的代码开发。但是为什么是app_main呢?app_main又是从哪里被调用的?app_main之前又做了什么操作呢?今天我们就来详细分析一下。 官方参考文档:应用程序的启…

柔性作业车间生产调度中MK算例文本各行数字表示的含义以及算例的数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MK算例其他MK02~MK10柔性作业车间数据 MK算例 Brandimarte给出了10组柔性作业车间的实例分别是MK01~Mk10,下方即为MK01的实例数据 10 6 26 2 1…

Kubernetes Operator开发

Kubernetes Operator开发 1.kubebuilder 创建项目 2.Crontroller开发与部署 开发环境准备 kubebuilder 介绍 CRD的开发与部署 Crontroller开发与部署 Operator功能设计 借助operator完成 和企业内部注册中心打通 这里以Traefiketcd的模式为例进行演示说明 在这里etcd provi…

现在学习云计算,还有出路吗?

现在学习云计算,还有出路吗? 当然有出路,现在正是学习云计算的好时机。只要你专业技术过关,有一定的项目经验,有的企业甚至接受应届生;其次是具备一定的职业素养,学历在大专及以上,年…

潇洒郎: git配置、拉取、提交代码

git配置拉取代码 git 配置全局变量 git config --global user.name "xuxiaosa" git config --global user.email "xuxiaosamigu.cn" 配置ssh key 1、打开git-bash 输入ssh-keygen 一直回车,会提示文件保存的地址 id_rsa,id_rsa.pub两个文…

谷粒商城二十二订单服务支付

我们支付暂时只开发支付宝, 按照正规的流程,我们的系统要接入支付宝,肯定是需要大量的审核过程,而且需要我们的项目上线。 那现在我们就想测试该怎么办?支付宝为我们提供了沙箱环境,我们可以在应用未上线之…

易观千帆 | 2023年3月银行APP月活跃用户规模盘点

易观:2023年3月手机银行服务应用活跃人数53289.05万,环比增长2.15%,同比增长8.87%。 2023年3月信用卡服务应用活跃人数10800.71万,环比增长1.87%,同比增长18.64%。 2023年3月城商行手机银行服务应用活跃人数3827.43万&…

【项目篇1】一个在线OJ系统

目录 一、前言:项目背景 功能1:能够管理题目 功能2:可以展示题目列表 功能3:题目详情页 功能4:可以令用户提交代码,并验证提交的情况 注意事项: 功能5:反馈运行的结果 二、项…

不同的场景上线时钟同步系统需要注意些什么

时钟同步系统一般都是用在学校或者医院的环境当中,一般时钟同步系统由硬件和软件相组成。对于局域网部署,通常使用NTP协议。对于广域网部署,通常需要考虑网络延迟和安全性等因素。此外,时钟同步系统在不同的使用场景当中的需求也不…

Vite详解

目录 前言一、Vite简介1. Vite组成2.为什么选 Vite? 二、Vite的优缺点1.vite优点2.vite缺点 三、使用Vite创建Vue3项目1. 创建 vite 的项目2.项目的结构 前言 构建工具 Vite,目前只有vue3才可以使用Vite,如果本文对你有所帮助请三连支持博主。 一、V…

雷达人体存在感应器成品,静止存在感控方案,雷达触发联动技术应用

随着社会经济的不断发展和科技水平的不断提高,智能感应类产品越来越多的应用到我们生产与生活之中。 小到家里边的感应灯、单位里的自动门,大到安防报警等诸多领域,都能体验到它给我们带来的便利性与安全性。 雷达人体感应器可以精准探测人体…

fs文件系统模块

一、什么是 fs 文件系统模块 fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。 例如: fs.readFile() 方法,用来读取指定文件中的内容 fs.writeFile() 方法,用来…

计算机网络模型、网络传输、封装分用的详细讲解

文章目录 计算机网络前言1. 初始网络2. 网络通信相关知识2.1 TCP/IP五层网络模型2.2 OSI七层模型 3. 网络传输3.1 封装3.2 分用3.3 数据传输的中间过程 计算机网络 前言 在互联网诞生之前,人们通过发电报等方式进行通信,这种方式是非常不稳定的&#x…