聊聊分布式一致性

Docker安装Nacos(详细教程) Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。 阅读详情

背景

互联网时代和环境下,为了快速需求响应和提高系统吞吐,往往进行微服务化改造,将复杂系统和数据进行拆分;

这时候的一致性指分布式服务化系统之间的弱一致性,包括应用系统一致性和数据一致性;

一致性级别说明
强一致性要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大
弱一致性系统在写入成功后,不承诺立即可以读到写入的值,也不久承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态
最终一致性最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。最终一致性是弱一致性中非常推崇的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型

生活中的一致性例子:

银行处理转账时,扣减你账户上的余额,然后增加别人账户的余额;

如果扣减你的账户余额成功,增加别人账户余额失败,那么你就会损失这笔资金。

反过来,如果扣减你的账户余额失败,增加别人账户余额成功,那么银行就会损失这笔资金,银行需要赔付;

下面通过理论和实际方案的介绍,来学习分布式一致性相关内容!

基础理论

ACID

数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务是正确可靠的,所必须具备的四个特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。

在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。

  • 例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。

这个过程被称为一个事务,具有ACID特性

ACID特性说明
原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
一致性(Consistency)事务必须使数据库从一个一致性状态变换到另一个一致性状态
隔离性(Isolation)当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
持久性(Durability)一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

CAP理论

一致性(Consistency)

在分布式环境下,一致性是指数据在多个副本之间能否保持一致的特性。

在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态

可用性(Availability)

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。

  • "有限时间内"是指,对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的

  • "返回结果"是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果

分区容错性(Partition Tolerance)

分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障

实际情况

CAP理论证明,任何分布式系统只可同时满足二点,没法三者兼顾

选 择说 明
CA放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择
AP放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此
CP放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用

满足C和A,那么P能不能满足呢?

满足C需要所有的服务器的数据要一样,也就是说要实现数据的同步,那么同步要不要时间?肯定是要的,并且机器越多,同步的时间肯定越慢,这里问题就来了,我们同时也满足了A,也就是说,我要同步时间短才行。这样的话,机器就不能太多了,也就是说P是满足不了的

满足C和P,那么A能不能满足呢?

满足P需要很多服务器,假设有1000台服务器,同时满足了C,也就是说要保证每台机器的数据都一样,那么同步的时间可就很大,在这种情况下,我们肯定是不能保证用户随时访问每台服务器获取到的数据都是最新的,想要获取最新的,你就得等,等全部同步完了,你就可以获取到了,但是我们的A要求短时间就可以拿到想要的数据啊,这不就是矛盾了,所以说这里A是满足不了了

对于分布式系统而言,网络问题又是一个必定会出现的异常情况,因此分区容错性也就成为了一个分布式系统必然需要面对和解决的问题。

因此往往需要把精力花在如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。

BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的。

BASE理论的核心思想是:

  • 即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

接下来看一下BASE中的三要素:

基本可用(Basically Available)

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性(注意,这绝不等价于系统不可用)。

比如:

  • 响应时间上的损失。正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的响应时间增加了1~2秒

  • 系统功能上的损失:正常情况下,在一个电子商务网站上进行购物的时候,消费者几乎能够顺利完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面

软状态(Soft State)

软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时

最终一致性(Eventually Consistent)

最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一个一致的状态。

因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事务ACID特性是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。

但同时,在实际的分布式场景中,不同业务和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。

分布式一致性协议

两阶段提交协议(2PC)

第一阶段(投票阶段):

  1. 协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应

  2. 参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志(注意:若成功这里其实每个参与者已经执行了事务操作)

  3. 各参与者节点响应协调者节点发起的询问,如果参与者节点的事务操作实际执行成功,则它返回一个"同意"消息;

  4. 如果参与者节点的事务操作实际执行失败,则它返回一个"中止"消息

第二阶段(提交执行阶段):

