从零开始学架构——CAP理论

news2025/2/24 0:06:34

CAP定理

CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer’s theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。

CAP (Consistency、Availability、Partition Tolerance)

当初CAP只是布鲁尔的一个猜想,并没有详细定义这三个词的定义,去查询 CAP 定义的时候会感到比较困惑,因为不同的资料对 CAP 的详细定义有一些细微的差别。例如:

  • Consistency: where all nodes see the same data at the same time.
  • Availability: which guarantees that every request receives a response about whether it succeeded or failed.
  • Partition tolerance: where the system continues to operate even if any one part of the system is lost or fails.
    IBM Cloudant文档之CAP定理
  • Consistency: Every read receives the most recent write or an error.
  • Availability: Every request receives a (non-error) response – without
    guarantee that it contains the most recent write.
  • Partition tolerance: The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes.
    维基百科之CAP定理
  • Consistency: all nodes have access to the same data simultaneously.
  • Availability: a promise that every request receives a response, at minimum whether the request succeeded or failed.
  • Partition tolerance: the system will continue to work even if some arbitrary node goes offline or can’t communicate.
    Team-Silverbacks之CAP定理

Robert Greiner的文章 Robert Greiner简介 作为参考基础来理解,他写了两篇文章来阐述 CAP 理论,第一篇被标记为“outdated”(有一些中文翻译文章正好参考了第一篇),将对比前后两篇解释的差异点,通过对比更加深入地理解 CAP 理论。

CAP 理论

第一版解释:

Any distributed system cannot guaranty C,A,and P simulataneously.
CAP理论:解释

简单翻译为:对于一个分布式计算系统,不可能同时满足一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三个设计约束。

第二版解释:

In a distributed system (a collection of interconnected nodes that share data.), you can only have two out of the following three guarantees across a write/read pair: Consistency, Availability, and Partition Tolerance —— one of them must be sacrificed.
CAP理论:重论

简单翻译为:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

第二版中定义了什么才是 CAP 理论探讨的分布式系统,强调了两点:interconnected 和 share data,为何要强调这两点呢?因为分布式系统并不一定会互联和共享数据。最简单的例如
Memcache 的集群,相互之间就没有连接和共享数据,因此 Memcache 集群这类分布式系统就不符合 CAP 理论探讨的对象;负载均衡的集群节点也不互联。
而 MySQL 集群就是互联和进行数据复制的,因此是 CAP 理论探讨的对象。
第二版中强调了 write/read pair,这点其实是和上一个差异点一脉相承的。也就是说,CAP 关注的是对数据的读写操作,而不是分布式系统的所有功能。例如,ZooKeeper 的选举机制就不是 CAP 探讨的对象。
第二版中的定义和解释更加严谨,但内容相比第一版来说更加难记一些,所以现在大部分技术人员谈论 CAP 理论时,更多还是按照第一版的定义和解释来说的,因为第一版虽然不严谨,
但非常简单和容易记住。第二版除了基本概念,三个基本的设计约束也进行了重新阐述。

一致性(Consistency)

① All nodes see the same data at the same time;
所有节点在同一时刻都能看到相同的数据。

② A read is guaranteed to return the most recent write for a given client;
对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。

①的关键词是 see,其实并不确切,因为节点 node 是拥有数据,而不是看到数据,即使要描述也是用 have;强调同一时刻拥有相同数据(same time + same data)
②的关键词是 read。从客户端 client 的读写角度来描述一致性,定义更加精确。
这就意味着实际上对于节点来说,可能同一时刻拥有不同数据(same time + different data),这和我们通常理解的一致性是有差异的,为何做这样的改动呢?其实在第一版的详细解释中已经提到了,具体内容如下:

A system has consistency if a transaction starts with the system in a consistent state, and ends with the system in a consistent state.
In this model, a system can (and does) shift into an inconsistent state during a transaction, but the entire transaction gets rolled back
if there is an error during any stage in the process.

