分布式基础
一、 分布式基本概念介绍
在这里插入图片描述1. 概念:
利用物理架构形成多个自治的处理元素,不共享主内存,但是通过发送消息合作
2. 分布式的作用:
实际工作中的痛点:
- 工程臃肿
- 测试上线繁琐
- 开发效率低
单体应用中的问题:
- 应用代码耦合严重,功能扩展难
- 新需求开发周期长,测试工作量大
- 新加入的开发同事需要很长时间才能熟悉需求
- 系统升级很困难(任何改动点都要升级整个系统)
- 系统性能提升艰难,不稳定
分布式的好处:
- 增加系统容量
- 加强系统可用
- 因为模块化,所以系统重用度更高
- 因为软件模块被拆分,开发和发布可以并行,变得更快
- 系统扩展性更高
- 团队协作流程也得到改善
- 技术升级
3、分布式和单体结构的对比
在这里插入图片描述
在这里插入图片描述
4、CAP定理
在这里插入图片描述
CAP定理:分布式不可能同时满足3个条件,最多三选二。
作用:出现网络问题时候的对策和解决方案
C:Consistency,一致性:读操作是否总能读到前一个写操作的结果(数据被改变后能否感知得到)
比如client给G1发消息要求写入,然后G1改完以后告诉我我改了,但是G2没有更新成功,结果不一致
如何让他们保持一致,见图
在这里插入图片描述
A:Availability,可用性:非故障节点应该在合理的时间内做出合理的响应(不是错误或超市的响应),但是可能不是最新的数据
比如像服务端要响应结果,返回请等待之类的回复,代表不具备可用性
P:Partion tolerance,分区容错性:当出现网络分区现象后,系统能够继续运行(网络错误),一般是无法避免的,要么是CP,要么是AP
比如我们一个服务器在中国,一个在美国,如果电缆段了导致出错,G1想发消息给G2,但是G2收不到
例子:
火车票:火车票不能同时卖给2个人,必须保证一致性
银行转账:这个要保持可用性(转账成功),一致性上可以延迟(时间延迟)
5、CAP怎么选:
什么时候可用性高于一致性?
有一个网站,一更新没必要所有人都同步,可以稍微延迟一点,但是要求无论何时访问网站,都能看得到
什么场合一致性高于可用性?
支付场合,可以允许暂时不可用,但是决不允许不一致
适合的才是最好的
二、集群,分布式,微服务的区别
1. 集群和分布式的区别:
分布式:一个业务拆分多个子业务,部署在不同的服务器上(模块中相互通信)
集群:同一个业务,部署在多个服务器上(一个单体服务部署到多台机器上,每个集群都是一套代码,通过负载均衡去调度。不同机器可以不通信。就像每个店各有一个厨师)
2. 集群和微服务的区别:
集群:分散压力(把压力通过复制机器的方式分散出去)
微服务:分散能力(把能力拆分)
3. 微服务和分布式的区别:
微服务是架构设计方式,按逻辑角度对架构进行拆分,是逻辑架构。把大服务拆除小服务,独立部署,服务间通过通信进行调用,每个服务独立开发测试
分布式:系统部署的方式,机器和机器间会遇到哪些通信上的问题,如何容错,考虑物理架构
先做逻辑架构,再做物理架构