当协调者节点从所有参与者节点获得的相应消息都为"同意"时:

  1. 协调者节点向所有参与者节点发出"正式提交"的请求

  2. 参与者节点正式完成操作,并释放在整个事务期间内占用的资源

  3. 参与者节点向协调者节点发送"完成"消息

  4. 协调者节点受到所有参与者节点反馈的"完成"消息后,完成事务

存在的问题:

“

资源被同步阻塞

”

在数据提交的过程中,所有参与处理的服务器都处于阻塞状态,如果其他线程想访问临界区的资源,需要等待该条会话请求在本地执行完成后释放临界区资源。

因此,采用二阶段提交算法也会降低程序并发执行的效率。

“

单点问题

”

此外,还会发生单点问题。单点问题也叫作单点服务器故障问题,它指的是当作为分布式集群系统的调度服务器发生故障时,整个集群因为缺少协调者而无法进行二阶段提交算法。

单点问题也是二阶段提交最大的缺点,因此使用二阶段提交算法的时候通常都会进行一些改良,以满足对系统稳定性的要求。

“

在Commit 阶段出现数据不一致

”

当统计集群中的服务器可以进行事务操作时,协调服务器会向这些处理事务操作的服务器发送 commit 提交请求。

如果在这个过程中,其中的一台或几台服务器发生网络故障,无法接收到来自协调服务器的提交请求,导致这些服务器无法完成最终的数据变更,就会造成整个分布式集群出现数据不一致的情况。

三阶段提交协议(3PC)

三阶段提交其实是在二阶段算法的基础上进行了优化和改进。

为了解决二阶段协议中的同步阻塞等问题,三阶段提交协议在协调者和参与者中都引入了超时机制,并且把两阶段提交协议的第一个阶段拆分成了两步:询问,然后再锁资源,最后真正提交。

阶段说明
CanCommit事务询问,协调者向所有的参与者发送一个包含事务内容的 CanCommit 请求,询问是否可以执行事务提交操作,并开始等待各参与者的响应。各参与者向协调者反馈事务询问的响应 参与者在接收到来自协调者的 CanCommit 请求后,正常情况下,如果其自身认为可以顺利执行事务,那么会反馈 Yes 响应,并进入预备状态,否则反馈 No 响应。
PreCommit如果在询问阶段所有的参与者都返回可以执行操作,协调者向参与者发送预执行请求,然后参与者写redo和undo日志,执行操作,但是不提交操作;如果在询问阶段任何参与者返回不能执行操作的结果,则协调者向参与者发送中止请求
DoCommit如果每个参与者在准备阶段返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源

注意事项

一旦进入阶段3,发生 协调者出现问题 或 协调者和参与者之间的网络出现故障,即参与者无法及时接收到来自协调者的 DoCommit 或 abort 请求,针对这种异常情况,参与者都会在等待超时之后,继续进行事务提交。

三阶段提交协议存在的问题

参与者接收到 PreCommit 消息后,如果网络出现分区,此时协调者和部分参与者无法进行正常的网络通信,该部分参与者依然会进行事务的提交,必然出现数据的不一致性。

TCC

无论是 2PC 还是 3PC,都存在一个大粒度资源锁定的问题。

我们先来想象这样一种场景,用户在电商网站购买商品1000元,使用余额支付800元,使用红包支付200元。

我们看一下在 2PC 中的流程:

prepare 阶段:

  • 下单系统插入一条订单记录,不提交

  • 余额系统减 800 元,给记录加锁,写 redo 和 undo 日志,不提交

  • 红包系统减 200 元,给记录加锁,写 redo 和 undo 日志,不提交

commit 阶段:

  • 下单系统提交订单记录

  • 余额系统提交,释放锁

  • 红包系统提交,释放锁

“

为什么说这是一种大粒度的资源锁定呢?

”

是因为在 prepare 阶段,当数据库给用户余额减 800 元之后,为了维持隔离性,会给该条记录加锁,在事务提交前,其它事务无法再访问该条记录。

