佳文分享:CAP定理

别忽视!大数据领域CAP定理的重要性解析 CAP定理,即一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)定理,是分布式计算领域中一个具有里程碑意义的理论。它由加州大学伯克利分校的埃里克·布鲁尔(Eric Brewer)教授在2000年的ACM PODC会议上首次提出,并在2002年由塞思·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)从理论上进行了严格证明。 阅读详情

1976年6月4号,周5,在远离音乐会大厅的一个楼上的房间内,在位于Manchester的Lesser Free Trade Hall ,Sex Pistols 乐队(注:Sex Pistols的经理人Malcolm McLaren 2010.4.8去世)开始了他们的第一次演出(gig, 注:规模太小称不上演唱会 )。关于当晚谁出席了那场演出有些混乱,部分是因为6周后的另一场音乐会,但最主要的还是因为,这场演出被认为是永久改变西方音乐文化 的一场演出。这场演出是如此的重要且富有象征意义,以至于David Nolan写了一本书:《我发誓我在那里:那场改变了世界的演出 》,对那些声称自己看过那场演出的人做出判断。因为6月4号被认为是punk摇滚的开始。

在这之前(大约是在1971年左右)曾有一些protopunk 乐队,例如New York Dolls 和Velet Underground ,但从音乐民俗学来说,是Sex Pistals开启了这场革命,在这场运动中驱动了Buzzcocks 乐队的吉他,The Smiths 乐队哀怨的哭诉,The Fall 乐队的电子切音,Joy Division 和Simply Red 乐队华丽的升调(我猜你不了解所有的含义)(注:我缺乏摇滚方面的知识,这部分翻的不是很满意,好在不影响大局,有punk摇滚知识的同学可以提供帮助 )

2000年7月19号,周三,对主流文化来说并不(象前者一样)具有同样的重要性,但这个日子对互联网公司来说,和25年Sex Pistols对音乐所做的一样,具有同样的影响。这就是Eric Brewer 在ACM研讨会上关于分布式计算的原则 (Principles of Distributed Computing)所做的开题演讲 (keynote speech)。

Sex Pistols向同时代的人展示了几乎无限制的狂躁远比学院派的结构主义重要的多,给任何人3根弦以及一些许可就可以组建一支乐队。Eric Brewer,在那时被称为Brewer猜想,认为当应用系统变得越来越web化,应当放弃对数据一致性(data consistency)的担忧,因为要想获得这种新的分布式系统的高可用性(high availability),确保数据一致性是我们无法做到的,这样给予任何人3台服务器和一双关注客户体验的眼睛就可以建立一家互联网公司。Brewer的信徒(当天就有的和后来皈依的)包括像Amazon , EBay 和Twitter 这类公司

2年后,2002年,麻省理工(MIT)的Seth Gilbert 和Nancy Lynch ,理论上证明 了Brewer猜想是正确的,就此Brewer定理(Theorem)诞生了。

Brewer(CAP)定理

那么到底Brewer的定理是什么,为何它足以和1976年Manchester的punk演出媲美?

Brewer 在2000年的演讲是基于他在UC Berkley的理论工作以及主持Inktomi (期间)的观察,是通过数年前Brewer和其他人,在如何构建高伸缩性系统(highly scalable system)时所做出的各种折衷方案的讨论(例如:SOSP(Symposium on Operating System Principles)的1997年的Cluster-Based Scalable Network Service 和1999年的Harvest, yield, and scalable tolerant system )就像其他的许多思想,因此这个演讲的内容并不是全新的,它是许多聪明人的共同成果(我确信Brewer会很快说明这一点)。

Brewer认为在分布式的环境下设计和部署系统时,有3个核心的系统需求 (systemic requirements),以一种特殊的关系存在。(他主要是谈论Web类的应用,但如今非常多的公司业务是多站点/多国家的,因此该理论同样适用于你的数据中心/LAN/WAN的设计)

这3个核心的需求是:Consistency ,Availability 和Partition Tolerance ,赋予了该理论另外一个名字 - CAP 。

