分布式系统问题
文章平均质量分 72
闻道☞
学习是最好的修行
展开
-
Redisson分布式锁源码解读
加锁 & 解锁流程串起来上面结合 Lua 脚本和源码,分别分析了加锁流程和解锁流程。下面升级下挑战难度,模拟下多个线程争抢锁会是怎样的流程。示意图如下,比较关键的三处已用红色字体标注。概括下整个流程1、线程 A 和线程 B 两个线程同时争抢锁。线程 A 很幸运,最先抢到了锁。线程 B 在获取锁失败后,并未放弃希望,而是主动订阅了解锁消息,然后再尝试获取锁,顺便看看没有抢到的这把锁还有多久就过期,线程 B 就按需阻塞等锁释放。原创 2023-07-20 18:41:00 · 610 阅读 · 0 评论 -
消息队列经典十连问
什么是消息队列消息队列的应用场景消息队列如何解决消息丢失问题消息队列如何保证消息的顺序性。消息有可能发生重复消费吗?如何幂等处理?如何处理消息队列的消息积压问题消息队列技术选型,Kafka还是RocketMQ,还是RabbitMQ消息中间件如何做到高可用?如何保证数据一致性,事务消息如何实现如果让你写一个消息队列,该如何进行架构设计?1. 什么是消息队列你可以把消息队列理解为一个使用队列来通信 的组件。它的本质,就是个转发器 ,包含发消息、存消息、消费消息 的过程。最简单的消息队列模型原创 2022-03-18 17:12:15 · 174 阅读 · 0 评论 -
RocketMQ事务消息底层实现原理分析
事务消息实现原理流程RocketMQ 4.3后支持事务消息,采用了2PC的方案来提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,以下为事务消息实现原理图:在这里插入图片描述事务消息发送及提交流程:发送消息(half消息)服务端响应消息写入结果根据发送结果执行本地事务(如果写入失败,此时half消息对业务不可见,本地逻辑不执行)根据本地事务状态执行Commit或者Rollback(Commit操作生成消息索引offset,消息写入commintlog)事务消息补偿流程:转载 2022-02-13 11:24:50 · 242 阅读 · 0 评论 -
数据库与缓存数据一致性解决方案
数据库与缓存数据一致性解决方案数据库与缓存读写模式策略的选择为什么使用缓存功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入数据库与缓存读写模式策略的选择为什么使用缓存主要是从两个角度去考虑:性能和并发使用缓存是为了提高性能,原创 2020-09-10 22:22:54 · 2465 阅读 · 2 评论 -
高并发的核心技术-幂等的实现方案
一、背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。例如:1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。等等很多重要的情况,这些逻辑都需要幂等的特性来支持。二、幂等性概念幂等(i...原创 2020-06-13 21:03:50 · 255 阅读 · 1 评论 -
SpringBoot整合redisson实现分布式锁
通过 SpringBoot 整合 redisson 来实现分布式锁,并结合 demo 测试结果。首先看下大佬总结的图来源:https://www.cnblogs.com/qdhxhz/p/11046905.html正文增加依赖 <!--redis--> <dependency> <groupId>org.springframework.boot </groupId>转载 2020-06-13 20:00:00 · 2561 阅读 · 0 评论 -
如何选择分布式事务解决方案?
概述事务是一组不可分组的操作集合,这些操作要么都成功执行,要么都取消执行。最典型的需要事务的场景是银行账户间的转账:假如 A 账户要给 B 账户转账 100 元,那么 A 账户要扣减 100 元,B 账户要增加 100 元,这两个账户的数据变更都成功才可算作转账成功。更严格来说,可以用 ACID 四个特性表述事务: Atomicity:原子性,事务中的所有操作要么都成功执行,要么都取消执行,不能存在部分执行,部分不执行的状态。 Consistency:一致性,举个例子简单...转载 2020-06-10 11:23:49 · 275 阅读 · 0 评论 -
quartz 数据库表含义解释
一、表信息解析:1.1.qrtz_blob_triggers : 以Blob 类型存储的触发器。1.2.qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。1.3.qrtz_cron_triggers:存放cron类型的触发器。1.4.qrtz_fired_triggers:存放已触发的触发器。1.5.qrtz_job_details:存放一个j...原创 2020-03-04 17:46:50 · 1434 阅读 · 0 评论 -
网站跨域解决方案
目录1. 网站跨域解决方案1.1 什么是网站跨域1.2 五种网站跨域解决方案1.2.1 使用JSONP解决网站跨域1.2.2 使用设置响应头允许跨域1.2.3 使用HttpClient进行内部转发1.2.4 搭建企业级API接口网关1.2.5 使用SpringCloud Zuul搭建API接口网关1. 网站跨域解决方案1.1 什么是网站跨域跨域原因产生:...原创 2019-11-07 15:06:10 · 448 阅读 · 0 评论 -
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。缓存正常从Redis中获取,示意图如下:缓存失效瞬间示意图如下:缓...原创 2019-02-11 13:52:09 · 299 阅读 · 0 评论 -
基于Zookeeper实现分布式锁(三)
实现分布式锁的方式非常多,zookeeper、redis、数据库等均可。zookeeper的四种节点类型1、持久化节点 :所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。2、持久化顺序节点:这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会...原创 2018-11-16 00:02:29 · 516 阅读 · 0 评论 -
分布式ID生成策略
目录1.ID生成系统的需求2.分布式系统唯一ID生成策略1. 数据库自增长序列或字段2.UUID3.SnowFlake雪花算法4. 利用zookeeper生成唯一ID5. MongoDB的ObjectId6. Redis生成ID1.ID生成系统的需求1.全局唯一性:不能出现重复的ID,最基本的要求。2.趋势递增:MySQL InnoDB引擎使用的是聚集索引...原创 2018-11-27 22:12:27 · 1358 阅读 · 0 评论 -
单点登录原理与简单实现(二)
目录一、单系统登录机制1、http无状态协议2、会话机制3、登录状态3.1 分布式session问题3.2 解决session共享问方案二、多系统的复杂性三、单点登录1、登录2、注销四、部署图五、实现1、sso-client拦截未登录请求2、sso-server拦截未登录请求3、sso-server验证用户登录信息4、sso-serv...转载 2018-11-25 16:44:12 · 342 阅读 · 0 评论 -
基于redis实现分布式锁
1.分布式锁的应用场景当多个机器(多个进程)会对同一条数据进行修改时,并且要求这个修改是原子性的。这里有两个限定:1. 多个进程之间的竞争,意味着JDK自带的锁失效;2. 原子性修改,意味着数据是有状态的,修改前后有依赖。2.分布式锁的实现条件1. 高性能(加、解锁时高性能)2.可以使用阻塞锁与非阻塞锁。3.不能出现死锁。4.可用性(不能出现节点 down 掉后加锁失败)。...原创 2018-11-19 17:11:53 · 372 阅读 · 0 评论 -
分布式事务- TCC 两阶段型、补偿型(九)
实现 一个完整的业务活动由一个主业务服务与若干从业务服务组成 主业务服务负责发起并完成整个业务活动 从业务服务提供TCC型业务操作 业务活动管理器控制业务活动的一致性,它登记业务活动中的操作, 并在业务活动提交时确认所有的TCC型操作的confirm操作,在业务活动取消时调用所有TCC型操作的cancel操作 成本 实现TCC操作的成本 ...转载 2018-11-16 15:39:03 · 844 阅读 · 0 评论 -
使用消息队列实现分布式事务-公认较为理想的分布式事务解决方案(三)
前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除转载 2017-05-02 17:45:08 · 10601 阅读 · 0 评论 -
分布式事物学习之最大努力通知型(八)
实现业务活动的主动方,在完成业务处理之后向业务活动方发送消息,允许消息丢失业务活动的被动方根据定时策略,向业务活动方查询结果,恢复丢失的业务约束被动方的处理结果不影响主动方的处理结果成本:业务查询与校对的系统的成本业务方的执行结果要提供可查询接口适用范围:对业务最终一致性的时间敏感度低跨企业的业务活动场景,银行通知,商原创 2017-12-31 15:34:47 · 1255 阅读 · 0 评论 -
分布式事务学习(一)
目录1.事务1.1本地事务1.2 全局事务1.3 DTP(全局事务)之二阶段提交协议13.1 XA接口1.3.2 JTA规范2. BASE理论和CAP理论2.1 ACID2.2 CAP3. 柔性事务3.1 柔性事务中的服务模式柔性事务中的服务模式---可查询操作柔性事务中的服务模式---TCC操作4 柔性事务解决方案4.1 异步确保...原创 2017-04-19 17:00:07 · 819 阅读 · 0 评论 -
MQ消息中间件在分布式系统中的作用(四)
1.消息中间件在分布式系统中的作用介绍消息中间件是在分布式系统中完成消息的发送和接收的基础软件。1.1消息中间件可利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以在分布式环境下扩展进程间的通信。通过消息中间件,应用程序或组件之间可以进行可靠的异步通讯,从而降低系统之间的耦合度,提高系统的可扩展性和可用性。...原创 2017-05-06 11:32:55 · 21653 阅读 · 0 评论 -
分布式事务学习-消息发送一致性分析(五)
消息发送一致性消息发送一致性:是指产生消息的业务动作与消息发送的一致。(也就是说,如果业务操作成功,那么由这个业务操作所产生的消息一定要成功投递出去,否则就丢消息)消息发送一致性的正向分析消息发送一致性的异常情况分析 MQ队列消息的生产与消费常规流程常规MQ队列消息的处理流程无法实现消息发送一致性,因此直接使用现成的MQ中间件产品无法实现可靠消息最终一致性的分布式事务解决方案消息重复发送问题消息重...原创 2017-12-28 18:22:10 · 419 阅读 · 0 评论 -
分布式事物学习之(可靠消息一致性方案之本地消息服务)(六)
消息发送一致性正向流程:业务操作,消息的存储发送(1,2,3)在一个事务里,成功,消费端监听到消息后进行业务处理,成功调用消息状态确认接口,将状态改为成功。1-2-3-4-5消息发送一致性异常流程:假如消息发送失败,业务消息多回滚;假如消息发送成功,消息投递失败,消息没被消费,业务执行失败;消息恢复系统会定时查询未确认的消息,调用业务结果查询接口,如果成功,将消息状态改为成功。如果没查到或失败,再...原创 2017-12-29 15:30:18 · 360 阅读 · 0 评论 -
分布式事物学习之(可靠消息一致性方案之独立消息服务)(七)
可靠消息正向流程:1.调用消息服务子系统-存储预发送消息接口,此时消息状态为预发送2.3,业务操作,和发送业务操作通知在一个事务理,成功调用消息服务接口,将消息状态改为已确认未完成,并发送消息,消费端接收到消息,执行业务操作并调用消息服务接口将状态置为成功(这是在一个事务里面)消息状态确认子系统:定时查询那些状态为预发送没确认的消息,调用业务接口查询业务执行结果。成功将状态改为确认并发送消息,失败...原创 2017-12-29 17:20:53 · 1012 阅读 · 0 评论 -
分布式Session
目录1. Session Replication 方式管理 (即session复制)2. Session Sticky 方式管理3. 缓存集中式管理1.使用Redis存放Session2. 基于令牌(Token)方式实现Session解决方案Session是服务器用来保存用户操作的一系列会话信息,由Web容器进行管理。单机情况下,不存在Session共享的情况,分布式情况...原创 2018-07-26 11:00:33 · 689 阅读 · 0 评论 -
分布式锁三种实现方式
转自:https://blog.csdn.net/xlgen157387/article/details/79036337学过Java多线程的应该都知道什么是锁,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制。在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等。一、为什么...转载 2018-07-25 17:48:41 · 2364 阅读 · 0 评论 -
分布式架构系统拆分原则、需求、微服务拆分步骤
转载:http://youzhixueyuan.com/the-principles-and-steps-of-distributed-architecture-system-resolution.html为什么需要应用拆分我以淘宝技术架构演进为例,淘宝从一个大系统工程向分布式架构演变过程,你就能很清楚的知道为什么要需要进行应用拆分。1 人员的角度。维护一个代名工程Denali...转载 2018-09-12 15:21:16 · 16613 阅读 · 0 评论 -
单点登录的原理、来源、实现、以及技术方案比较(一)
目录为什么需要单点登录单点登录的来源1.早期的单机部署:web单系统应用2.分布式集群部署单点登录的原理和实现1.基于Cookie的单点登录2.分布式session方式实现单点登录总结:转载自:http://youzhixueyuan.com/the-principle-implementation-and-technical-scheme-of-single-...转载 2018-09-12 17:04:46 · 37015 阅读 · 8 评论 -
分事事务之异步确保性(二)
数据库dbA表t1数据库dbB表t2目标,t1插入记录时,同时保证t2也插入假如使用分布事务,非常简单开始分布事务...insert into t1 ...insert into t2 ...提交分布事务不使用分布事务要保证一致是无法直接实现的,比如开始事务...insert into t1 ...提交转载 2017-05-02 17:25:58 · 3053 阅读 · 0 评论