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

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团队博客

转载于:https://www.cnblogs.com/top100j/p/4712606.html

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

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

    有人说架构师明明只需要做架构,干嘛要扯出来带团队,带团队不是项目经理或者CTO之类的管理人员干的事情吗? 其实这个是一个误区,架构师其实是一个全栈的特殊人物,应该项目开发的所有的环节和角色都有深入了解 ...

  2. 架构师速成之路 架构师速成-如何高效编程 for java

    赵云大喝一声,挺枪骤马杀入重围,左冲右突,如入无人之境.那枪浑身上下,若舞梨花:遍体纷纷,如飘瑞雪. 赵云是所有历史人物中我最喜欢的一个,如果放到现代,他走了it的道路,一定可以成为一个编程高手.为什 ...

  3. 架构师速成4.6-软技能和硬技能

    架构师速成4.6-软技能和硬技能 在投职和面试的过程中.雇主一般会查看求职者的两种技能:硬技能与软技能. 硬技能就是可以通过培训或可以easy量化的技能.硬技能包含以下这些: 熟练的外语能力 文凭或证 ...

  4. python架构师是做什么的_【图片】架构师速成-一个10多年架构师的总结_架构师吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 架构师速成5-小学 很高兴你很快的进入了小学,小学的东西会让你更加的耀眼. 阶段: 小学 学时:2-3个月 升学标准 能自己制定目标及计划,get thi ...

  5. dubbo协议_阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud

    微服务架构 什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发.部署.扩展.服务于服务之间通过注入RESTful ...

  6. 一个架构师谈什么是架构以及怎么成为一个架构师--转载

    原文地址:http://blog.csdn.net/lifetragedy/article/details/43925857 新年新事,来点轻松的话题.我们调剂一下后再继续讲CAS SSO单点登录吧因 ...

  7. 【Mca架构】java互联网高级架构师

    本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员 ...

  8. 微服务架构 接口交互问题_架构师的故事:设计微服务架构

    架构师在软件项目中的作用是提供待解决问题的工作模型.架构师的工作是提供脚手架,开发人员将根据这些脚手架构建他们的代码,使应用程序所有部件都组合在一起. 在构建微服务架构时,项目的架构师主要关注以下3个 ...

  9. .NET 云原生架构师训练营(系统架构)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第176篇原创文章 ...

最新文章

  1. 简单实用的php分页类(多种分页方式)
  2. 4_Shell语言———脚本概述
  3. 服务器无效响应状态码12029,使用wininet发送http请求时出现12029无法与服务器建立连接...
  4. 【学习笔记】Tableau安装与界面介绍
  5. Matlab学习笔记:画图多重设置
  6. LINUX修改文件权限 学习
  7. 微信支付 - 构建商户订单
  8. MySQL高级理论-MVCC提交查询相关(版本链)
  9. python接口自动化(一)--什么是接口、接口优势、类型(详解)
  10. C#4.0 命名参数可选参数
  11. 力扣59.螺旋矩阵II(JavaScript)
  12. 第2章[2.7] Ext JS数据模型与数据封装
  13. C语言ftell()函数
  14. 华为手机使用应用沙盒动态修改imsi参数
  15. Python游戏编程入门(有目录及案例图片)-通过简单游戏学习python
  16. 从二维到三维,可见Web3D技术的重要性,让线上3D产品展示所见即所得
  17. JDK的下载与安装(详细版)
  18. VSCode快速生成HTML基础模板--输入!一键快捷生成--无法自动生成的解决办法
  19. godoc使用方法介绍
  20. 基于yolov5轻量级的学生上课姿势检测识别分析系统

热门文章

  1. 交换与路由技术课程期末上机测试题目一
  2. java里面快速排序_Java:快速排序
  3. linux shell 输出到数据库,linux shell 入门
  4. jpa oracle mysql,oracle+jpa和mysql+mybatis的混合多数据源配置例子
  5. vuepress侧边栏配置_vuepress的侧边栏怎么动态生成
  6. 父爱动画代码python_pygame用blit()实现动画效果的示例代码
  7. python图片的比例缩放、剪裁和下采样
  8. matlab simulink 求解连续微分系统 混沌系统
  9. python中的抽象含义_Python中下划线的5种含义你都知道吗?
  10. python 作用with_即使__init__方法有效,Python中的With语句仍返...