分布式理论笔记(一)

  1. 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间过消息传递进行通信和协调的系统

Tip:分布式和集群的区别

集群:多个人在一起做同样的事
分布式:多个人在一起做不同的事

分布式系统的特点

分布性、对等性、并发性、缺乏全局时钟、故障总会发生

分布式系统的演变

  1. 阶段一:单应用架构

    把所有软件和应用都部署在一台机器上,这样就完成一个简单系统的搭建,这个时候讲究的是效率。

  2. 阶段二:应用服务器与数据库分离

    增加机器的主要目的是将web服务器和数据库服务器拆分,这样不仅提高了单机的负载能力,也提高了容灾能力。

  3. 阶段三:应用服务器集群

    通过应用服务器集群将用户请求分流到各个服务器中,从而继续增加负载能力。此时多台应用服务器之间没有直接的交互,他们都是依赖数据库各自对外提供服务。

  4. 阶段四:应用服务器负载均衡

    解决了请求的负载均衡问题,可以采用Nginx进行轮询或 ip_hash或设置权重进行请求。

  5. 阶段五:数据库读写分离

    数据库请求分别负载到两台数据库服务器上,那么一定会造成数据库不统一的问题,所以我们一般优先考虑读写分离的方式。

  6. 阶段六:添加索引和搜索引擎缓解读库压力

    使用搜索引擎能够大大提高我们的查询速度,但是同时也会带来一些附加的问题,比如维护索引的构建

  7. 阶段七:添加缓存机制缓解数据库的压力

    对于一些热点数据,没必要每次都从数据库读取,我们可以使用缓存技术,比如memcache、redis来作为我们应用层的缓存

  8. 阶段八:数据库水平/垂直拆分

    水平拆分:把数据库中不同业务数据拆分到不同的数据库(秒杀业务有自己的一套数据表,普通业务有自己的数据表)
    垂直拆分:把同一个表中的数据拆分到两个甚至多个的数据库中,水平拆分的原因是某些业务数据量已经达到了单个数据库
    的瓶颈,这时可以采取将表拆分到多个数据库中。

  9. 阶段九:应用拆分

    将应用拆分,按照领域模型将用户、商品、交易拆分成多个子系统。(可能会有一些相同代码,如用户操作)

  10. 阶段十:服务化

    相同的操作一定是要抽象出来,通过走服务化路线的方式来解决。

演变过程学习参考

分布式系统的问题

  1. 通信异常:分布式系统无法顺利进行一次网络通信
  2. 网络分区:分布式系统出现局部小集群
  3. 节点故障:组成分布式的服务器节点出现宕机或“僵死”现象,每个节点都有可能发生
  4. 三态:分布式系统每一次请求与响应存在特有的“三态”概念,即成功、失败和超时。

分布式理论

一致性

分布式一致性,指的是数据在多份副本中存储时,各副本的数据是一致的。因为同步的过程会有延迟。

一致性分类:

  1. 强一致性(系统写入什么,读出来的也会是什么,用户体验好,单强一致性很难实现)
  2. 弱一致性(系统写入成功后,不承诺可以读到写入的值,也不承诺多久数据能达到一致)
  • 读写一致性:用户读取自己写入的结果的一致性,保证用户永远能够第一时间看到自己更新的内容。比如:我们发朋友圈,朋友圈内容是不是被朋友看见不重要,但一定要显示在自己的列表上。
  • 单调读一致性:本次读到的数据不能比上次读到的旧。(使用Hash算法同一用户永远映射到同一机器上)
  • 因果一致性:如果节点A在更新数据后通知节点B,节点B之后对该数据的访问和修改都基于A更新后的值,同时,和A节点无因果关系的节点C的数据访问没有这样的限制。
    在这里插入图片描述
  • 最终一致性:不考虑所有中间状态的影响,只保证当没有新的更新之后,经过一段时间后,系统内所所有数据是正确的。最长车高度上保证系统并发能力。
    在这里插入图片描述

CAP定理

CAP定理

2000 年7月的时候,加州大学伯克利分校的Eric Brewer 教授提出了 CAP 猜想,2年后,被 来自于麻省理工的Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性,从此,CAP 定理正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。
这三个基本需求,最多只能同时满足其中2个

选项 描述
C一致性
(Consistency)
分布式系统当中的一致性指的是所有节点的数据一致,或者说是所有副本的数据一致
A可用性
(Availability)
Reads and writes always succeed. 也就是说系统一直可用,而且服务一直保持正常
P分区容错性
(Partition tolerance)
系统在遇到一些节点或者网络分区故障的时候,仍然能够提供满足一致性和可用性的服务

猜你喜欢

转载自blog.csdn.net/u013795102/article/details/113483453