多线程与分布式 三、分布式基础

什么是分布式?

权威定义:

利用物理架构形成多个自治的处理元素,不共享内存,但是通过发送信息合作。——Leslie Lamport

分布式的作用

实际工作中的痛点

  • 工程臃肿
  • 测试、上线繁琐
  • 开发效率低

单体应用的问题

  • 应用代码耦合严重,功能扩展难
  • 新需求开发交互周期长,测试工作量大
  • 新加入的开发同事需要很长时间才能熟悉系统
  • 升级维护也很困难(改动任何一点地方都要升级整个系统)
  • 系统性能提升艰难,可用性低,不稳定

分布式的好处

  • 增大系统容量
  • 加强系统可用
  • 因为模块化,所以系统模块重用度更高
  • 因为软件服务模块被拆分,开发和发布速度可以并行并变得更快
  • 系统扩展性更高
  • 团队协作流程也会得到改善
  • 技术升级

分布式和单体结构的对比

传统单体架构 分布式架构
新人的学习成本 业务逻辑成本高 架构逻辑成本高
部署、运维 容易 发布频繁、发布顺序复杂、运维难
隔离性 一损俱损,殃及鱼池 故障影响范围小
架构设计 难度低 难度指数级上升
系统性能 响应快、吞度量小 响应慢、吞吐量大
测试成本 低 很高
技术多样性 技术单一且封闭 技术多样且开放
系统扩展性 扩展性差 扩展性很好
系统管理成本 成本低 成本高

CAP定理

CAP

  • C(Consistency ,一致性):读操作是否总能读到前一个写操作的结果

  • A(Availability ,可用性):非故障节点应该在合理的时间内作出合理的响应

  • P(Partition tolerance ,分区容错性):当出现网络分区现象后,系统能够继续运行,即网络断开,不能互相通信时的情况

  • 三者最多只能选其二,不可兼得

CAP怎么选

什么时候可用性高于一致性?

  • 有一个网站,一更新没必要所有人都同步,可以稍微延迟一点,但是要求无论何时访问网站,都能看得到

什么场合一致性高于可用性?

  • 支付场合,可以允许暂时不可用,但是决不允许不一致

集群: 是对整个系统复制多份,部署到不同的服务器上,用于分散压力。

分布式: 是把系统拆分成子系统,部署到不同的服务器上,用于分散能力。

实际项目中通常是分布式+集群部署。

集群、分布式、微服务的区别

集群和分布式的区别

分布式:一个业务拆分多个子业务,部署在不同的服务器上(模块中相互通信)
集群:同一个业务,部署在多个服务器上(一个单体服务部署到多台机器上,每个集群都是一套代码,通过负载均衡去调度。不同机器可以不通信。就像每个店各有一个厨师)

集群和微服务的区别

集群:分散压力(把压力通过复制机器的方式分散出去)微服务:分散能力(把能力拆分)

微服务和分布式的区别

微服务是架构设计方式,按逻辑角度对架构进行拆分,是逻辑架构。把大服务拆除小服务,独立部署,服务间通过通信进行调用,每个服务独立开发测试
分布式是系统部署的方式,机器和机器间会遇到哪些通信上的问题,如何容错,考虑物理架构
先做逻辑架构,再做物理架构

分布式的拆分

分布式的核心就一个字:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,那就算是分布式。有两种拆分方式:水平拆分,或垂直拆分。

水平拆分

  • 将一个项目根据“三层架构”拆分成表示层(JSP+Servlet) 、业务逻辑层(Service) 和数据访问层(DAO),然后再分开部署:把表示层部署在服务器A上,把Service和DAO层部署在服务器B上,然后服务器A和服务器B之间通过dubbo等RPC进行进行整合。

  • 这种不是微服务的架构设计,但是使用的分布式部署。

垂直拆分

  • 将项目拆分成几个模块,例如用户模块,订单模块等,分别部署到各个服务器上,

  • 这种属于微服务的架构设计,并且使用分布式部署。

posted @ 2021-07-31 20:40  Jerome27  阅读(215)  评论(0)    收藏  举报