但实际上,我们只需要预留其中的 800 元,不需要锁定整个用户余额。这是 2PC 和 3PC 的局限,因为这两者是资源层的协议,无法提供更灵活的资源锁定操作。

为了解决这个问题,TCC 应运而生。TCC 本质上也是一个二阶段提交协议,但和 JTA 中的二阶段协议不同的是,它是一个服务层的协议,因此开发者可以根据业务自由控制资源锁定的粒度。

我们先来看一下 TCC 协议的运行过程。

TCC 将事务的提交过程分为 try-confirm-cancel(实际上 TCC 就是 try、confirm、cancel 的简称) 三个阶段:

  • try:完成业务检查、预留业务资源

  • confirm:使用预留的资源执行业务操作(需要保证幂等性)

  • cancel:取消执行业务操作,释放预留的资源(需要保证幂等性)

流程如下:

  1. 事务发起方向事务协调器发起事务请求,事务协调器调用所有事务参与者的 try 方法完成资源的预留,这时候并没有真正执行业务,而是为后面具体要执行的业务预留资源,这里完成了一阶段。

  2. 如果事务协调器发现有参与者的 try 方法预留资源时候发现资源不够,则调用参与方的 cancel 方法回滚预留的资源,需要注意 cancel 方法需要实现业务幂等,因为有可能调用失败(比如网络原因参与者接受到了请求,但是由于网络原因事务协调器没有接受到回执)会重试。

  3. 如果事务协调器发现所有参与者的 try 方法返回都 OK,则事务协调器调用所有参与者的 confirm 方法,不做资源检查,直接进行具体的业务操作。

  4. 如果协调器发现所有参与者的 confirm 方法都 OK 了,则分布式事务结束。

  5. 如果协调器发现有些参与者的 confirm 方法失败了,或者由于网络原因没有收到回执,则协调器会进行重试。这里如果重试一定次数后还是失败,常见的是做事务补偿。

通过一个支付场景看看 TCC 在该场景中的流程:

“

Try操作

”
  • tryX 下单系统创建待支付订单

  • tryY 冻结账户红包 200 元

  • tryZ 冻结资金账户 800 元

“

Confirm操作

”
  • confirmX 订单更新为支付成功

  • confirmY 扣减账户红包 200 元

  • confirmZ 扣减资金账户 800 元

“

Cancel操作

”
  • cancelX 订单处理异常,资金红包退回,订单支付失败

  • cancelY 冻结红包失败,账户余额退回,订单支付失败

  • cancelZ 冻结余额失败,账户红包退回,订单支付失败

可以看到,我们使用了冻结代替了原先的账号锁定(实际操作中,冻结操作可以用数据库减操作+日志实现),这样在冻结操作之后,事务提交之前,其它事务也能使用账户余额,提高了并发性。

总结一下,相比于二阶段提交协议,TCC 主要有以下区别:

  • 2PC 位于资源层而 TCC 位于服务层。

  • 2PC 的接口由第三方厂商实现,TCC 的接口由开发人员实现。

  • TCC 可以更灵活地控制资源锁定的粒度。

  • TCC 对应用的侵入性强。业务逻辑的每个分支都需要实现 try、confirm、cancel 三个操作,应用侵入性较强,改造成本高。

比如,你的订单服务中本来只有一个接口

//修改代码状态
orderClient.updateStatus();

都要拆为三个接口,即:

orderClient.tryUpateStatus();
orderClient.confirmUpateStatus();
orderClient.cancelUpateStatus();

目前TCC的实现有如下几个

  • tcc-transaction:

  • ByteTCC

  • spring-cloud-rest-tcc

最终一致性模式

缓存一致性模式

高并发系统中一个常见的核心需求就是亿级的读需求,显然,关系型数据库并不是解决高并发读需求的最佳方案,互联网的经典做法就是使用缓存