参考上述的解释,对于系统执行事务来说,在事务执行过程中,系统其实处于一个不一致的状态,不同的节点的数据并不完全一致,因此第一版的解释“All nodes see the same data at the same time”是不严谨的。
而第二版强调 client 读操作能够获取最新的写结果就没有问题,因为事务在执行过程中,client 是无法读取到未提交的数据的,只有等到事务提交后,client 才能读取到事务写入的数据,而如果事务失败则会进行回滚,
client 也不会读取到事务中间写入的数据。

可用性(Availability)

① Every request gets a response on success/failure.
每个请求都能得到成功或者失败的响应。

② A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).
非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。

二者的差异点在于:
① 是 every request,它是不严谨的,因为只有非故障节点才能满足可用性要求,如果节点本身就故障了,发给节点的请求不一定能得到一个响应。response 分为 success 和 failure,定义太泛了,几乎任何情况,无论是否符合 CAP 理论,我们都可以说请求成功和失败,因为超时也算失败、错误也算失败、异常也算失败、结果不正确也算失败;即使是成功的响应,也不一定是正确的。例如,本来应该返回 100,但实际上返回了 90,这就是成功的响应,但并没有得到正确的结果。
②强调了 A non-failing node。②用了两个 reasonable:reasonable response 和 reasonable time,而且特别强调了 no error or timeout。
解释明确了不能超时、不能出错,结果是合理的,注意没有说“正确”的结果。例如,应该返回 100 但实际上返回了 90,肯定是不正确的结果,但可以是一个合理的结果。

分区容忍性(Partition Tolerance)

① System continues to work despite message loss or partial failure.
出现消息丢失或者分区错误时系统能够继续运行。

② The system will continue to function when network partitions occur.
当出现网络分区后,系统能够继续“履行职责”。

它们的主要差异点表现在:
①用的是 work,work 强调“运行”,只要系统不宕机,都可以说系统在 work,返回错误也是 work,拒绝服务也是 work;分区用的是 message loss or partial failure,直接说原因,即 message loss 造成了分区,但 message loss 的定义有点狭隘,因为通常我们说的 message loss(丢包),只是网络故障中的一种。
②用的是 function。强调“发挥作用”“履行职责”,这点和可用性是一脉相承的。也就是说,只有返回 reasonable response 才是 function。相比之下,②解释更加明确。
描述分区用的是 network partitions,即发生了分区现象,不管是什么原因,可能是丢包,也可能是连接中断,还可能是拥塞,只要导致了网络分区,就通通算在里面。

CAP 应用

虽然 CAP 理论定义是三个要素中只能取两个,但放到分布式环境下来思考,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回 error(例如,当前系统不允许写入),这又和 A 冲突了,因为 A 要求返回 no error 和 no timeout。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。

CP - Consistency/Partition Tolerance

如下图所示,为了保证一致性,当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 需
要返回 Error,提示客户端 C“系统现在发生了错误”,这种处理方式违背了可用性(Availability)的要求,因此 CAP 三者只能满足 CP。
在这里插入图片描述

AP - Availability/Partition Tolerance

如下图所示,为了保证可用性,当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 将当前自己拥有的数据 x 返回给客户端 C 了,而实际上当前最新的数据已经是 y 了,这就不满足一致性(Consistency)的要求了,因此 CAP 三者只能满足 AP。注意:这里 N2 节点返回 x,虽然不是一个“正确”的结果,但是一个“合理”的结果,因为 x 是旧的数据,并不是一个错乱的值,只是不是最新的数据而已。

CAP关键细节点

  1. CAP关注的粒度是数据,而不是整个系统

C与A之间的取舍可以在同一个系统内以非常细小的粒度反复发生,而每次的决策可能因为具体的操作,影响到用户或数据。

在 CAP 理论落地实践时,我们需要将系统内的数据按照不同的应用场景和要求进行分类,每类数据选择不同的策略(CP 还是 AP),而不是直接限定整个系统所有数据都是同一策略

  1. CAP 是忽略网络延迟的。