要想将该理论和现实的联系起来,让我们举一个简单的例子:你想购买一套托尔斯泰 的《战争与和平 》,以便在明天开始的长假中有可读的东西。然而你最喜欢的网上书店只有一本库存了。你进行搜索,确认书可以在你出发前送到,然后将书加入你的购物车。接着你想起来还有一些其他的东西要买,所以继续浏览网站(你是否在网站只买一件东西?当然要充分利用包裹的费用了)。但当你查看某个防晒霜的客户反馈时,国内某个地方的某个人,进入网站,将那本书加入到自己的购物车,然后直接付款(他们急需解决桌子摇晃的问题,其中一条桌脚比其他的短的多)。

  • Consistency
    一个服务是一致的完整操作或完全不操作(A service that is consistent operates fully or not at all,精确起见列出原文,也有人将其简称为数据一致性)。Gilbert 和Lynch在他们的证明中使用“atomic”而不是consistent,技术上来讲更准确,因为严格来说,当用在数据库事务的属性中时,consistent是指ACID 中的C,其含义是如果数据违反了某些预设的约束(preset constraints)就不能被持久化(persisted)。但如果你将其认为是分布式系统中的一个预设约束:不允许同一数据有不同的值,那么我认为这个抽象概念的漏洞就被堵住了(而且,如果Brewer使用atomic这个词,就会被称为AAP定理,那每次我们读它的时候都会被送进医院)(注:我估计是有口吃加白痴的嫌疑)。在前面购书的例子中,你将书加入购物车或无法加入。支付成功或不成功。你无法部分加入或部分支付一本书。库存中只有一本书,当天只有一个人能得到它。如果2个客户都可以完成订单流程(如完成支付),那么仓库中的和系统中的不一致性就会导致问题。在这个例子中也许并不是个大问题:某个人在假期中会很无聊或摆弄防晒霜,但如果将其扩大到数千个不一致性,并且涉及到金钱(例如:金融交易中关于买卖的东西和交易记录的内容不一致)就会是个大问题。也许我们可以利用数据库来解决一致性问题。在(购书的)订单流程中的某个点减少《战争与和平》的库存记录。当其他的客户到达这个点的时候,书架空了,订单流程将会通知客户,而不会进行到支付环节。这样第一个操作顺利完成,第二个操作则不会完成。数据库非常适合这种情况,因为数据库关注ACID属性,并且通过隔离性(Isolation)来保证一致性,这样当第一个客户会使得库存记录减1,同时购物车的记录加1,任何中间状态同第二个客户都是隔离的,当然第二个客户必须等待几百毫秒以便数据存储达到一致状态。
  • Availability
    可用性只是意味着服务是可用的(可以完成如上的操作或不完成)。当你购书时期望得到反馈,而不是浏览器报告网站无法连接的信息。Gilbert 和Lynch在其CAP定理的证明中很好地指出了,可用性通常在你最需要的时刻背弃你。网站通常在业务最繁忙的时刻挂掉,因为网站压力最大。一个他人无法访问的服务对任何人都没有价值。  
  • Partition Tolerance
    如果你的应用和数据库运行在一个机器上(忽略规模的问题并假定你的代码都没问题),你的服务器是作为一种原子处理单元(atomic processor):要么工作要么不工作(例如:如果down机就不可用,但也不会造成数据不一致问题)

一旦开始将数据和逻辑分布在不同的节点上,就有形成partition的风险。假定网线被切断,partition就形成了,节点A无法和节点B通讯。由于Web提供的这种分布式能力,临时的partition是一个常见的情况,如之前说所的,在全球化的有多个数据中心的公司中这并不罕见。

Gilbert 和Lynch是这样定义partition tolerance的

除了整个网络的故障外,其他的故障(集)都不能导致整个系统无法正确响应。(No set of failures less than total network failure is allowed to cause the system to respond incorrectly)

请注意Brewer的注释,单节点partition就等同于服务器crash,因为如果无法连接它,那它就和不存在一样。

定理的重要性

CAP定理在应用系统规模化时最有效。在低压力的情况下,小的延迟(以便数据库达到一致的状态)还不足以对总体的性能或用户体验造成影响。你所承担的负载分布,可能都是出于系统管理的原因。?

