架构师速成8.3-架构师必须要了解的规则(转)

作为一个架构师,有些规则是必须要掌握的,这就想软件的公理,如果你学物理不知道牛顿定律,那就不要学了。在软件行业也有类似的东西,我称之为软件定律。例如:

ACID,CAP,BASE

ACID

传统数据库系统中,事务具有ACID 4个属性

(1)原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。

(2)一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。

(3)隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。

(4)持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

可以说,数据库系统是伴随着金融业的需求而快速发展起来。对于金融业,可用性和性能都不是最重要的,而一致性是最重要的,用户可以容忍系统故障而停止服务,但绝不能容忍帐户上的钱无故减少,而强一致性的事务是这一切的根本保证。

CAP

在2000的PODC(Principles of Distributed Computing)会议上,Brewer提出了著名的CAP理论。CAP指的是:Consistency、Availability和Partition Tolerance。

(1)Consistency(一致性):一致性是说数据的原子性,这种原子性在经典的数据库中是通过事务来保证的,当事务完成时,无论其是成功还是回滚,数据都会处于一致的状态。在分布式环境中,一致性是说多个节点的数据是否一致。

(2)Availability(可用性):可用性是说服务能一直保证是可用的状态,当用户发出一个请求,服务能在有限时间内返回结果。

(3)Partition Tolerance(分区容错性):Partition是指网络的分区。可以这样理解,一般来说,关键的数据和服务都会位于不同的IDC。

CAP理论告诉我们,一个分布式系统不可能同时满足一致性,可用性和分区容错性这三个需求,三个要素中最多只能同时满足两点。三者不可兼顾,此所谓鱼与熊掌不可兼得也!而对于分布式数据系统而言,分区容错性是基本要求,否则就不称其为分布式系统了。因此架构设计师不要把精力浪费在设计如何能同时满足三者的完美分布式系统上,而是应该进行权衡取舍。这也意味着分布式系统的设计过程,也就是根据业务特点在C(一致性)和A(可用性)之间寻求平衡的过程,要求架构师真正理解系统需求,把握业务特点。

后来:CAP理论的作者终于给了我长久以来想要的答案:CAP理论并非严格的三选二,大多数情况下,A和C是可以兼得的,因为大多数情况下,P都不存在。
P只有在结点之间通信延迟大于可接受的范围时才出现(结点之间开始近似隔离,状态开始不一致),即P一旦出现,我们选择继续提供服务那么状态就肯定不一致,也就等于放弃了C;我们选择不提供服务,那么就等于放弃了A。通俗一点,P并不是目标,也不是手段,它是伴随着“多结点,网络,数据,共享”的要求而必然出现的,出现的原因是因为网络的不可靠性及结点通信延迟(延迟的原因可能是由于硬件,网络,或者压力太大而无法及时响应)。

弄清楚了CAP的P,也就弄清楚了CAP理论的实质,戴在头顶的紧箍咒便永久摘掉了。

CAP理论并不是要求我们悲观地放弃A和C任何一方,相反,它可以乐观地指导我们将C和A最大化;ACID和BASE分别处于CAP理论的两个极端,ACID强调强一致性,BASE强调高可用性,两者把重点都放在A和C上,淡化了P也可变的事实;通过对P的出现检测,发现P之后的限制和约束,P结束之后的补偿和恢复,通过采用千差万别的策略,我们可以避免P带来的C和A的严重损失,实现A和C的最大化来提高整个系统的正确性和可用性。ACID和BASE并非水火不容,我们可以在同一个系统中,既使用ACID,又使用BASE。

BASE

BASE来自于互联网的电子商务领域的实践,它是基于CAP理论逐步演化而来,核心思想是即便不能达到强一致性(Strong consistency),但可以根据应用特点采用适当的方式来达到最终一致性(Eventual consistency)的效果。BASE是Basically Available、Soft state、Eventually consistent三个词组的简写,是对CAP中C & A的延伸。BASE的含义:

(1)Basically Available:基本可用;

(2)Soft-state:软状态/柔性事务,即状态可以有一段时间的不同步;

(3)Eventual consistency:最终一致性;

BASE是反ACID的,它完全不同于ACID模型,牺牲强一致性,获得基本可用性和柔性可靠性并要求达到最终一致性。

后面我会不断充实这本软件定律。
作者:arrowcat
出处:http://www.cnblogs.com/hustcat/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文为Gleasy原创文章,转载请指明引自Gleasy团队博客

时间: 2024-08-12 00:10:59

架构师速成8.3-架构师必须要了解的规则(转)的相关文章

架构师速成8.2-架构师要懂产品

产品和架构两个截然不同的职业,好像风马牛不相及,其实不是这样的.产品的思想需要经过技术的手来成为现实,在成为现实之前,需要技术理解.评估.碰撞.优化.把控.验证等等.当然架构师就承担了这一系列技术的责任,而且在一个产品的实现过程中,技术架构并不是很重要的,前期可以没有架构,简单快速验证,只有在用户多了之后,架构才有真正的用处.在初创公司,很多架构师都等不到用户多了的那一天,来实现自己的架构梦.所以产品这一关架构一定要把好,只有你把好了,后面才有机会让你去架构. 当然架构师的懂产品,是懂产品的生命

架构师速成7.4-架构师为什么要带团队