这是一个非常隐含的假设,布鲁尔在定义一致性时,并没有将延迟考虑进去。也就是说,当事务提交时,数据能够瞬间复制到所有节点。但实际情况下,从节点 A 复制数据到节点 B,总是需要花费一定时间的。如果是相同机房,耗费时间可能是几毫秒;如果是跨地域的机房,例如北京机房同步到广州机房,耗费的时间就可能是几十毫秒。这就意味着,CAP 理论中的 C 在实践中是不可能完美实现的,在数据复制的过程中,节点 A 和节点 B 的数据并不一致。

不要小看了这几毫秒或者几十毫秒的不一致,对于某些严苛的业务场景,例如和金钱相关的用户余额,或者和抢购相关的商品库存,技术上是无法做到分布式场景下完美的一致性的。而业务上必须要求一致性,因此单个用户的余额、单个商品的库存,理论上要求选择 CP 而实际上 CP 都做不到,只能选择 CA。也就是说,只能单点写入,其他节点做备份,无法做到分布式情况下多点写入。

需要注意的是,这并不意味着这类系统无法应用分布式架构,只是说“单个用户余额、单个商品库存”无法做分布式,但系统整体还是可以应用分布式架构的。例如,下面的架构图是常见的将用户分区的分布式架构。
在这里插入图片描述
我们可以将用户 id 为 0 ~ 100 的数据存储在 Node 1,将用户 id 为 101 ~ 200 的数据存储在 Node 2,Client 根据用户 id 来决定访问哪个 Node。对于单个用户来说,读写操作都只能在某个节点上进行;对所有用户来说,有一部分用户的读写操作在 Node 1 上,有一部分用户的读写操作在 Node 2 上。

这样的设计有一个很明显的问题就是某个节点故障时,这个节点上的用户就无法进行读写操作了,但站在整体上来看,这种设计可以降低节点故障时受影响的用户的数量和范围,毕竟只影响 20% 的用户肯定要比影响所有用户要好。这也是为什么挖掘机挖断光缆后,支付宝只有一部分用户会出现业务异常,而不是所有用户业务异常的原因。

  1. 放弃并不等于什么都不做,需要为分区恢复后做准备。

CAP 理论告诉我们三者只能取两个,需要“牺牲”(sacrificed)另外一个,这里的“牺牲”是有一定误导作用的,因为“牺牲”让很多人理解成什么都不做。实际上,CAP 理论的“牺牲”只是说在分区过程中我们无法保证 C 或者 A,但并不意味着什么都不做。因为在系统整个运行周期中,大部分时间都是正常的,发生分区现象的时间并不长。例如,99.99% 可用性(俗称 4 个 9)的系统,一年运行下来,不可用的时间只有 50 分钟;99.999%(俗称 5 个 9)可用性的系统,一年运行下来,不可用的时间只有 5 分钟。分区期间放弃 C 或者 A,并不意味着永远放弃 C 和 A,我们可以在分区期间进行一些操作,从而让分区故障解决后,系统能够重新达到 CA 的状态。

ACID

  1. Atomicity(原子性)

一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。

  1. Consistency(一致性)

在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

  1. Isolation(隔离性)

数据库允许多个并发事务同时对数据进行读写和修改的能力。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  1. Durability(持久性)

事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。可以看到,ACID 中的 A(Atomicity)和 CAP 中的 A(Availability)意义完全不同,而 ACID 中的 C 和 CAP 中的 C 名称虽然都是一致性,但含义也完全不一样。ACID 中的 C 是指数据库的数据完整性,而 CAP 中的 C 是指分布式节点中的数据一致性。再结合 ACID 的应用场景是数据库事务,CAP 关注的是分布式系统数据读写这个差异点来看,其实 CAP 和 ACID 的对比就类似关公战秦琼,虽然关公和秦琼都是武将,但其实没有太多可比性。

BASE

BASE 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性。

  1. 基本可用(Basically Available)

分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。这里的关键词是“部分”和“核心”,具体选择哪些作为可以损失的业务,哪些是必须保证的业务,是一项有挑战的工作。例如,对于一个用户管理系统来说,“登录”是核心功能,而“注册”可以算作非核心功能。因为未注册的用户本来就还没有使用系统的业务,注册不了最多就是流失一部分用户,而且这部分用户数量较少。如果用户已经注册但无法登录,那就意味用户无法使用系统。例如,充了钱的游戏不能玩了、云存储不能用了……这些会对用户造

  1. 软状态(Soft State)