但随着活动的增加,吞吐量的上限(pinch-points)将会限制增长并产生错误。必须等待网页的返回是一种情况,另一种情况则是在你输入信用卡信息后遇到 “HTTP 500 java.lang.schrodinger.purchasingerror”,你就想知道你是否付了钱但无法得到东西,还是没付钱,或者这只是交易中一个不重要的错误。谁知道呢?你不太可能继续下去,很有可能到别的地方购物,或更有可能给银行打电话。

不管是那种情况对业务都没有好处。Amazon声称 每0.1秒的响应延迟都会导致1%的销售降低。Google说 他们注意到0.5秒的延迟会使流量减少15%。

我之前 曾就scalability写过一些东西,不想在这里重复,只想指出2点:第一点是,解决scale问题看起来是一个架构方面的问题,但最初的讨论却不是,而是业务决策。我已经很厌倦听到技术人员说,因为当前的流量,这样或那样的方案不能用。并不是说技术人员错了,通常他们讲的非常正确,是由于从一开始所限定的scale 隐含地做了revenue决策-这一问题应该在业务分析时明确地决定下来。

第二点是,一旦你开始讨论如何scale业务系统,大致会落到2种意识形态阵营中:数据库派和非数据库派。

对于数据库派来说,毫无疑问,钟爱数据库技术,并倾向于谈论optimistic locking 和sharding 这类的东西来解决scale问题,并将数据库作为系统的核心。

非数据库派会倾向于尽可能多的在数据库环境(避免关系世界)之外管理数据以解决scale问题。

我认为,可以公平地说,前一派人对CAP定理的热情肯定不如后一派(尽管他们在讨论定理 )。这是因为,如果你必须在consistency,availability,partition tolerance三者中放弃一个,大多数会选择放弃consistency,而consistency是数据库存在的理由。(选择的)逻辑,无疑,是availability和partition tolerance能够使你赖以赚钱的系统生存下去,而不一致性感觉好像是你可以用好的设计来解决的问题。

和IT中的其他事情一样,这不是非黑即白的问题。Eric Brewer在其PODC演讲的第13页slide中,当比较ACID和其非正式的对应物的BASE 时,甚至说“我认为这是一个系列(spectrum)”(注:这里光谱有一个系列的含义,是指ACID和BASE是不对立的)。如果你对这个主题感兴趣(有些超出我在这里讨论的范围了),你可以从一篇叫做,“Design and Evaluation of a Continuous Consistency Model for Replicated Service page_white_acrobat ”的论文开始,该文由Haifeng Yu和Amin Vahdat 编写。大家不可以将CAP解读为暗示数据库的消亡。

尽管这样,双方都认同scale的解决之道是分布式的并行计算,而不是曾经认为的超级计算机。90年代中期进行的Network of Workstations 项目受到了Eric Brewer的影响,并最终导致了CAP定理的诞生,因为他在一个关于Inktomi and the Internet Bubble page_white_acrobat 的介绍中说到,答案总是并行处理:

 

如果不通过并行的方式,你就没有机会,在合适的时间内解决问题。和其他许多事情一样。如果是个很大的项目,会需要很多人来完成它。因此,如果想建造一个桥梁,就需要很多建筑工人。这就是并行处理。因此问题会演变为“如何将并行处理和internet结合在一起”

图片证明

这里有一个简单的图片证明,因为我发现用图片会比较好理解。多数情况下我使用和Gilber 和Lynch相同的术语,以便和他们的论文联系起来。

intro  

上图显示了网络中的两个节点N1,N2。他们共享同一数据V(库存中《战争与和平》的数量),其值为V0。N1上有一个算法A,我们可以认为A是安全,无bug,可预测和可靠的。N2上有一个类似的算法B。在这个例子中,A写入V的新值而B读取V的值。

scenario-1  

正常情况下(sunny-day scenario),过程如下:(1)A写入新的V值,我们称作v1。(2)N1发送信息给N2,更新V的值。(3)现在B读取的V值将会是V1。

scenario-2

如果网络断开(partions)(意味着从N1无法发送信息到N2)那么在第3步的时候,N2就会包含一个步一致的V值。