有人说架构师明明只需要做架构,干嘛要扯出来带团队,带团队不是项目经理或者CTO之类的管理人员干的事情吗? 其实这个是一个误区,架构师其实是一个全栈的特殊人物,应该项目开发的所有的环节和角色都有深入了解,尤其是带过团队对你的帮助会更大.那种只做架构,而且仅会做架构的架构师,是大公司畸形的产物,在我看来,不太接地气.大公司人员体系庞大,分工明确而且细致,技术只是负责技术就好了,管理自然有专门的管理人员来做.我简单列举一下架构师带团队的优势: 架构设计时会从整个项目的角度考虑 开发人员使用更方便 测试

架构师速成-架构体系

经过这段时间的反思和整理,终于对架构有了一个较为明确的理解.架构是产品从无到有以及慢慢壮大过程中所需要的全部技术体系总称,架构过程: 配置.编码.测试.运维.监控分析.安全.运营等一系列技术体系的选型.取舍 技术选型基础上进行规划.设计.实现.迭代.制定相关规范 相关技术及规范运用到产品开发的整个过程中,并在产品迭代过程中对架构进行迭代优化 架构不止包含技术的框架,比如有人用了spring就觉得我已经是架构师了,其实架构并不是这么简单.我们以做一个新浪微博类似产品为例,现实应该是这样的: 产品初

从零开始学架构(一):架构师成长路径

内容摘要从架构的本质,软件工程,架构师职责,成长路径等方面,介绍什么是架构,架构流程以及架构师职责和成长规划. 本篇主题一.什么是架构二.项目中的角色三.架构师职责和工作内容四.架构工作流五.架构师成长路径六.架构能力模型七.扩展知识八.本章总结 一.什么是架构架构是系统的蓝图,描述了系统的结构和关键决策.包含系统的功能和非功能性需求,如何实现的,系统与子系统是如何划分的,系统之间如何通信的,系统功能如何设计的和交互的.包含重要的架构决策,系统组成,功能设计,技术选型,成本分析等架构的基础是设计

.NET 高级架构师0003 架构师之路(2)---架构师的职责

2 架构师的职责 近来看到CSDN上有个CTO俱乐部,里面聊得是不亦乐乎.我怀着无比崇敬的态度,拜读了一下牛人们的发言.里面有个哥们发起一个话题:"CTO, 你多久没有写程序了?".有人回答:"不写代码的CTO,属于......这公司问题大了!".看到这里,我就赶紧撤了,怕忍不住反驳几句,反而遭到牛人们的群殴.试想,一个上点规模的IT公司,还得靠CTO来写程序的话,那是不是才叫问题大了呢.当然,我没有做过CTO,所以我有我的不同看法,而且还愿意表达出来,无知者无畏.

一个架构师谈什么是架构以及怎么成为一个架构师

新年新事,来点轻松的话题.我们调剂一下后再继续讲CAS SSO单点登录吧因为后面的内容全部和代码有关,大家会觉得枯燥.所以今天我们先来点"番外篇",讲讲什么是架构师,什么是架构这个永恒的话题吧.此篇源出自我在公司内部写的一个PPT,它是用于在公司内部向广大技术人员做普及用的一个资料,而CSDN这边的编辑不支持图文混排的效果,因此一些章节我就直接截取自我的PPT里的内容了,这样可能对大家在阅读上会显得更加生动和活泼一些吧. 架构的定义 先来看看软件架构的普遍定义吧. 一个程序和计算系统软

向架构师进军--->系统架构设计基础知识

假设你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",增加这个PM.架构师的大家庭 在解说系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师和架构设计等相关的概念以及关系.这是系统架构设计的基础,仅仅有具备了此方面的知识之后,我们才干进一步了解架构师在软件开发过程中扮演的角色,架构师怎样编写架构文档来满足不同利益相关者的需求等相关内容. 如今我们通过定义的概念来了解架构设计中的一些相关术语. 架构:架构是体如今它的组件中的一个系统的基本组织.它们

关于架构优化和设计,架构师必须知道的事情(转)

概述 这篇译文最早发布在infoQ下面的一个微信公众号:"聊聊架构"上,想着我在园子几乎沉寂了接近两年之久,于是借机复活.哈哈哈,这是一篇关于架构的译文,会介绍比较多的一些工具.以及框架,给对架构感兴趣的同学一个知识扩充. 近几年来随着互联网的飞速发展,新的架构实践方式不断涌现,但是有一件事情是永恒不变的,那就是-"架构之道":关于如何设计出灵活.高可用性以及能够快速适应变化的系统架构,我们依旧还有很大的发挥空间.本文会介绍关于如何构建前沿的.易维护的.安全的架构的

架构师之路--谈架构师的基本素养和[干货]日志处理

由于前两篇文章的关系,最近收到很多朋友的反馈和私信,谈如何成长为一个架构师的问题.在这之前我很少有时间去考虑这个问题,因为我总有做不完的事儿:看不完的书,解决不完的问题,干不完的活儿……  不是我干活儿慢,实际情况恰恰相反.但是我总是能给自己找很多的事情.我的桌面上有好几个txt,里面记录着各个方面要做的事情,看书过程中发现的问题等等.去年有一段时间很闲,我每天干着公司里的活儿,自己创着业,一天还要写一两篇专利,还是感觉很闲.其实就是想的少,做的不够细.而一个人能给自己找到多少要做的事情才是一个