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

时间:2021-07-31
本文章向大家介绍多线程与分布式 三、分布式基础,主要包括多线程与分布式 三、分布式基础使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

什么是分布式?

权威定义:

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

分布式的作用

实际工作中的痛点

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

单体应用的问题

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

分布式的好处

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

分布式和单体结构的对比

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

CAP定理

CAP

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

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

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

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

CAP怎么选

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

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

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

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

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

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

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

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

集群和分布式的区别

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

集群和微服务的区别

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

微服务和分布式的区别

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

分布式的拆分

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

水平拆分

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

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

垂直拆分

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

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

原文地址:https://www.cnblogs.com/greycdoer0/p/15085173.html