希望看上去很明白。即使将其scale到几百个事务(transaction)中,这也会成为一个大问题。如果M是一个异步消息,那么N1无法知道N2是否收到了消息。即使M是保证能发送的(guaranteed delivery),N1也无法知道是否消息由于partition事件的发生而延迟,或N2上的其他故障而延迟。即使将M作为同步(synchronous)信息也不能解决问题,因为那将会使得N1上A的写操作和N1到N2的更新事件成为一个原子操作(atomic operation),而这将导致同样的等待问题,该问题我们已经讨论过(或更糟)。Gilbert 和Lynch已经证明,使用其他的变种方式,即使是部分同步模型(每个节点上使用安排好的时钟)也无法保证原子性(atomicity)。

因此,CAP告诉我们,如果想让A和B是高可用(highly available)的(例如,以最小的延迟(latency)提供服务)并且想让所有的N1到Nn(n的值可以是数百甚至是上千)的节点能够冗余网络的partitions(丢失信息,无法传递信息,硬件无法提供服务,处理失败),那么有时我们就得面临这样的情况:某些节点认为V的值是V0(一本《战争与和平》的库存)而其他节点会认为V的值是V1(《战争与和平》的库存为0)

我们都希望所有的事情是结构化的,一致的且和谐的,就像70年代早期的prog rock 乐队,但我们面临的是一些punk风格的混乱。事实上,尽管有可能会吓到我们的祖母,但一旦你了解了它就还OK,因为2者可以非常愉快地在一起工作。

让我们从事务(transactional)的角度快速分析一下。

tx-view  

如果我们有个事务(例如:一组围绕着persistent数据项V的工作单元)a,a1是写操作,a2是读操作。在一个local的系统中,可以利用数据库中的简单锁(simple locking)的机制方便地处理,隔离(isolating)a2中的读操作,直到a1的写成功完成。然而,在分布式的模型中,需要考虑到N1和N2节点,中间的消息同步也要完成才行。除非我们可以控制a2何时发生,我们永远无法保证a2可以读到a1写入的数据。所有加入控制的方法(阻塞,隔离,中央化的管理,等等)会要么影响partition tolerance,要么影响a1(A)和a2(B)的可用性。

CAP选择

当处理CAP的问题时,你会有几个选择。最明显的是:

  1. 放弃Partition Tolerance 如果你想避免partition问题发生,你就必须要阻止其发生。一种做法是将所有的东西(与事务相关的)都放到一台机器上。或者放在像rack这类的atomically-failling单元上。无法100%地保证,因为还是有可能部分失败,但你不太可能碰到由partition问题带来的负面效果。当然,这个选择会严重影响scale限制。
  2. 放弃Availability 相对于放弃partition tolerance来说,其反面就是放弃availability。一旦遇到partition 事件,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务。在多个节点上控制这一点会相当复杂,而且恢复的节点需要处理逻辑,以便平滑地返回服务状态。
  3. 放弃Consistency 或者如同Werner Vogels所提倡的,接受事情会变得“最终一致 (Eventually Consistent)”(2008年12月更新)。Vogels的文章值得一读。他比我在这里讨论了更多的操作方面的细节。许多的不一致性并不比你想的需要更多的工作(意味着持续的consistency或许并不是我们所需要的)。在购书的例子中,如果一本库存的书,接到了2个订单,第二个就会成为备份订单。只要告知客户这种情况(请记住这是一种罕见的情况),也许每个人都会高兴的。
  4. 引入(jump)BASE
    有一种架构的方法(approach)称作BASE(B asically A vailable, S oft-state, E ventually consistent)支持最终一致概念的接受。BASE(注:化学中的含义是碱),如其名字所示,是ACID(注:化学中的含义是酸)的反面,但如果认为任何架构应该完全基于一种(BASE)或完全基于另一种(ACID),就大错特错了。这一点是需要谨记重点,尤其是这个行业的“一边倒(oooh shiny,注:这个完全意译了)”的习惯性的采用策略。这里,我要遵从Brewer教授自己的观点,他就本文通过email表达了自己的观点(comment):

    如您所指出的,术语BASE第一次出现是在1997年的SOSP文章中。那一年,我和我的学生在他们的办公室中,一起造了这个词。我承认这有些人为的因素,但ACID也是一样的--远超人们所能意识到的,所以我们人为还行。Jim Gray和我讨论了这些缩写,他欣然认可ACID也有些扭曲(stretch)– A和D(的概念)有相当多的重复部分,C至多也是含糊不清的。但这对术语暗示了一系列的理念(idea of spectrum),这是PODC演讲中的一个重要观点,你正确地指出了这一点。

    EBay的Dan Pritchett有一篇关于BASE的很棒的介绍 (presentation)。

  5. 围绕其进行设计
    Guy Pardon, atomikos 的CTO写了一篇他称作“CAP解决之道(证实Brewer的错误) ”的文章,提出了一种架构方法,可以达到Consistency, Availability和Partition-tolerance,当然附带了一些说明(显然你不可能在同一时刻满足全部的3个要求)。值得一读,Guy雄辩地表达了(在该领域)相反的观点。
