场景:系统被分为两大服务,用户服务模块(A)、订单系统服务(B)。下单后给用户返积分。两个系统分管各自的数据库。

方案一:该方案属于最终一致性类型。主要分两个点——消息发送端保证消息能够成功的发出去、消息接受端保证接受到消息后能顺利的处理消息。操作思路:1、消息发送端:在本地服务建立一个记录发送消息的表。在用户下单的同时在表中插入一条记录标识为待发送的消息。将消息发送到消息队列,并将表中的状态修改为已经发送。2:消息接收端:在本地服务中建立一张消息处理日志表。接收到消息后,判断是否已经在消息处理日志表中存在,如果不存在处理消息。给用户添加积分同时在消息处理日志表中插入一条记录,删除消息队列中的此条消息。

伪代码:

<?php
//消息发送者
begin transaction:$res1 =  insert into order set order_id='1',user_id=2,status = '0';$res2 = insert into message set message_id=order_id,message_content=order;
if($res1 && $res2){commit;$res = $sendMessage($order);if($res == true){update message set status = 1;}
}else roll back;
<?php
//消息接收者
$message = getMessage();
begin transaction:$res = update user set jifen=jifen + 100 where id=user_id;$res2 = insert into message_log set message=message,id=message_id;
if($res && $res2){commit;deleteMessage($message_id);
}else{roll back;
}

同时分别开两个后台脚本去定时扫描消息记录表,如果有待发送的消息立即处理!

http://www.cnblogs.com/soundcode/p/5590710.html

分布式系统如何保证数据一致性相关推荐

  1. mysql数据迁移数据一致性检教6_如何在数据库迁移中保证数据一致性?

    原标题:如何在数据库迁移中保证数据一致性? 作者 | 王斌 译者 | 平川 策划 | 万佳 在分布式系统中,保持数据一致非常困难,而且很容易出错.在本文中,我们将探索一种在迁移期间保持数据一致性的方法 ...

  2. php并发扣款,PHP 并发扣款,保证数据一致性(悲观锁)

    业务场景分析 用户购买商品的逻辑中,需要对用户钱包的余额进行查询和扣款 异常:如果同一用户并发执行多个业务进行"查询+扣款"的业务中有一定概率出现数据不一致 Tips:如果没有做限 ...

  3. redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...

    上周因为实在太忙就认认真真写了一篇水文,吹了一下自己过去的经历,反响竟然超出了我的预期,并且后台还有读者留言表示想看续集的.哈哈,果然大家还是对水文更有热情. 这期我们继续回到之前的 Redis 话题 ...

  4. MySQL 在高并发下的 订单撮合 系统使用 共享锁 与 排他锁 保证数据一致性

    原文:MySQL 在高并发下的 订单撮合 系统使用 共享锁 与 排他锁 保证数据一致性 作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe1 ...

  5. RabbitMQ实现多系统间的分布式事务,保证数据一致性

    点击关注公众号,实用技术文章及时了解 一.实验环境 Lunix系统:Centos7.5 安装软件:rabbitmq 开发工具:IDEA 二.实验目的 Rabbitmq实现多系统间的分布式事务,保证数据 ...

  6. mha数据备份_MySQL备份与恢复之保证数据一致性(5)

    在上一篇文章中我们提到热拷贝(MySQL备份与恢复之热拷贝),热拷贝也就是在MySQL或者其他数据库服务在运行的情况下使用mysqlhotcopy命令进行备份.这篇文章我们讲解怎样保证数据一致性.现在 ...

  7. redis主从保证数据一致性

    redis主从保证数据一致性 前言 在redis中为了保证redis的高可用,一般会搭建一种集群模式就是主从模式. 主从模式可以保证redis的高可用,那么redis是怎么保证主从服务器的数据一致性的 ...

  8. elasticsearch 如何保证数据一致性?

    <<ElasticSearch 集群是如何保证数据的一致性和实时性?>> <<Elasticsearch 如何保证数据不丢失?>> <<el ...

  9. Java怎么保证数据一致性_连续调用多个外部系统写接口保证数据一致性的思路...

    概述 某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面.比如说: public void updateProd ...

  10. RabbitMQ实现分布式事务,保证数据一致性

    一.实验环境 Lunix系统:Centos7.5 安装软件:rabbitmq 开发工具:IDEA 二.实验目的 Rabbitmq实现多系统间的分布式事务,保证数据一致性 三.实验方案 rabbitmq ...

最新文章

  1. python创建进程的方法_python进程的状态、创建及使用方法详解
  2. 计算机设备的热量,帮我计算机一下这块冰能吸收多少热量?
  3. Java:这是一份全面 详细的 Synchronized关键字 学习指南
  4. PHP操作MongoDB GridFS 存储文件
  5. qt 子窗口与父窗口数据通信_Qt实例--主窗口和子窗口互发信号
  6. FPGA外挂DDR存储器简介
  7. Python库:内存监控模块memory_profiler(待完善)
  8. Helm 3 完整教程(十八):Helm 流控制结构(2)with 语句
  9. java 参数传值的练习题及答案_04_javaSE面试题:方法的参数传递机制
  10. 前端调试效率低?试试这10个“Chrome开发者工具”使用技巧
  11. 远程控制——一句话木马
  12. 图片默认底部3px缝隙
  13. 服务器异常的处理方式
  14. 「应用安全」应用安全原则
  15. 什么是EarlyStopping?
  16. PHP执行Shell脚本或Bash脚本文件并返回命令输出详情
  17. Flink的非Barrier对齐可以优化高反压
  18. java 实现可视化远程控制
  19. RFID 动态Q静态Q是什么意思
  20. mysql 连续登录天数

热门文章

  1. python将图片转换成手绘_利用Python生成手绘效果的图片
  2. 微信公众号账号测试申请
  3. 35岁开发转测试,能度过中年危机吗?
  4. 2022N1叉车司机国家题库及答案
  5. MATLAB 电子书
  6. linux convert命令把gif转jpg
  7. 2020-10-13 用JavaScript做的贪吃蛇小游戏
  8. 前端开发和后端开发究竟有什么区别?详细介绍
  9. win10 u盘 修复计算机,U盘启动盘修复win10系统的方法
  10. 手机上PDF转换成JPG图片超简单的方法