美文网首页程序员码农的世界程序园
架构师进阶实战随堂笔记三

架构师进阶实战随堂笔记三

作者: 山东大葱哥 | 来源:发表于2019-05-12 10:26 被阅读148次

场景三分布式系统中的CAP原则 CAP&Base 理论介绍与案例分享

CAP理论介绍

CAP原理

  • 一致性(Consistency)
  • 可用性(Availability)
    在集群中的一部分节点故障后,集群整体是否还能响应客户端的读写请求
  • 分区容忍性(Partion-tolerance)
    分区容忍性可以理解为系统在存在网络分区的情况下仍然可以接受请求
    CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性、分区容错性这三个需求,三个要素中最多只能同时满足两点。
    Oracle系统是CA系统,没有分布式的支持
    MySQL主从同步是AP系统


    image.png

分布式数据系统

image.png

最终一致性

  • 牺牲一致性,并不是完全不管数据的一致性,否则数据是混乱的
  • 通常是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性
  • "用户感知到的一致性"的时间窗口取决于数据复制到一致状态的时间
  • 关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性
  • 经过一段时间后要求能访问到更新后的数据,则是最终一致性


    image.png

分享案例

最终一致性概念初期,很多公司接受有困难,比如银行。
因为淘宝、支付宝的快速响应是假的,行为并未真正完成前就给用户进行了响应,用户感受为速度很快,但银行的系统是等到行为真正完成才给用户响应,所以用户感受系统很慢、体验很差,银行需要的是强一致性。
微信红包案例,一点抢红包,显示成功了,但是进入零钱后,有时候会发现零钱中红包没有到账,这就是一个最终一致性的案例。红包强调的是交互过程,对零钱到账的感知会弱一些。
订单系统,你下完订单后,会急切希望在自己的订单列表中看到订单,以避免重复下单,所以这个过程用户对一致性的感知时间会很短。

  • CA系统很容易满足用户需求,单体架构


    image.png
  • 系统演进1 系统拆分
    下单系统和查询订单系统的优先级是不一样的,下单系统优先级最高,查询订单系统优先级会低一些,允许降级处理。而把这两者放在一起会因为低优先级的系统拖累高优先级系统。
    我们需要进行优化,将不同优先级的系统进行隔离。


    image.png
  • 系统演进2 存储拆分
    系统拆分后,两个系统仍然使用同一个数据库,这也会造成低优先级的系统拖累高优先级系统,我们需要对数据库也进行独立拆分


    image.png

    数据库实现主从复制,mysql的主从复制是异步的,这样用户下单后立即查询可能会因为异步原因没法查询到最新的结果,怎么处理呢?


    image.png
  • 系统演进3 同步调用
    从库的数据字段使用的少于主库的数据库字段,主从复制方式浪费存储,我们需要使用其他的实现方式,如同步写精简字段


    image.png

    我们拆分的初衷是什么?将不同优先级的系统分开,避免拖累强优先级系统,然而这种同步调用的方式又将强优先级系统与弱优先级系统耦合在一起,势必会造成拖累,所以这种方案仍然不可行。

  • 系统演进4 同步调用 不关心结果
    通过MQ实现补偿机制


    image.png
    image.png
  • 其他系统视角
    商家后台、库房系统对订单的强一致性要求会弱一些


    image.png

    问题MQ如果丢消息怎么处理?
    架构基点:
    我们所有的可用性都是基于MQ不会丢消息、MQ的消息可以及时送达,所以我们这个架构的基点就是我们信任MQ。
    如何看待补偿机制中用户感知受损的情况,后续揭秘。

(下午)

Base理论介绍

Base原理

image.png

有损设计
目的:是保证大部分用户的访问体验。
100%是绝对不存在的,99.9%三个九已经是很不错的效果了。

微信摇一摇

微信摇一摇案例,现场讲解
每分钟200*2亿次调用,都放到服务端交互不显示,我们需要将一部分行为放在客户端进行处理

小结

image.png

相关文章

  • 架构师进阶实战随堂笔记三

    场景三分布式系统中的CAP原则 CAP&Base 理论介绍与案例分享 CAP理论介绍 CAP原理 一致性(Cons...

  • 架构师进阶实战随堂笔记九

    场景九 微服务中数据存储的一致性问题 一致性数据同步与实践案例分享 数据存储 冗余 库冗余 表冗余 冗余数据同步...

  • 架构师进阶实战随堂笔记十

    场景十:分布式数据管理问题 分布式事务和分库分表方法介绍与实践经验分享 目录 分库分表 为什么分片 分库分表策略 ...

  • 架构师进阶实战随堂笔记六

    场景六:微服务架构的服务化和Spring Cloud 快速实现服务化 目录 服务化 服务化是微服务的基石-->基于...

  • 架构师进阶实战随堂笔记二

    场景二:微服务架构的高可用问题,高可用架构师设计方法与实践案例 为什么要有软件架构 每个人都可以自己完成全部工作的...

  • 架构师进阶实战随堂笔记五

    场景五:微服务中的服务划分问题 微服务拆分原则、方法与最佳实践 目录 应该怎样去拆分服务呢? 基本原则: 低耦合,...

  • 架构师进阶实战随堂笔记七

    场景七:微服务架构的服务化和Dubbo、Dubbo框架的原理讲解与案例解析 目录 Dubbo是什么 Dubbo是一...

  • 架构师进阶实战随堂笔记四

    场景四 架构选择和迭代问题--6种架构模型介绍及其对应案例解析 单体式架构 所有程序安装一个电脑(上古时代) 两层...

  • 架构师进阶实战随堂笔记一

    前言 案例:12306 架构师特质:逻辑思维、抽象能力 架构师画像:业务抽象落地 共同能力: 工程思维、抽象、落地...

  • 架构师进阶实战随堂笔记八

    场景八:大型互联网公司的服务化落地问题 服务化技术讲解与实践经验分享 RPC调用的发展路径 答疑:压测工具jmet...

网友评论

    本文标题:架构师进阶实战随堂笔记三

    本文链接:https://www.haomeiwen.com/subject/lkflwqtx.html