总结

在Consistency, Availability和Partition-tolerance中,你只能保证2点,这是确实的,并且已经被这个星球上最成功的网站证实了。如果对网站是有效的,我看不出在企业环境中,在日常的工作中,不考虑同样的折衷设计的理由。如果业务方面明确表明不需要上规模(scale)那好,有简单的解决方案,但这是值得讨论的。在任何情况下,这些讨论都是针对特定操作的适合的设计,而不是庐山(注:shebang取意译)全貌。正如Brewer在其邮件中所说的:“唯一的我可以加入的是同一服务的不同部分可以选择这一系列(spectrum)中的不同的点”有时,无论scale的代价如何,你绝对需要一致性 ,因为缺少它的风险太大了。

这些天,我说得有些过,说Amazon和EBay没有scalability问题,我认为他们的确有这类问题,但他们现在有办法解决该问题。这也是为何他们可以自由讨论这些问题的原因。不论他们现在是何规模(结合他们早就公布的数字)只会越来越大。一旦规模上来,你的问题就会转到(shift)诸如操作维护,监控,发布软件的更新等等 - 当然(这些问题)都很难解决,但值得,尤其当你因此获得现金流(revenue stream)。

参考
  1. HP接纳CAPd定理,白皮书的标题为“分布式数据没有免费的午餐 ”
  2. Sussex大学计算机科学讲义,关于分布式事务 和网络partitions
  3. Jens Alfke的关于数据库,scaling和Twitter的好文
  4. Pat Helland 的关于分布式事务和SOA的Microsoft论文,叫做数据在外和数据在外 ,他随后将其和CAP理论关联了起来 。
  5. 另一套计算机科学方面课程slides ,这一次是来自Virginia的George Mason大学,是关于分布式软件系统 和CAP定理以及ACID和BASE两大阵营的对比。
  6. 在英国1976年6月4号被认为是Punk摇滚诞生的日子。感谢Charlie Dellacona指出在美国Ramones 普遍认为是从1974年就开启了这一运动,尽管他们正式的punk唱片 是在同时发行的。
  7. 感谢Hiroshi Yuki ,提供了本文的日文版译本
  8. 感谢哦Daniel Cohen ,提供了分为两  部分 的希伯来版译本
092、多sensor帧同步在环视系统中的实现——基于瑞芯微RK3588的PPS同步与曝光同步方案 摘要: 本文探讨了瑞芯微RK3588平台在360环视系统中实现多摄像头帧同步的技术方案。针对环视拼接常见的动态场景错位问题,提出了PPS同步与曝光同步相结合的解决方案。通过GPIO硬件触发实现四路摄像头同步曝光,配合I2C全局曝光控制,将时间误差控制在0.5ms内。文章详细解析了RK3588设备树配置、内核驱动实现中的关键细节,包括同步信号处理、寄存器原子写入等核心技术点,并分享了量产中遇到的温度漂移、信号完整性等实际问题及解决方法。最终通过硬件整形和电源优化,将同步抖动控制在±5μs以内,有效解决了动态拼 阅读详情

相关推荐

Windows下高效部署llama.cpp:从环境配置到模型量化的完整指南

本文提供了一份详尽的Windows系统下部署llama.cpp的完整指南。内容涵盖从Python环境配置、使用CMake与MinGW编译工具链的搭建,到编译llama.cpp项目、获取并转换模型为GGUF格式,以及执行模型量化和基础推理测试的全过程。指南旨在帮助开发者在普通Windows电脑上,无需高端显卡,仅凭CPU即可高效运行大语言模型,并重点解决了部署过程中常见的环境与编译错误。