常用缓存方式分为本地缓存和分布式缓存两种;如果对性能要求不是非常的高,优先使用分布式缓存;对于数据实时性和分布式一直性要求不高的可以使用本地缓存,比如某些人员的配置,即使不同机器的配置短时间不相同也不影响正常业务流转

数据库与缓存只需要保持弱一致性,而不需要强一致性

 

查询模式

服务操作都需要提供一个查询接口,用来向外部输出操作执行的状态。

服务操作的使用方可以通过查询接口,得知服务操作执行的状态,然后根据不同状态来做不同的处理操作

“

举个例子:

”

定时任务监听生成中的订单、单发送群消息,RD收到群消息查询订单的具体状态判断系统是否有问题,是否需要人工修复

补偿模式

如果整个操作处于不正常的状态,我们需要修正操作中有问题的子操作,这可能需要重新执行未完成的子操作,后者取消已经完成的子操作,通过修复使整个分布式系统达到一致,为了让系统最终一致而做的努力都叫做补偿

  1. 自动恢复:程序根据发生不一致的环境,通过继续未完成的操作,或者回滚已经完成的操作,自动来达到一致

  2. 通知运营:如果程序无法自动恢复,并且设计时考虑到了不一致的场景,可以提供运营功能,通过运营手工进行补偿

  3. 通知技术:如果很不巧,系统无法自动回复,又没有运营功能,那必须通过技术手段来解决,技术手段包括走数据库变更或者代码变更来解决,这是最糟的一种场景

“

举个例子:

”

监听到生成中订单后,系统自动重新推送入库消息重新生成入库单进行重试,如果系统没法自动恢复需要RD接入定位修复问题

异步确保模式

异步确保模式是补偿模式的一个典型案例,经常应用到使用方对响应时间要求并不太高,我们通常把这类操作从主流程中摘除,通过异步的方式进行处理,处理后把结果通过通知系统通知给使用方,这个方案最大的好处能够对高并发流量进行削峰,例如:电商系统中的物流、配送,以及支付系统中的计费、入账等

实践中,将要执行的异步操作封装后持久入库,然后通过定时捞取未完成的任务进行补偿操作来实现异步确保模式,只要定时系统足够健壮,任何一个任务最终会被成功执行

“

举个例子:

”

采购系统进行预算释放和耗用,会同步记录日志,后期通过异步和定时任务重试保证释放和耗用成功

定期校对模式

在操作的主流程中的系统间执行校对操作,我们可以事后异步的批量校对操作的状态,如果发现不一致的操作,则进行补偿,补偿操作与补偿模式中的补偿操作是一致的

实现定期校对的一个关键就是分布式系统中需要有一个自始至终唯一的ID,常用的唯一id生成方案

“

举个例子:

”

财务那边的对账系统定期校对结算数据和业务单据数据的一致性

可靠消息模式

对于异步的操作可以使用消息队列,通过消息队列将调用方和被调用方进行解耦,提高系统响应速度,同时能够达到消峰目的;

对于消息队列,我们需要建立特殊的设施保证可靠的消息发送以及处理机的幂等

“

消息的可靠发送

”

发送消息之前,把消息持久到数据库,状态标记为待发送,然后发送消息,如果发送成功,将消息改为发送成功。定时任务定时从数据库捞取一定时间内未发送的消息,将消息发送

使用第三方消息管理器,发送消息之前,先发送一个预消息给第三方消息管理器,消息管理器将其持久到数据库,并标记状态为待发送,发送成功后,标记消息为发送成功。定时任务定时从数据库捞取一定时间内未发送的消息,回查业务系统是否要继续发送,根据查询结果来确定消息的状态

“

消息处理器的幂等性

”