允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里的中间状态就是 CAP 理论中的数据不一致。

  1. 最终一致性(Eventual Consistency)

系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。

这里的关键词是“一定时间” 和 “最终”,“一定时间”和数据的特性是强关联的,不同的数据能够容忍的不一致时间是不同的。
举一个微博系统的例子,用户账号数据最好能在 1 分钟内就达到一致状态,因为用户在 A 节点注册或者登录后,1 分钟内不太可能立刻切换到另外一个节点,但 10 分钟后可能就重新登录到另外一个节点了;而用户发布的最新微博,可以容忍 30 分钟内达到一致状态,因为对于用户来说,看不到某个明星发布的最新微博,用户是无感知的,会认为明星没有发布微博。“最终”的含义就是不管多长时间,最终还是要达到一致性的状态。

BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。前面在剖析 CAP 理论时,提到了其实和 BASE 相关的两点:

CAP 理论是忽略延时的,而实际应用中延时是无法避免的。
这一点就意味着完美的 CP 场景是不存在的,即使是几毫秒的数据复制延迟,在这几毫秒时间间隔内,系统是不符合 CP 要求的。因此 CAP 中的 CP 方案,实际上也是实现了最终一致性,只是“一定时间”是指几毫秒而已。

AP 方案中牺牲一致性只是指分区期间,而不是永远放弃一致性。

这一点其实就是 BASE 理论延伸的地方,分区期间牺牲一致性,但分区故障恢复后,系统应该达到最终一致性。

综合上面的分析,ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。

Paxos算法本身能提供的是,可靠的最终一致性保证。如有足够的隔离性措施,中间状态的无法被客户端读取,则可以达到强一致性,这种属于CP架构。其它情况,就是AP架构。
Paxos算法本身是满足线性一致性的。线性一致性也就是实际系统能够达到的最强一致性。Paxos及各种变体,在实际工程领域的实现,大多数是做了一定成都的取舍,并不完全是线性一致的。比如zookeeper和Etcd,都是对于写操作(比如选举),满足线性一致性,对于读操作未必满足线性一致性。即可选择线性一致性读取,也可以选择非线性一致性读取。这里的非线性一致行读取就是顺序一致性。
CAP定理存在不少坑点,理解起来很是令人费解。
1、适用场景。分布式系统有很多类型,有异构的,比如节点之间是上下游依赖的关系,有同构的,比如分区/分片型的、副本型的(主从、多主)。CAP定理的适用场景是副本型的这种。
2、一致性的概念,从强到弱,线性一致性、顺序一致性、因果一致性、单调一致性、最终一致性,CAP中的一致性应该是指顺序一致性。
3、CAP中的一致性,与ACID中的一致性的区别。事务中的一致性,是指满足完整性约束条件,CAP中的一致性,是指读写一致性。
4、CAP中的可用性,与我们常说的高可用的区别。比如HBase、MongoDB属于CP架构,Cassandra、CounchDB属于AP系统,能说后者比前者更高可用么?应该不是。CAP中的可用性,是指在某一次读操作中,即便发现不一致,也要返回响应,即在合理时间内返回合理响应。我们常说的高可用,是指部分实例挂了,能自动摘除,并由其它实例继续提供服务,关键是冗余。
5、哪些情况属于网络分区。网络故障造成的分区,属于。节点应用出现问题导致超时,属于。节点宕机或硬件故障,不属于。
CAP中的一致性,是指线性一致性,而不是顺序一致性。
P要求分布式和数据同步,C要求数据完全一致,A要求返回及时

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

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

相关文章

Web前端 HTML、CSS

HTML与CSSHTML、CSS思维导图一、HTML1.1、HTML基础文本标签1.2、图片、音频、视频标签1.3、超链接、表格标签1.4、布局1.5、表单标签1.6、表单项标签综合使用1.7、HTML小结二、CSS(简介)2.1、引入方式2.2、选择器2.3、CSS属性Web前端开发总览 Html&…