weixin_28841265的博客 878

CAP定理

CAP定理的简单描述

weixin_45887061的博客 4852

阿里天池新闻推荐实战:多路召回策略解析与优化

本文深入解析阿里天池新闻推荐项目中的多路召回策略,包括ItemCF、UserCF、YouTubeDNN等五种召回模型的协同应用与优化技巧。通过实战案例展示如何提升推荐系统效果,特别针对冷启动问题提出创新解决方案,帮助开发者构建高效的新闻推荐系统。

weixin_26918763的博客 413

[分布式]:分布式系统的CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition...

Franco的博客 2万+

AI工作流革命:从n8n到Sora2,揭秘自动化视频创作的底层逻辑

本文深入探讨了AI工作流在自动化视频创作中的应用,重点介绍了n8n、Coze和Sora2的组合如何实现从链接输入到视频输出的全流程自动化。通过三层架构解析、关键技术模块优化及成本控制策略,这套方案显著提升了视频生产效率,适用于电商、热点追踪等多种场景。

gg901的博客 1080

Xftp卸载报错1628终极解决指南:深入解析InstallShield残留问题

本文深入解析了Xftp卸载时遇到的1628错误,其根源在于InstallShield安装引擎的残留问题。文章提供了从手动清理注册表项到彻底删除隐藏安装备份文件夹的完整解决方案,并给出了防患于未然的实用建议,帮助用户彻底解决这一经典安装报错。

weixin_29276847的博客 335

分布式系统的 CAP 定理

CAP定理指出,在一个分布式系统中,对于一致性、可用性、分区容错这三个特性,不可能同时满足,而是必须有所舍弃。我们设计分布式系统时,必须在三者之间(尤其是一致性和可用性之间)有所取舍和平衡。 作者:王克锋 出处:https://kefeng.wang/2018/07/26/distributed-cap/ 版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。 1 概述 ...

kefeng.wang 的博客 1万+

yolov11添加P2小目标检测头与添加P6超大目标检测头

本文介绍了YOLO目标检测模型中上下采样的原理及应用。上采样通过插值算法放大特征图,YOLO通常采用最近邻插值;下采样则通过带步长的卷积缩小特征图提取高层语义特征。文章详细阐述了这两种操作在YOLO中的实现方式、结构特点及对称性问题,指出下采样后会使用C3模块进行特征整合,上采样后通过concat抑制分割感。此外,还分析了不同分辨率特征图适合检测不同尺寸目标的原因,并提出添加4倍小目标检测头的方法,即对上采样后的特征进行concat和C3模块处理。最后给出了YOLOv5原模型结构和添加4倍检测头后的结构对比

m0_64661770的博客 820

从0开始学架构22-想成为架构师,你必须知道CAP理论