保证消息一定要发送出去,那么就需要有重试机制,有了重试机制,消息一定会重复,那么我们需要对重复做处,常用几种方案

  • 使用数据库表的唯一索引进行防重,拒绝重复的请求

  • 使用分布式中间件Redis进行防重

  • 使用状态机防重,单据相关的业务会涉及到状态机,状态在不同情况下会发生变更,如果状态机已经处于下一个状态,这时候来一个上一个状态的变更,理论上是不能够变更的,保证了有限状态机的幂等

  • 使用乐观锁防重,数据更新带条件,这也是在系统设计的时候,合理的选择乐观锁,通过version或者其他条件来做乐观锁,这样保证更新及时在并发的情况下,也不会有太大的问题

“

举个例子:

”
  1. 单据保存的http接口,前端提交时增加唯一id,通过Redis进行防重提交,防止重复建单

  2. 订单对接出入库系统进行mq异步交互,通过订单的中间态状态进行重试,下游做防重

Windows 10下用VS2022编译AFSIM 2.9.0的完整避坑指南 本文提供了在Windows 10系统下,使用Visual Studio 2022编译AFSIM 2.9.0仿真框架的详细指南。文章系统梳理了从环境准备、CMake配置、编译链接到安装打包的全流程,并重点针对编译过程中常见的文件编码、命名空间冲突等高频错误提供了具体解决方案,旨在帮助开发者高效避坑,顺利完成AFSIM在Windows平台上的构建。 阅读详情

相关推荐

数据库:关系运算整理大全(包括关系代数、元组关系演算、域关系演算)

数据库关系运算: 1. 关系代数(基本关系代数、附加关系代数、扩展关系代数) 2. 元组关系演算 3. 域关系演算

ysji's blog 2万+

java分布式-一致性

java分布式-一致性

阳光码术-Java面试宝典 1724

CAS5和CAS6自定义异常提示消息

CAS自定义异常提示消息

weixin_42949219的博客 979

java分布式一致性

3. 最终一致性(Eventual Consistency):最终一致性是弱一致性的一种形式,它允许在分布式系统中的不同节点之间存在一段时间的数据不一致性。然而,随着时间的推移,经过一系列的更新和传播,系统最终会达到一致的状态。2. 弱一致性(Weak Consistency):弱一致性允许在分布式系统中的不同节点之间存在一段时间的数据不一致性。更新操作在不同节点上的传播可能有延迟,因此节点之间的数据副本可能存在短暂的不一致。这意味着对数据的更新操作在所有节点上都是原子性的、有序的和同步的。

nbspzs的专栏 788

单相变换器的二次纹波分析