案例拆解丨ChatGPT+塔罗牌,批量起号、暴利引流,小白也能轻松月入10000+

ChatGPT 的出现,大大拉低了很多行业的门槛,比如客服、教育、翻译、自媒体……而塔罗牌占卜,肯定也是其中之一。 塔罗牌是一种占卜工具,由78张牌组成。可以用于占卜、灵性探索、个人成长和自我发现。 这是一个相对小众&#xff0c…

LinuxGUI自动化测试框架搭建(十三)-创建工具集目录tools并封装文件复制方法cpoyFile.py

(十三)-创建工具集目录tools并封装文件复制方法cpoyFile.py 1 tools的作用2 创建tools目录3 创建文件复制方法cpoyFile.py4 设计cpoyFile.py4.1 安装shutil4.2 导入模块4.3 脚本设计5 目前框架目录1 tools的作用 为了存放框架需要用到的一些常用工具或方法,比如文件复制功能…

OJ系统刷题 第九篇(难篇)

13441 - 求小数的某一位(难题,二刷、三刷!) 时间限制 : 1 秒 内存限制 : 128 MB 分数\tfrac {a}{b}ba​化为小数后,小数点后第n位的数字是多少? 输入 三个正整数a,b,n&#xff0…

使用jni-rs实现Rust与Android代码互相调用

本篇主要是介绍如何使用jni-rs。有关jni-rs内容基于版本0.20.0,新版本写法有所不同。 入门用法 在Rust库交叉编译以及在Android与iOS中使用中我简单说明了jni-rs及demo代码,现在接着补充一些详细内容。 首先贴上之前的示例代码: use std:…

嘉靖王朝最大的一出闹剧和惨剧——大礼仪之争

大礼仪之争 大礼议是指发生在正德十六年(1521年)到嘉靖三年(1524年)间的一场皇统问题上的政治争论。 原因是明世宗以地方藩王入主皇位,为其改换父母的问题所引起,是明朝历史第二次小宗入大宗的事件。 “…

罗丹明荧光染料标记叶酸,FA-PEG-RB,叶酸-聚乙二醇-罗丹明;Folic acid-PEG-RB

FA-PEG-RB,叶酸-聚乙二醇-罗丹明 中文名称:叶酸-聚乙二醇-罗丹明 英文名称:FA-PEG-RB, Folic acid-PEG-RB 性状:粉红色固体或液体,取决于分子量 溶剂:溶于水和DMSO、DMF等常规性有机溶剂 保存条件:-2…

【Python】【进阶篇】二十一、Python爬虫的多线程爬虫

目录二十一、Python爬虫的多线程爬虫21.1 多线程使用流程21.2 Queue队列模型21.3 多线程爬虫案例1) 案例分析​2) 完整程序二十一、Python爬虫的多线程爬虫 网络爬虫程序是一种 IO 密集型程序,程序中涉及了很多网络 和 本地磁盘的 IO 操作,这会消耗大量…

自绘 MFC 控件 CComboBox

运行效果: 第一步:在窗口中拖拽一个CComboBox控件,设置如下属性: 类型,设置为:下拉列表包含字符串,设置为:True所有者描述,设置为:Variable 注意: 包含字符串,不设置为True,则使用GetLBText等函数无法获取到Item的text;所有者描述,设置为No,不执行DrawItem、M…

实战大数据项目

存储日志数据集(HDFS) 数据仓库构建(Hive) 数据分区表构建 数据预处理 (Spark计算引擎)-使用Zeppelin进行写SQL 订单指标分析 Sqoop数据导出到传统数据库(Mysql) Superset数据…

Vue2_02_指令

模板语法 — Vue.js (vuejs.org) 指令 (Directives) 是带有 v- 前缀的特殊 attribute 参数 一些指令能够接收一个“参数”&#xff0c;在指令名称之后以冒号表示 <a v-bind:href"url">...</a> 动态参数 可以用方括号括起来的 JavaScript 表达式作为一…

