第12章 CAP理论
12.1 CAP理论的误解 C:一致性。如事务一致性,多副本一致性。A:可达性。客户端超时,也是不可达。P:网络分区。系统一旦变成分布式,有多个节点,就可能存在超时或者网络中断。在大规模分布式系统场景下,P(网络分区)往往是一个必然的存在,只能在C和A之间权衡。在实际中,大部分都是AP或CP的系统,而很少有CA的系统。
CP的系统追求强一致性,比如zookeeper,但牺牲了一定的性能;AP的系统追求高可用,牺牲了一定的一致性,比如数据库的主从复制,kafka的主从复制。为什么很少有CA的系统?因为要实现A(高可用),必然需要冗余,有了冗余就可能存在网络分区(P)。比如传统的关系型数据库实现了事务ACID,也就是强
一致性(C),但是单机版没有A,也没有P。要实现A,需要加从库,但也只能解决A的问题,却无法保证强一致性,转而寻求最终一致性。通过分析可以看出,P并不是通过牺牲A或者C换取的,而是需要通过网络基础设施的稳定性来保证。12.2 现实世界不存在“强一致性”(PACELC理论) 正因为 "延迟" 的必然存在,CAP的扩展理论 PACELC 应用而生。其中的P,A,C 没有变化,只是引入了 Latency(延迟)因素,E指的是 Else。当P出现的时候,只能在A和C之间做权衡,牺牲A换取C 或者 牺牲C换取A(也就是CAP理论)。否则,当P没有出现(网络正常),需要在L和C之间做权衡。12.3 典型案例:分布式锁 举例说明分布式锁有多难:方案1:基于Zookeeper实现最常见的分布式锁是基于zookeeper来实现的,利用zookeeper的"瞬时节点"的特性。每次加锁都是创建一个瞬时节点,释放锁则删除瞬时节点。因为zookeeper和客户端之间通过心跳检测客户端是否宕机,如果宕机,则zookeeper检测到后自动删除瞬时节点,从而释放锁。zookeeper自身用zab协议保证高可用和强一致性,但该方案有2个问题:1.性能问题。在高并发下qps不够。2.因为用心跳检测客户端是否宕机,当网络超时或客户端发生full GC的时候会产生误判。本来客户端没有宕机,却误判为宕机了,锁被释放,然后被另外一个进程拿到了,从而导致两个进程拿到同一把锁。这也就是通常说的"脑裂"。方案2:基于Redis实现redis的性能比zookeeper好,所以通常用来实现分布式锁,但问题也很明显。问题1:redis没有zookeeper强一致性的zab协议,redis主从之间采用的是异步复制,如果主宕机,则切换到从,会导致部分锁的数据丢失,也就是多个进程会拿到同一把锁。问题2:客户端和redis之间没有心跳,如果客户端在拿到锁之后,释放锁之前宕机,锁将永远不能释放。要解决这个问题,是给锁加一个超时时间,过了一段时间后,锁将无条件释放。但这又带来了第三个问题。问题3:如果客户端不是真的宕机,而只是因为full GC发生了阻塞,或业务逻辑的执行时间超出了锁的超时时间,则锁被无条件释放,也会导致两个进程拿到同一把锁。可见,要实现一个高可用,通用的,强一致,高并发的分布式锁很难。也正是因为如此,在实际业务场景中,应尽量避免用分布式锁,或用串行化,弱一致性
等策略。即使要用分布式锁,往往也是针对特定的业务场景,对问题有兜底方案。