1. 单相PWM整流器的二次纹波产生原因   单相变换器的二次纹波产生的原因是功率含有二次脉动分量。设电网电压 us=Vmsin(wt),电网电流IL=Imsin(wt−θ)I_L=I_msin(wt-\theta)IL​=Im​sin(wt−θ)。其中w是电网电压披绿,θ\thetaθ是电流之后电压相位。保证输入功率和输出功率相等,就要保证两者的直流量和交流量对应相等。   uDu_DuD​为 PWM 整流器直流电容电压平均值,IoI_oIo​ 为负载电流平均值 ,uDC^\widehat {u_{DC}

qq_38847810的博客 4975

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 486

Java实现数据一致性

强一致性:系统在任何时候都能保证数据的一致性。最终一致性:系统不能保证立即的数据一致性,但最终会达到一致状态。因果一致性:如果一个进程知道另一个进程的操作,那么它将看到该操作的结果。读己之所写一致性:一个进程读取它自己写入的数据时,总是能看到最新的值。数据一致性是分布式系统中的一个关键挑战。Java提供了多种机制来保证数据一致性,包括同步机制、数据库事务、分布式锁和消息队列等。开发者需要根据具体的应用场景选择合适的方法来实现数据一致性。

qq_56438516的博客 1307

YOLOv12改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv12的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv12原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 1742

Java中分布式事务与一致性

分布式事务在微服务和分布式架构中非常关键,而 Java 提供了多种实现分布式事务的技术手段。开发者可以根据系统的需求选择不同的分布式事务模型(如 2PC、TCC、Saga),在性能和一致性之间进行权衡。无论选择哪种方案,最终目标都是在分布式环境中保证数据的一致性和事务的可靠性,从而提高系统的健壮性和可维护性。

Flying_Fish_roe的博客 929

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58= GetFlowDropDown SQL注入

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58=、eHR/OA一体化智慧云平台、智慧一卡通云平台、行业软件开发与定制、智慧企业管理信息化咨询与项目服务为核心业务的顾问式管理咨询和软件个性定制开发的高科技股份集团公司。同鑫T9eHR信息华管理系统存在SQL注入漏洞,攻击者可通过该漏洞上传shell。关闭互联网暴露面或接口设置访问权限。利用sqlmap进行shell。

iSee857的博客 703

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3526

Java中的分布式算法:如何在多节点环境中实现一致性

在分布式系统中,一致性指的是所有节点在某一时刻看到的数据应该是一致的。分布式系统中的一致性问题是复杂的,但理解和应用合适的算法可以帮助我们在多节点环境中保持数据的一致性和可靠性。每种算法都有其独特的优势和应用场景,在选择合适的算法时,需要根据具体的系统需求进行权衡。它通过将数据和节点映射到一个虚拟的哈希环上,确保节点的增减不会导致大量数据的重新分布,从而提高了系统的扩展性和容错能力。Paxos算法是一种经典的分布式共识算法,旨在解决在多个节点之间达成一致性的问题。方法用来查找与给定键对应的节点。

微赚淘客系统开发者博客 474

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计

大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现自动判卷、生成报告,减轻教师负担,并支持个性化作业布置,使教学更加高效。学生可以清晰了解自身学习状态,教师也能获得精准的学生画像,实现差异化教学。

微学AI的博客 446

聊聊分布式架构一致性

分布式架构有个重要的定理,叫cap。c是一致性(Consistency),a是可用性(Availability),p是分区容忍性(Partition tolerance)。 其中一致性是什么意思呢?它说的是,任何时刻,所有节点的数据都是一致的。

u014630985的博客 912

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

聊聊分布式一致性算法协议 Paxos

作者 | 码哥字节来源 | 码哥字节Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过:所有一致性协议本质上要么是Paxos要么是其变体。网上有很多讲解Paxos算法的文章,但是质量层次不齐。今天笔者带大家深入聊一下PaxosPaxos是什么?Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一...

优快云云计算 410

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

聊聊分布式架构09——分布式中的一致性协议

一致性协议与Paxos算法

Elaine2391的博客 1259

聊聊 分布式一致性算法协议 Paxos

大家好,我是不才陈某~Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过:所有一致性协议本质上要么是Paxos要么是其变体。网上有很多讲解Paxos算法的文章,但是质量层次不齐。今天笔者带大家深入聊一下PaxosPaxos是什么?Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。Paxos算...

码猿技术专栏 396

来聊聊分布式数据一致性

Base 理论对于 CAP 理论来说,放弃强一致性,追求分区容错性和可用性,这是很多分布式系统设计的时候,最常选择的一种设计方式。在实际项目工程中,基于 CAP 理论逐步演化,后来就提出了 Base 理论。 数据一致性 那么我们就借助这么一个小小案例,给大家去描述一下。下图图中描述的就是一个用户去取钱以及去查询的这么一个过程。 上图中,User 代表用,DB1我们数据库集群中的一个节点,DB2 也是我们数据库集群中的另外一个节点,Balance 就是余额。 那当用户进行取钱操作的时候,他的取钱请求发送到了

qq_38991247的博客 153

聊聊 分布式一致性算法 Raft

大家好,我是陈哥~Raft 是一种更为简单方便易于理解的分布式算法,主要解决了分布式中的一致性问题。相比传统的 Paxos 算法,Raft 将大量的计算问题分解成为了一些简单的相对独立的子问题,并有着和 Multi-Paxos 同样的性能,下面我们通过动图,以后还原 Raft 内部原理。上篇:聊聊 分布式一致性算法协议 PaxosRaft 基础名词解释Raft协议一共包含如下3类角色:Leader...

码猿技术专栏 375

聊聊分布式式系统的一致性如何实现(一)

阅读目录 为什么需要分布式系统? 分布式系统的副作用 产生数据不一致的原因 详解一致性 结语 本文是本系列的第一篇。从普遍认为的分布式系统中最最最重要的数据一致性开始。内容适合人群>=0年技术相关经验。 一、为什么需要分布式系统? 任何事物能够被持续的运用和发展,必然有其价值,分布式系统也是一样。分布式系统的产生我认为主要的目...

疯一样的女子 991

《聊聊分布式》分布式最终一致性方案:从理论到实践的完整指南

最终一致性是分布式系统的一种数据一致性模型,它不保证数据的实时强一致性,但确保在没有任何新的更新操作的情况下,经过一段时间后,所有副本最终会达到一致状态。// 最终一致性的核心概念/*** 最终一致性的数学定义* 对于任意两个节点N1和N2,给定足够长的时间t,在没有新写入的情况下* 读取操作最终会返回相同的结果*/// 条件1: 停止写入操作// 条件2: 经过时间t(收敛时间)// 结果: 所有节点数据一致// 已达到一致// 等待数据同步/**

houzhangbo的专栏 924

聊聊分布式一致性之CAP理论和BASE理论

数据复制在可用性和性能方面给分布式系统带来的巨大好处是不言而喻的,然而数据复制所带来的一致性挑战,也是每一个系统研发人员不得不面对的,那就是一致性(consistency),总得来说,我们无法找到一种能够满足分布式系统所有系统属性的分布式一致性解决方案。因此,如何既保证数据的一致性,同时又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的。

星辰大海,脚踏实地 1011

《聊聊分布式》BASE理论 分布式系统可用性与一致性的工程平衡艺术

在分布式系统设计中,我们面临着传统ACID事务模型与分布式环境之间的根本矛盾:// 传统ACID事务的局限性// 关系型数据库的ACID特性// Atomicity(原子性):全部成功或全部失败// Consistency(一致性):数据始终处于一致状态// Isolation(隔离性):并发事务相互隔离// Durability(持久性):提交后数据永久保存// 问题:在分布式环境中,ACID会导致性能瓶颈和可用性问题// 分布式环境下的挑战// 网络延迟:跨节点通信需要时间。

houzhangbo的专栏 1293

聊聊一致性hash算法

一致性hash算法 在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。 场景描述 假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务...

Huangy远 3050

聊聊事件触发一致性

事件触发一致性,有参考文献。在编程的世界里,事件触发一致性是个相当重要的概念。它就像是一场精心编排的舞蹈,各个舞者(事件)需要在恰当的时机,以协调一致的方式登场。先来说说为啥事件触发一致性很关键。想象一下,你在开发一个实时协作的文档编辑系统。当多个用户同时对文档进行操作时,每个操作都可以看作是一个事件。如果这些事件不能按照一致的顺序触发和处理,那文档的最终状态可能就会变得乱七八糟,有的用户看到的内容和其他用户完全不同,这显然是不可接受的。

2501_93693767的博客 674

分布式一致性之raft算法

文章目录一句话简介ratf算法分布式一致性的难点CAP理论分布式一致性:Raft算法选举过程新官上任根正苗红仍需努力 一句话简介ratf算法 没听过不要紧,我原先也没听过。 Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。 熟悉吗?redis的哨兵用的就是这一套,不过哨兵简化了一些部分,提升了运行效率,降低了一致性,保证了最终一致性。 晕吗?晕就完蛋了。 分布式一致性的难点 1、时钟不一致 如果两条命令,分别为 A、B,被发往两个节点。由于网络延迟等原因,导致一个节点先.

看,未来的博客 1922
上一篇: 40 个 SpringBoot 常用注解:让生产力爆表!
下一篇: Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量
java_lujj
博客等级 码龄4年 18粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值