企业消费管理迈向数字化,助力员工满意度提升,解决行政·财务·采购等部门痛点 | 爱分析调研

调研&#xff1a;李进宝 撰写&#xff1a;李进宝 某市场巡视人员&#xff1a;每次出差都要垫钱&#xff0c;每月还只能报销一次&#xff0c;这不是自费上班吗&#xff1b; 某软件研发人员&#xff1a;我们每天都要加班到很晚&#xff0c;公司提供晚餐&#xff0c;但高油高盐&…

ERP系统应用场景,API接口接入

ERP订单管理系统能为企业带来什么 1、ERP订单管理系统可以对工厂物料采购的时间进行提示&#xff0c;根据产品目前的库存情况来进行确定&#xff0c;并比较物料采购时所需要支付的费用是多少&#xff0c;什么时候采购价格相对更加便宜。 2、在产品的生产方面&#xff0c;涉及…

Linux远程连接虚拟机超时,且ip地址找不到问题解决

ip地址虚拟机自动更改&#xff1a; 原因&#xff1a;Linux没有正常关机 解决&#xff1a;从虚拟机在自己电脑上的文件地址中bin目录下&#xff0c;前面几个以.lck的文件全部删除 Linux远程连接虚拟机超时&#xff1a; 原因可能跟上面是一样的&#xff0c;IP地址自动修改之后自…

华为 ADS 2.0 发布,城区智驾之战「白热化」

作者 | 马波编辑 | 德新虽然上海车展还未正式拉开帷幕&#xff0c;但今天的华为却通过一系列新品的发布为今年的汽车盛会进行了预热。就在今天上午&#xff0c;华为车BU正式发布了一系列新品&#xff0c;同时也对部分现有产品进行了升级。其内容之多、升级的幅度之大&#xf…

Maven项目中的依赖出现版本冲突,最终发现是对Dependency Scope理解有误

再来个文章目录 文章目录背景疑问排查过程问题存在的原因总结示例依赖版本说明本文记录一下遇到maven依赖版本冲突后的排查过程说明以及问题原因说明 下面还有投票&#xff0c;帮忙投个票&#x1f44d; 背景 最近加入了 Apache Dubbo 开源社区&#xff0c;成为了一名Dubbo Con…

【K8S系列】深入解析Pod对象(一)

目录 序言 1.问题引入 1.1 问题描述 2 问题解答 2.1 pod 属性 2.1.1 NodeSelector 2.1.2 HostAliases 2.1.3 shareProcessNamespace 2.1.4 NodeName 2.1.5 其他pod属性 2.2 容器属性 2.2.1 ImagePullPolicy 2.2.2 Lifecycle 3 总结 4. 投票 序言 任何一件事情&am…

Zabbix代理服务器

Zabbix代理服务器一、部署 zabbix 代理服务器1、设置 zabbix 的下载源&#xff0c;按照 zabbix-proxy2、安装zabbix所需数据库3、添加数据库用户&#xff0c;以及 zabbix 所需的数据库信息4、导入数据库信息5、修改配置文件6、配置 agent 使用 proxy二、设置 zabbix-snmp 监控1…

dubbo2.7升级到dubbo3--dubbo2.7升级到dubbo3系列

最近在做老系统升级(springboot2dubbo2.7.1zookeepernacos-config)&#xff0c;去掉zookeeper的注册中心&#xff0c;替换成nacos2.1版本&#xff08;阿里云已经不支持1.X版本了&#xff09;-对应的需要升级springboot和dubbo3。最终升级完成了&#xff0c;其中遇到的诸多问题&…

Unity VFX -- (1)概览

视觉特效&#xff08;Visual Effects&#xff0c;VFX&#xff09;在实时3D项目中能够带来惊艳的效果&#xff0c;其范围很广&#xff0c;比如水花四溅、迷雾、火焰、爆炸效果等。 如果没有VFX&#xff0c;整个环境会让人感到非常呆板无聊。这些特效会让环境生动起来&#xff0c…