精华内容
下载资源
问答
  • Redis功能强大,数据类型丰富,再快的系统,也经不住疯狂的滥用。通过禁用部分高风险功能,并挂上开发的枷锁,业务更能够以简洁、通用的思想去考虑问题,而不是绑定在某种实现上。Redis根据不同的用途,会有不同的...
    11ad1a4f7c4772c17f46f27492260a53.png

    Redis功能强大,数据类型丰富,再快的系统,也经不住疯狂的滥用。通过禁用部分高风险功能,并挂上开发的枷锁,业务更能够以简洁、通用的思想去考虑问题,而不是绑定在某种实现上。

    Redis根据不同的用途,会有不同的持久化策略和逐出策略,所以,在使用和申请 Redis 集群前,请明确是用来做缓存还是存储。Redis的集群有主从和 cluster 两种模式,各有优缺点。以下规范不区分集群模式,我们分别从使用场景和操作限制两方面说明。

    使用规范

    冷热数据区分

    虽然 Redis支持持久化,但将所有数据存储在 Redis 中,成本非常昂贵。建议将热数据 (如 QPS超过 5k) 的数据加载到 Redis 中。低频数据可存储在 Mysql、 ElasticSearch中。

    业务数据分离

    不要将不相关的数据业务都放到一个 Redis中。一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。

    消息大小限制

    由于 Redis 是单线程服务,消息过大会阻塞并拖慢其他操作。保持消息内容在 1KB 以下是个好的习惯。严禁超过 50KB 的单条记录。消息过大还会引起网络带宽的高占用,持久化到磁盘时的 IO 问题。

    连接数限制

    连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机当机。请确保使用了正确的 Redis 客户端连接池配置。

    缓存 Key 设置失效时间

    作为缓存使用的 Key,必须要设置失效时间。失效时间并不是越长越好,请根据业务性质进行设置。注意,失效时间的单位有的是秒,有的是毫秒,这个很多同学不注意容易搞错。

    缓存不能有中间态

    缓存应该仅作缓存用,去掉后业务逻辑不应发生改变,万不可切入到业务里。

    • 缓存的高可用会影响业务;
    • 产生深耦合会发生无法预料的效果;
    • 会对维护行产生肤效果。

    扩展方式首选客户端 hash

    如果应用太小就别考虑了,如单 redis 集群并不能为你的数据服务,不要着急扩大你的 redis 集群(包括 M/S 和 Cluster),集群越大,在状态同步和持久化方面的性能越差。 优先使用客户端 hash 进行集群拆分。如:根据用户 id 分 10 个集群,用户尾号为 0 的落在第一个集群。

    操作限制

    严禁使用 Keys

    Keys 命令效率极低,属于 O(N)操作,会阻塞其他正常命令,在 cluster 上,会是灾难性的操作。严禁使用,DBA 应该 rename 此命令,从根源禁用。

    严禁使用 Flush

    flush 命令会清空所有数据,属于高危操作。严禁使用,DBA 应该 rename 此命令,从根源禁用,仅 DBA 可操作。

    严禁作为消息队列使用

    如没有非常特殊的需求,严禁将 Redis 当作消息队列使用。Redis 当作消息队列使用,会有容量、网络、效率、功能方面的多种问题。如需要消息队列,可使用高吞吐的 Kafka 或者高可靠的 RocketMQ。

    严禁不设置范围的批量操作

    redis 那么快,慢查询除了网络延迟,就属于这些批量操作函数。大多数线上问题都是由于这些函数引起。

    1、[zset] 严禁对 zset 的不设范围操作

    ZRANGE、 ZRANGEBYSCORE等多个操作 ZSET 的函数,严禁使用 ZRANGE myzset 0 -1 等这种不设置范围的操作。请指定范围,如 ZRANGE myzset 0 100。如不确定长度,可使用 ZCARD 判断长度

    2、[hash] 严禁对大数据量 Key 使用 HGETALL

    HGETALL会取出相关 HASH 的所有数据,如果数据条数过大,同样会引起阻塞,请确保业务可控。如不确定长度,可使用 HLEN 先判断长度

    3、[key] Redis Cluster 集群的 mget 操作

    Redis Cluster 的 MGET 操作,会到各分片取数据聚合,相比传统的 M/S架构,性能会下降很多,请提前压测和评估

    4、[其他] 严禁使用 sunion, sinter, sdiff等一些聚合操作

    禁用 select 函数

    select函数用来切换 database,对于使用方来说,这是很容易发生问题的地方,cluster 模式也不支持多个 database,且没有任何收益,禁用。

    禁用事务

    redis 本身已经很快了,如无大的必要,建议捕获异常进行回滚,不要使用事务函数,很少有人这么干。

    禁用 lua 脚本扩展

    lua 脚本虽然能做很多看起来很 cool 的事情,但它就像是 SQL 的存储过程,会引入性能和一些难以维护的问题,禁用。

    禁止长时间 monitor

    monitor函数可以快速看到当前 redis 正在执行的数据流,但是当心,高峰期长时间阻塞在 monitor 命令上,会严重影响 redis 的性能。此命令不禁止使用,但使用一定要特别特别注意。

    Key 规范

    Redis 的 Key 一定要规范,这样在遇到问题时,能够进行方便的定位。Redis 属于无 scheme 的 KV 数据库,所以,我们靠约定来建立其 scheme 语义。其好处:

    1、能够根据某类 key 进行数据清理 2、能够根据某类 key 进行数据更新 3、能够方面了解到某类 key 的归属方和应用场景 4、为统一化、平台化做准备,减少技术变更

    一般,一个 key 需要带以下维度:业务、key 用途、变量等,各个维度使用 : 进行分隔,以下是几个 key 的实例:

    user:sex 用户 10002232 的性别 msg:achi 201712 的用户发言数量排行榜

    最后

    适当的约束是架构成熟的必要条件,通过约定能达到规范是集体开发的最高境界。Redis用的多,也要用的稳,给点约束、立点规矩,生活将变的美好。通过二次封装redis客户端,直接阻断,效果更佳。

    我目前是在职Java开发,如果你现在正在了解Java技术,想要学好Java,渴望成为一名Java开发工程师,在入门学习Java的过程当中缺乏基础的入门视频教程,你可以关注并私信我:01。我这里有一套最新的Java基础JavaSE的精讲视频教程,这套视频教程是我在年初的时候,根据市场技术栈需求录制的,非常的系统完整。

    展开全文
  • 对于企业而言,目前所面临的数据泄露危机主要来自于内部人员有意或者无意的泄密,这个内部数据泄密中占比较高,外部数据泄露危机主要竞争对手的窃密以及黑客攻击等等,这都在互联网竞争中数据信息安全威胁的...

    对于企业而言,目前所面临的数据泄露危机主要是来自于内部人员有意或者无意的泄密,这个是内部数据泄密中占比较高,外部数据泄露危机主要是竞争对手的窃密以及黑客攻击等等,这都是在互联网竞争中数据信息安全威胁的来源,因而,企业需要做到的是在底层数据源头做好数据防泄密工作,保证数据文件的使用安全。这也是目前企业高度重视对办公文档加密的原因。

    就目前的加密技术以及企业使用比较广的加密软件产品来分析,Windows驱动层透明加密技术是企事业单位使用。为什么企事业单位更愿意选择和使用驱动层加密软件产品?接下来我们就从以下几个方面来具体分析:

    首先,Windows底层加密不会影响内部人员的日常办公使用,并给文件的整个加密过程都是在操作系统底层进行稳定,加密安全性以及稳定性高,适合企业办公使用。

    其次,驱动层加密的产品功能比较齐全,并且加密后的安全系数较高,例如,文件会在底层系统运行的时候就对相关的文件加密,其加密的算法也是根据不同的环境生成的不同的秘钥,加密后的文件不会影响企业的正常使用的前提下进行的。

    这里要说的是驱动层加密这块目前做的比较好的,风奥金甲加密,可实现对核心数据的强制加密和透明使用,如对OFFICE文档、PDF文档、结构图,二维、三维图纸、源代码、视频课件等等等进行加密防护,防止数据外泄。对于外放数据进行有效的权限管理、避免由于外放数据带来的二次扩散风险。

    很多企业都有过数据信息丢失或被盗用的经历,并且已经强烈意识到在数据信息安全上的隐患与信息安全防护的重要性,即便有数据安全防护措施,但整体仍然比较薄弱,同时,数据安全的认知度,企业消费者对数据信息安全产品仍缺乏必要的了解,因此,时刻提醒企业,需要加强对数据文件的安全管控,不能忽视数据信息安全问题。

    展开全文
  • 进程具有一定独立功能的程序关于一个数据集合的一次运行活动。进程具有以下主要特性: (1)并发性:可以与其它进程一道在宏观上同时向前推进。 (2)动态性:进程执行中的程序。此外进程的动态性还体现在如下...

    进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。

    进程具有以下主要特性:
    (1)并发性: 可以与其它进程一道在宏观上同时向前推进。
    (2)动态性: 进程是执行中的程序。此外进程的动态性还体现在如下两个方面:首先,进程是动态产生、动态消亡的;其次,在进程的生存期内,其状态处于经常性的动态变化之中。
    (3)独立性: 进程是调度的基本单位,它可以获得处理机并参与并发执行。
    (4)交往性: 进程在运行过程中可能会与其它进程发生直接或间接的相互作用。
    (5)异步性: 每个进程都以其相对独立、不可预知的速度向前推进。
    (6)结构性: 每个进程有一个控制块PCB。

    进程和程序的相同点: 程序是构成进程的组成部分之一,一个进程存在的目的就是执行其所对应的程序,如果没有程序,进程就失去了其存在的意义。

    进程与程序的差别:

    (1)程序是静态的,而进程是动态的;

    (2)程序可以写在纸上或在某一存储介质上长期保存,而进程具有生存期,创建后存在,撤销后消亡;

    (3)一个程序可以对应多个进程,但一个进程只能对应一个程序;例如,一组学生在一个分时系统中做C语言实习,他们都需要使用C语言的编译程序对其源程序进行编译,为此每个学生都需要有一个进程,这些进程都运行C语言的编译程序。 另外,一个程序的多次执行也分别对应不同的进程。

    展开全文
  • 数据库事务(简称:事务,Transaction)指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成[由当前业务逻辑多个不同操作构成]。 事务拥有以下四个特性,习惯上被称为ACID特性: 原子性(Atomicity):...

    一、分布式事务介绍

    1.1 什么是事务

    数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成[由当前业务逻辑多个不同操作构成]。

    事务拥有以下四个特性,习惯上被称为ACID特性:

    原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

    一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外,一致性还有另外一层语义,就是事务的中间状态不能被观察到(这层语义也有说应该属于原子性)。

    隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行,如同只有这一个操作在被数据库所执行一样。

    持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。在事务结束时,此操作将不可逆转。

    1.2 本地事务

    起初,事务仅限于对单一数据库资源的访问控制,架构服务化以后,事务的概念延伸到了服务中。倘若将一个单一的服务操作作为一个事务,那么整个服务操作只能涉及一个单一的数据库资源,这类基于单个服务单一数据库资源访问的事务,被称为本地事务(Local Transaction)。

    在这里插入图片描述

    1.3 什么是分布式事务

    分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,且属于不同的应用,分布式事务需要保证这些操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

    1.4 分布式事务应用架构

    本地事务主要限制在单个会话内,不涉及多个数据库资源。但是在基于SOA(Service-Oriented Architecture,面向服务架构)的分布式应用环境下,越来越多的应用要求对多个数据库资源,多个服务的访问都能纳入到同一个事务当中,分布式事务应运而生。

    1.4.1 单一服务分布式事务

    最早的分布式事务应用架构很简单,不涉及服务间的访问调用,仅仅是服务内操作涉及到对多个数据库资源的访问。

    在这里插入图片描述

    1.4.2 多服务分布式事务

    当一个服务操作访问不同的数据库资源,又希望对它们的访问具有事务特性时,就需要采用分布式事务来协调所有的事务参与者。

    对于上面介绍的分布式事务应用架构,尽管一个服务操作会访问多个数据库资源,但是毕竟整个事务还是控制在单一服务的内部。如果一个服务操作需要调用另外一个服务,这时的事务就需要跨越多个服务了。在这种情况下,起始于某个服务的事务在调用另外一个服务的时候,需要以某种机制流转到另外一个服务,从而使被调用的服务访问的资源也自动加入到该事务当中来。下图反映了这样一个跨越多个服务的分布式事务:

    在这里插入图片描述

    1.4.3 多服务多数据源分布式事务

    如果将上面这两种场景(一个服务可以调用多个数据库资源,也可以调用其他服务)结合在一起,对此进行延伸,整个分布式事务的参与者将会组成如下图所示的树形拓扑结构。在一个跨服务的分布式事务中,事务的发起者和提交均系同一个,它可以是整个调用的客户端,也可以是客户端最先调用的那个服务。

    在这里插入图片描述
    较之基于单一数据库资源访问的本地事务,分布式事务的应用架构更为复杂。在不同的分布式应用架构下,实现一个分布式事务要考虑的问题并不完全一样,比如对多资源的协调、事务的跨服务传播等,实现机制也是复杂多变。

    事务的作用:

    保证每个事务的数据一致性。
    

    1.5 CAP定理

    CAP 定理,又被叫作布鲁尔定理。对于设计分布式系统(不仅仅是分布式事务)的架构师来说,CAP 就是你的入门理论。

    • C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。

      对于数据分布在不同节点上的数据来说,如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数据,那么就称为强一致,如果有某个节点没有读取到,那就是分布式不一致。

    • A (可用性):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性的两个关键一个是合理的时间,一个是合理的响应。

      合理的时间指的是请求不能无限被阻塞,应该在合理的时间给出返回。合理的响应指的是系统应该明确返回结果并且结果是正确的,这里的正确指的是比如应该返回 50,而不是返回 40。

    • P (分区容错性):当出现网络分区后,系统能够继续工作。打个比方,这里集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。

    熟悉 CAP 的人都知道,三者不能共有,如果感兴趣可以搜索 CAP 的证明,在分布式系统中,网络无法 100% 可靠,分区其实是一个必然现象。

    如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证一致性,这个时候必须拒绝请求,但是 A 又不允许,所以分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。

    对于 CP 来说,放弃可用性,追求一致性和分区容错性,我们的 ZooKeeper 其实就是追求的强一致。

    对于 AP 来说,放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,后面的 BASE 也是根据 AP 来扩展。

    顺便一提,CAP 理论中是忽略网络延迟,也就是当事务提交时,从节点 A 复制到节点 B 没有延迟,但是在现实中这个是明显不可能的,所以总会有一定的时间是不一致。

    同时 CAP 中选择两个,比如你选择了 CP,并不是叫你放弃 A。因为 P 出现的概率实在是太小了,大部分的时间你仍然需要保证 CA。

    就算分区出现了你也要为后来的 A 做准备,比如通过一些日志的手段,是其他机器回复至可用。

    在这里插入图片描述

    二、分布式事务解决方案

    2.1 基于XA协议的两阶段提交(2PC)

    两阶段提交协议(Two Phase Commitment Protocol)中,涉及到两种角色

    一个事务协调者(coordinator):负责协调多个参与者进行事务投票及提交(回滚)
    多个事务参与者(participants):即本地事务执行者

    总共处理步骤有两个
    (1)投票阶段(voting phase):协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。参与者将告知协调者自己的决策:同意(事务参与者本地事务执行成功,但未提交)或取消(本地事务执行故障);
    (2)提交阶段(commit phase):收到参与者的通知后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚;

    如果所示 1-2为第一阶段,2-3为第二阶段

    在这里插入图片描述
    在这里插入图片描述
    如果任一资源管理器在第一阶段返回准备失败,那么事务管理器会要求所有资源管理器在第二阶段执行回滚操作。通过事务管理器的两阶段协调,最终所有资源管理器要么全部提交,要么全部回滚,最终状态都是一致的

    官方解决方案图例如下:

    在这里插入图片描述
    优点: 尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。

    缺点: 牺牲了可用性,对性能影响较大,不适合高并发高性能场景,如果分布式系统跨接口调用,目前 .NET 界还没有实现方案。

    2.2 补偿事务(TCC)

    TCC 将事务提交分为 Try(method1) - Confirm(method2) - Cancel(method3) 三个操作。其和二阶段提交有点类似,Try为第一阶段,Confirm - Cancel为第二阶段,是一种应用层面侵入业务的两阶段提交。

    操作方法 含义
    Try 预留业务资源/数据效验
    Confirm 确认执行业务操作,实际提交数据,不做任何业务检查,try成功,confirm必定成功,需保证幂等
    Cancel 取消执行业务操作,实际回滚数据,需保证幂等

    其核心在于将业务分为两个操作步骤完成。不依赖 RM 对分布式事务的支持,而是通过对业务逻辑的分解来实现分布式事务。

    在这里插入图片描述
    例如: A要向 B 转账,思路大概是:

    我们有一个本地方法,里面依次调用 
    1、首先在Try阶段,要先调用远程接口把B和A的钱给冻结起来。 
    2、在Confirm阶段,执行远程调用的转账的操作,转账成功进行解冻。 
    3、如果第2步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解冻方法(Cancel)。 
    

    1、当所有try()方法均执行成功时,对全局事物进行提交,即由事物管理器调用每个微服务的confirm()方法

    2、 当任意一个方法try()失败(预留资源不足,抑或网络异常,代码异常等任何异常),由事物管理器调用每个微服务的cancle()方法对全局事务进行回滚

    优点: 跟2PC比起来,实现以及流程相对简单了一些,但数据的一致性比2PC也要差一些

    缺点: 缺点还是比较明显的,在2,3步中都有可能失败。TCC属于应用层的一种补偿方式,所以需要程序员在实现的时候多写很多补偿的代码,在一些场景中,一些业务流程可能用TCC不太好定义及处理。

    2.3 本地消息表(异步确保)

    本地消息表这种实现方式应该是业界使用最多的,其核心思想是将分布式事务拆分成本地事务进行处理,这种思路是来源于ebay。我们可以从下面的流程图中看出其中的一些细节:
    在这里插入图片描述
    基本思路就是:

    消息生产方,需要额外建一个消息表,并记录消息发送状态。消息表和业务数据要在一个事务里提交,也就是说他们要在一个数据库里面。然后消息会经过MQ发送到消息的消费方。如果消息发送失败,会进行重试发送。

    消息消费方,需要处理这个消息,并完成自己的业务逻辑。此时如果本地事务处理成功,表明已经处理成功了,如果处理失败,那么就会重试执行。如果是业务上面的失败,可以给生产方发送一个业务补偿消息,通知生产方进行回滚等操作。

    生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。如果有靠谱的自动对账补账逻辑,这种方案还是非常实用的。

    这种方案遵循BASE理论,采用的是最终一致性,我认为是这几种方案里面比较适合实际业务场景的,即不会出现像2PC那样复杂的实现(当调用链很长的时候,2PC的可用性是非常低的),也不会像TCC那样可能出现确认或者回滚不了的情况。

    优点: 一种非常经典的实现,避免了分布式事务,实现了最终一致性。在 .NET中 有现成的解决方案。

    缺点: 消息表会耦合到业务系统中,如果没有封装好的解决方案,会有很多杂活需要处理。

    2.4MQ事务消息

    有一些第三方的MQ是支持事务消息的,比如RocketMQ,他们支持事务消息的方式也是类似于采用的二阶段提交,但是市面上一些主流的MQ都是不支持事务消息的,比如 RabbitMQ 和 Kafka 都不支持。

    以阿里的 RocketMQ 中间件为例,其思路大致为:

    第一阶段Prepared消息,会拿到消息的地址。
    第二阶段执行本地事务,第三阶段通过第一阶段拿到的地址去访问消息,并修改状态。

    也就是说在业务方法内要想消息队列提交两次请求,一次发送消息和一次确认消息。如果确认消息发送失败了RocketMQ会定期扫描消息集群中的事务消息,这时候发现了Prepared消息,它会向消息发送者确认,所以生产方需要实现一个check接口,RocketMQ会根据发送端设置的策略来决定是回滚还是继续发送确认消息。这样就保证了消息发送与本地事务同时成功或同时失败。

    在这里插入图片描述
    优点: 实现了最终一致性,不需要依赖本地数据库事务。

    缺点: 目前主流MQ中只有RocketMQ支持事务消息。

    2.5 Seata 2PC->改进

    2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题。

    Fescar 开源后,蚂蚁金服加入 Fescar 社区参与共建,并在 Fescar 0.4.0 版本中贡献了 TCC 模式。

    为了打造更中立、更开放、生态更加丰富的分布式事务开源社区,经过社区核心成员的投票,大家决定对 Fescar 进行品牌升级,并更名为 Seata,意为:Simple Extensible Autonomous Transaction Architecture,是一套一站式分布式事务解决方案。

    Seata 融合了阿里巴巴和蚂蚁金服在分布式事务技术上的积累,并沉淀了新零售、云计算和新金融等场景下丰富的实践经验。

    2.5.1 Seata介绍

    解决分布式事务问题,有两个设计初衷

    对业务无侵入:即减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入

    高性能:减少分布式事务解决方案所带来的性能消耗

    seata中有两种分布式事务实现方案,AT及TCC

    • AT模式主要关注多 DB 访问的数据一致性,当然也包括多服务下的多 DB 数据访问一致性问题

    • TCC 模式主要关注业务拆分,在按照业务横向扩展资源时,解决微服务间调用的一致性问题

    2.5.2 AT模式

    Seata AT模式是基于XA事务演进而来的一个分布式事务中间件,XA是一个基于数据库实现的分布式事务协议,本质上和两阶段提交一样,需要数据库支持,Mysql5.6以上版本支持XA协议,其他数据库如Oracle,DB2也实现了XA接口

    在这里插入图片描述
    解释:

    Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
    Transaction Manager(TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
    Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。

    协调执行流程如下:

    在这里插入图片描述
    Branch就是指的分布式事务中每个独立的本地局部事务。

    第一阶段

    Seata 的 JDBC 数据源代理通过对业务 SQL 的解析,把业务数据在更新前后的数据镜像组织成回滚日志,利用 本地事务 的 ACID 特性,将业务数据的更新和回滚日志的写入在同一个 本地事务 中提交。

    这样,可以保证:任何提交的业务数据的更新一定有相应的回滚日志存在

    在这里插入图片描述
    基于这样的机制,分支的本地事务便可以在全局事务的第一阶段提交,并马上释放本地事务锁定的资源

    这也是Seata和XA事务的不同之处,两阶段提交往往对资源的锁定需要持续到第二阶段实际的提交或者回滚操作,而有了回滚日志之后,可以在第一阶段释放对资源的锁定,降低了锁范围,提高效率,即使第二阶段发生异常需要回滚,只需找对undolog中对应数据并反解析成sql来达到回滚目的

    同时Seata通过代理数据源将业务sql的执行解析成undolog来与业务数据的更新同时入库,达到了对业务无侵入的效果。

    第二阶段

    如果决议是全局提交,此时分支事务此时已经完成提交,不需要同步协调处理(只需要异步清理回滚日志),Phase2 可以非常快速地完成。

    在这里插入图片描述
    如果决议是全局回滚,RM 收到协调器发来的回滚请求,通过 XID 和 Branch ID 找到相应的回滚日志记录,通过回滚记录生成反向的更新 SQL 并执行,以完成分支的回滚

    在这里插入图片描述

    2.5.3 TCC模式

    seata也针对TCC做了适配兼容,支持TCC事务方案,原理前面已经介绍过,基本思路就是使用侵入业务上的补偿及事务管理器的协调来达到全局事务的一起提交及回滚。

    在这里插入图片描述

    展开全文
  • DES和AES算法的比较各自优缺点有哪些以下文字资料由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!聂定远;李小俊讨论了目前主要的一些数据加密算法、DES算法及高级...
  • 采购文员工作职责都有哪些 采购文员要求具备较强的数据分析,数据整理能力,逻辑性强,以下是小编精心收集整理的采购文员工作职责,下面小编就和大家分享,来欣赏一下吧。 采购文员工作职责1 1、根据生产计划,...
  • 信息化生产基础数据采集与集成,提升企业生产管理能力以生产效率的目标中最为迫切的需求,因此,MES...工厂制造型企业中,就组织结构上来说较为完整的生产单位,MES系统的数据采集通常一个工厂就是一个完成的生产数
  • 监理员工作职责都有哪些 监理员负责审查承包单位提交的涉及本专业的计划、方案、申请 、变更,以下是小编精心收集整理的监理员工作职责,下面小编就和大家分享,来欣赏一下吧。 监理员工作职责1 1、在专业监理...
  • 以下是小编精心收集整理的监理员岗位职责,下面小编就和大家分享,来欣赏一下吧。 监理员岗位职责1 (1)在专业监理工程师的指导下开展现场监理工作; (2)检查承包单位投入工程项目的人力、材料、主要设备及其使用、...
  • C#数据结构

    2013-12-10 11:49:54
    数据元素是数据的基本单位,在计算机程序中通常被作为一个整体进行考虑 和处理。数据元素有时也被称为元素、结点、顶点、记录等。一个数据元素可由 若干个数据项(Data Item)组成。数据项是不可分割的、含有独立意义...
  • 财务会计工作职责_财务会计的工作内容有哪些 会计以货币为主要计量单位,运用专门的方法,核算和监督一个单位经济活动的一种经济管理工作,以下是小编精心收集整理的财务会计工作职责,下面小编就和大家分享,来欣赏...
  • 分区表的意思以某个维度为单位,该维度的数据文件都存储在该维度的路径下,比如以日期作分区,则每天的数据文件分别放在对应日期的路径下。以下命令在hive下执行' hive> dfs ......'相当于在Linux终端下执行'$ ...
  • 以下是详细介绍: 1、主频,主频也叫时钟频率,单位是MHz(或GHz),用来表示CPU的运算、处理数据的速度。CPU的主频=外频×倍频系数。主频和实际的运算速度有关的,只能说主频仅仅CPU性能表现的一个方面,而不...
  • 数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    2. 记录是数据处理的最小单位。 ( ) 【上海海运学院 1998 一、5(1分)】 3. 数据的逻辑结构是指数据的各数据项之间的逻辑关系;( )【北京邮电大学2002 一、1(1分)】 4.算法的优劣与算法描述语言无关,但与所用...
  • 在Linux中,进程操作系统进行资源分配的最小单位,有一个完整的虚拟空间,而线程则除了CPU资源外,没有其他的独立资源,即同一个进程下的多线程共享一块虚拟的资源。 所以为保证操作结果的准确性,以下情形时需要...
  • 1月16日下午,中国互联网协会与杭州安存网络科技有限公司共建中国互联网电子数据研究院(以下简称“研究院”)签约仪式在杭州举行。双方签约,标志着中国互联网协会和安存科技作为研究院的共同发起单位,正式启动了...
  • 关于线程调度,需要深刻了解以下几个基础知识点:调度的最小单位是轻量级进程【比如我们编写的hello world最简单的C程序,执行时就是一个轻量级进程】或者线程;每个线程都会分配一个时间片,时间片到了就会执行下一...
  • 关于线程调度,需要深刻了解以下几个基础知识点:调度的最小单位是轻量级进程【比如我们编写的hello world最简单的C程序,执行时就是一个轻量级进程】或者线程;每个线程都会分配一个时间片,时间片到了就会执行下一...
  • 关于线程调度,需要深刻了解以下几个基础知识点:调度的最小单位是轻量级进程【比如我们编写的hello world最简单的C程序,执行时就是一个轻量级进程】或者线程;每个线程都会分配一个时间片,时间片到了就会执行下一...
  • 这个可以理解为 TCP的 SND_BUF 和 RCV_BUF,只不过单位不一样 SND/RCV_BUF 单位是字节,这个单位是包。 最大传输单元: 纯算法协议并不负责探测 MTU,默认 mtu1400字节,可以使用ikcp_setmtu来设置该值。该值将...
  • 2020-12-22 13:28:34
    按流的数据单位不同分为:字节流和字符流。 按流的功能不同分为:节点流和处理流。 字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些? InputStream类的常用...
  • 在 进行计算机审计的过程中对于从被审计单位全库拷贝或导出的数据我们可以通过DTS工具导入SQL SERVER 2000中进行分析,但是面对几百张甚至上千张数据表如何知道哪些表有用哪些表无用呢?其中要做的一个例行的检查...
  • 线程操作系统中能够进行运算调度的最小单位。它被包含在进程之中,进程中的实际运作单位。 一个线程指的进程中一个单一顺序的控制流。 一个进程中可以并发多条线程,每条线程并行执行不同的任务。 Num02–>...
  • 以下哪些说法正确的?【单选题】数据链路层的数据块称为【单选题】甲委托乙就一项技术进行改进,甲提供全部的资金和设备。乙经过努力工作,对该技术做出了实质性改进,且改进效果显著,出乎甲的预料。双方在委托合同中...
  • 线程跟进程的区别

    2018-09-11 17:48:00
    Num01–>线程线程操作系统中能够进行运算调度的最小单位。它被包含在进程之中,进程中的...进程有以下三部分组成:1,程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成。2,数据集:数据集则...
  •  线程操作系统中能够进行运算调度的最小单位。它被包含在进程之中,进程中的实际运作单位。  一个线程指的进程中一个单一顺序的控制流。  一个进程中可以并发多条线程,每条线程并行执行不同的任务。  Num...
  • 线程操作系统中能够进行运算调度的最小单位。它被包含在进程之中,进程中的实际运作单位。 一个线程指的进程中一个单一顺序的控制流。 一个进程中可以并发多条线程,每条线程并行执行不同的任务。 Num02–>...
  • 常见的硬盘如上图所示,每个盘片分多个磁道,每个磁道分多个扇区,每个扇区512字节,硬盘的最小存储单元,但是在操作系统层面会将多个扇区组成块(block),操作系统存储数据的最小单元,通常8个扇区组成4K...
  • 线程与进程

    2018-08-20 22:13:00
    线程操作系统中能够进行运算调度的最小单位。它被包含在进程之中,进程中的实际运作单位。 一个线程指的进程中一个单一顺序的控制流。 一个进程中可以并发多条线程,每条线程并行执行不同的任务。 Num02...
  • 能处理哪些类型的数据?关于整理问题 前言 秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 屏幕适配 1.基础概念 屏幕尺寸:手机对角线的物理...

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

以下哪些是数据单位