CAP定理(CAP theorem)又被称作布鲁尔定理(Brewer’s theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在2000年的ACM PODC上提出的一个猜想。2002年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP是必须掌握的理论。为了更好地解释CAP理论,我挑选了Robert Greiner(

sucaiwa的博客 171

基于深度学习的树木种类识别

本文介绍了基于深度学习的树木种类识别技术。我们将通过深度学习模型和图像处理技术实现对树木的自动识别与分类。首先,我们将介绍深度学习的基本原理和相关算法。接着,我们将详细说明树木种类识别的数据准备、模型构建和训练过程。最后,我们将给出代码示例,帮助读者深入了解和实践该技术。

一键难忘的博客 2315

YOLO26中的PPM空间金字塔池化:改良设计与多尺度特征提取教程

在计算机视觉的语义分割任务中,准确理解图像中的上下文信息至关重要。例如,在街景图像中,可能同时存在远处的小汽车和近处的大建筑物,网络需要具备捕获多尺度上下文信息的能力。例如,要正确识别图像中的"船",不仅需要看到船本身的特征,还需要理解周围的水面环境。金字塔的每一层对应不同的池化尺度,从细粒度到粗粒度,形成了多层次的特征表示。PPM(Pyramid Pooling Module)正是为了解决这一问题而提出的模块,它通过构建金字塔形状的池化结构,有效地聚合不同尺度的上下文信息,从而提升语义分割的精度。

LXY_LOVE36的博客 82

超越CAP定理:PACELC

在现代分布式系统中,网络故障是必然会发生的,所以 分区容错性 (P) 是一个必须满足的前提条件。因此,CAP 定理的实际抉择变成了:当网络分区发生时,你必须在一致性 (C) 和可用性 (A) 之间做出选择。 这样的CAP定理是有局限性的,其更像一个“故障发生时”的法则,告诉网络故障时怎么权衡。它没有告诉我们在系统整行运行时如何权衡。

啾啾头号大粉丝打工买粮博客 1959

第三节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 对接后端登录接口(上)

这里是Vben Admin V5版本实战体验,上一节我们前端已正常运行,但是没有实现登录。本节的重点是对接后端接口。上一节地址:第一节:Vben Admin 最新 v5.0初体验第二节:Vben Admin 登录逻辑梳理和对接后端准备后端我们采用Python的Flask项目,Flask-SQLAlchemy管理数据库模型,Flask-Migrate进行模型迁移。参考版本如下:Flask3.0.23.1.1到这里,登录接口完成,下一步要实现获取用户信息和权限的接口功能。

cuiwin的专栏 1859

09 | CAP定理:三选二,架构师必须学会的取舍

今天要与你分享的主题是 CAP 定理。在分布式系统的两讲中,我们一起学习到了两个重要的概念:可用性和一致性。而今天,想和你讲解一个与这两个概念相关,并且在设计分布式系统架构时都会讨论到的一个定理——

qq_37756660的博客 997

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

分布式系统 | CAP 定理图解

博客原文:分布式系统 | CAP 定理图解 CAP定理是分布系统中的一个基本定理,它指出任何分布系统最多可以具有以下三个属性中的两个。 一致性 (Consistency) 可用性 (Availability) 分区容错性 (Partition tolerance) 本文将以图解的形式简明地对 Gilbert and Lynch’s specification and proof of th...

小旋锋 的博客 2470

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

旧事重提之CAP定理

问题之由来 我第一次听说mongodb、hbase这些分布式数据库的时候,正是我学习mysql的时候,在那个遥远的年代,mysql可是java web项目的标配,恰如今日hadoop之于大数据。高可用、弹性扩展,分布式数据库带来了种种眼花缭乱令人目眩的特性,深深吸引着当时涉世未深而又孤陋寡闻的我,然而零基础转行大数据又处处碰壁,屡战屡败之后,才有一个大数据...

206

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

正确理解CAP定理

正确理解CAP定理 原文:正确理解CAP定理前言   CAP的理解我也看了很多书籍,也看了不少同行的博文,基本每个人的理解都不一样,而布鲁尔教授得定义又太过的简单,没有具体描述和场景案例分析。因此自己参考部分资料梳理了一篇与大家互相分享一下。   标题写了正确理解,或许某些点不是百分百正确或者有歧义,但是希望与各位分享讨论后达到最终正确, ...

weixin_30576859的博客 84

CAP定理:三选二,架构师必须学会的取舍

你好,我是程序员贵哥。今天我要与你分享的主题是CAP定理。在分布式系统的两讲中,我们一起学习到了两个重要的概念:可用性和一致性。而今天,我想和你讲解一个与这两个概念相关,并且在设计分布式系统架构时都会讨论到的一个定理——

qq_33240556的博客 722

分布式系统,从CAP定理说起

本文作者笠泱分享了对分布式系统及其核心理论的理解,包括分布式系统的概念、单体架构的局限性以及网络运算常见误区。重点解析了CAP定理(一致性、可用性、分区容错性三者不可兼得)和BASE理论(基本可用、软状态、最终一致性)。同时探讨了如何判定CP与AP系统,并结合Nacos、MySQL、Redis等实例分析其特性。最后总结分布式架构设计需关注高可用、高性能等六大指标,强调微服务与分布式解决方案的重要性。

qq_42969817的博客 860
上一篇: 佳文分享:我个人比较受用的一些习惯
下一篇: linux系统调用列表
cutesource
博客等级 码龄17年 5041粉丝 151原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值