12.软件架构设计:大型网站技术架构与业务架构融合之道 --- CAP理论相关推荐

  1. 软件架构设计 大型网站技术架构与业务架构融合之道

    前言 架构是一种综合能力,而不是某一方面的技能.也正因为如此,本书提供的是一个全面的解决方案.方法论.成体系的设计思维.因此,本书将从基础技术谈起,再到高层技术.再到业务.管理,提供一个架构能力的全局 ...

  2. 读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》

    大家好呀,我是小菜~ 帅哥美女,知道你们时间宝贵,那么就由小菜为你读好一本书,读一本好书,取其精华,与你共享~! 本文主要分享 <软件架构设计:大型网站技术架构与业务架构融合之道> 如有需 ...

  3. Web高级征程:《大型网站技术架构》读书笔记系列

    来源:http://www.cnblogs.com/edisonchou/p/3773828.html 一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术 ...

  4. 大型网站系统的特点和架构设计

    分布式架构 阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁 优知学院」淘宝技术架构的前世今生(上) 优知学院」淘宝架构的前世今生(下) 揭秘:一位亲历者眼中的淘宝技术架构发展之路 淘宝发展历 ...

  5. 读书笔记-大型网站技术架构

    1. 大型网站架构演化 1.1 大型网站软件系统的特点 大型互联网应用系统的特点 -高并发,大流量 -高可用 -海量数据 -用户分布广泛,网络情况复杂 -完全环境恶劣 -需求快速变更,发布频繁 -渐进 ...

  6. 大型网站的演化之路——读《大型网站技术架构》

    大型网站的演化之路--读<大型网站技术架构> ____ author:姚毛毛的博客 & 妖生 01 大型网站or软件有什么特点? 高并发.大流量,微信都日活10亿了 7×24的高可 ...

  7. 大型网站技术架构核心原理剖析,文末附知识图谱下载

    什么是软件架构 维基百科定义:软件架构是指有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计. 软件架构5大要素: 性能 可用性 伸缩性 扩展性 安全性 可以通过考察这5大要素来衡量 ...

  8. 大型网站技术架构演进

    文章目录 系列文章目录 前言 1 构建 型网站:分布式改造.. ... .- .. .. .-. ..... ... .. .. .. .. .. .. .. .. .. .. .. 1 1.1 为什 ...

  9. Web信息架构——设计大型网站(第3版)

    Web信息架构--设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔)  Louis Rosenfeld(路易斯·罗森菲尔德) ...

  10. 大型网站技术架构:核心原理与案例分析pdf

    下载地址:网盘下载 编辑推荐 编辑 本书作者是阿里巴巴网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历 ...

最新文章

  1. “用手机就能访问卫星” 软件定义升级卫星智能
  2. maven 编译mybatis项目时xml文件无法编译到target目录下的解决方法
  3. 运维利器:万能的 strace
  4. java 超时异常_Java如何实现任务超时处理
  5. json string 格式_python中json函数的用法
  6. community 计算模块度_聚苯乙烯泡沫模块可以用在哪些建筑上?
  7. javascript 理解对象--- 定义多个属性和读取属性的特性
  8. 最良心不过AMD AM4接口下一代可继续用
  9. 今天写出一个十分弱智的bug!
  10. 本地yum源安装teamviewer
  11. 三线压力传感器原理_常见压力传感器原理及其接头
  12. mysql数据库druid密码加密_Spring+mysql+druid对数据库连接的用户名密码加密-Go语言中文社区...
  13. 三层交换机LLDP协议对 L2/L3端口,报文处理实验
  14. 连接服务器显示用户账户无效,发现MT4真实账户无效该怎么办?
  15. 解析智能推荐系统开发中十大关键要素
  16. 这么炫酷的轮播图·你想学吗?
  17. 字符串常用方法(1)
  18. Shiro的认证原理(Subject#login的背后故事)
  19. 亚马逊AWS云架构支柱与数字化转型
  20. html国内旅游计划,Web实验一 国内旅游界面

热门文章

  1. failed to load resource the server responded with a status of 500 (internal server error)
  2. c/c++ linux 进程 fork wait函数
  3. ExtJs gridPanel Column 时间格式化
  4. 不要奢望.NET能够跨平台
  5. 苹果谷歌双双被曝,你的手机正在窃听你的生活
  6. 如何用R语言做词云图,以某部网络小说为例
  7. 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)
  8. Linux/Unix 中 wheel 组的来源
  9. bzoj 1396: 识别子串 bzoj 2865: 字符串识别【后缀数组+线段树】
  10. SQL知识点脑图(一张图总结SQL)