分布式系统-1-概述

引言

随着互联网的发展和业务的复杂度提升,越来越多的应用开始使用微服务架构,因此对于学习分布式基础知识非常有必要。因为我们平时做开发可以熟练的使用工具,但是有时候不知道其背后的原理会让人很不爽。

提到分布式系统,可能很多人就会觉得那是很多机器,当然这个没错,但是我们不应该以机器的数量来分辨是不是分布式系统,当然多机器肯定是分布式,但是单机就一定不是分布式系统吗?答案肯定是不一定,在NancyA.Lynch的《分布式算法》一书中,都是用抽象为”进程”理解的,如果我们用机器来理解,假设公司分配的机器是8核16G,那你肯定不会只部署一个服务,肯定会部署多个服务,这些服务之间可能相互调用,那么它们就是一个分布式系统。

分布式系统
分布式系统特点
  • 处理器数目未知
  • 不确定网络拓扑
  • 独立输入
  • 多个程序同时运行,开始时间不一样,处理器速度不一样
  • 处理器的不确定性
  • 不确定消息传递需要的时间
  • 不确定消息顺序
  • 机器和通信可能故障
分布式系统关键问题
  • IPC(进程间通信):分布式是多进程系统,因此进程之间需要交换信息,进程可能在不同的硬件设备上,因此进程间通信可能需要网络通信,为了解决进程间通信的方便,诞生了很多RPC框架,RPC即远程过程调用,它简化了进程间通信的编程复杂性,提供了像调用本地方法(函数调用)一样调用远程方法,使开发者不需要纠结进程间通信的具体实现,常用的RPC框架
    • gRPC:它的Java实现的底层网络库是基于Netty开发而来
    • Dubbo:阿里提供的RPC框架,大家应该很熟悉
    • Feign:这个更常用,它是spring-cloud集成组件,但是有人可能觉得它不属于RPC框架原因是它的底层通信是基于HTTP协议实现的,但是RPC并没有说明其通信协议必须是TCP,因此我认为Feign是一个RPC框架
  • 时序模型:在单进程的时候,因为其在一台物理机上,因此它的时钟是单一的,进程接收的请求都是可排序的,因此只要为请求打上时间戳就知道请求的先后顺序。但是在分布式系统因为进程可能分布在不同的物理机上,而不同物理机上时间很难保持一致,哪怕是当时一致,之后也很难做到一致,这样在分布式环境中要标识两个不同进程的操作先后顺序就变得困难,不过在前人的研究下,也诞生了很多优秀的解决方案,其中包括著名的Lamport的逻辑时钟
  • 故障模型:越是复杂精妙的系统,越是容易出错。分布式系统中常见的故障的进程停止故障,Byzantine故障,通信故
    • 进程停止故障:该类故障表现为服务不可用
    • Byzantine故障:这类故障是一个棘手的故障类型,服务并没有下线,如果我们进程抽象为一个I/O自动机,自动机的状态根据输入值一定规则转换,然后生成输出。那么Byzantine故障表现为其状态可以自己任意转换,并且可以任意生成输出结果
    • 通信故障:表现为消息丢失和消息重复
  • 一致性问题:这个问题是分布式系统中很重要的一个问题,相关一致性算法如Paxos,比Paxos更简单的raft等。包括分布式事务,后续会详细介绍
分布式系统模型分类
  • 同步网络模型:同步网络模型特征(这里的同步和io的同步不是一个概念,从下边特征可以看出这样的网络是非常严格的,实际环境很少有这样的网络),更直观的描述就是同步网络模型有轮的概念,进程间通信和状态转换都会在一轮中完成

    • 节点时钟漂移(时钟硬件并不是百分之百准确,可能因环境导致快了或慢了)有上限
    • 网络传输时间有上限
    • 所有节点计算速度一样
  • 异步共享存储器模型:异步模型和同步模型的区别在于异步模型没有同步模型的轮的概念,进程间通信不能保证在固定时间范围内完成。异步共享存储器模型只的是,分布式进程通过共享内存变量来完成进程间通信,一个简单的示意图,蓝色方块代表共享变量

    在这里插入图片描述

  • 异步网络模型:和异步共享存储器模型不同的是异步网络模型进程间通信通过网络,和同步网络相比,异步网络没有同步轮的概念,消息可以在任意时间内到达,处理器可以以任意速度运行。异步网络模型的关键问题如下

    • 消息丢失
    • 消息重复(同步网络不存在该问题)
    • 依然有节点停止故障和Byzantine故障
  • 部分同步模型:基于时序假设的模型,相比异步模型,对系统做出一些假设,比如假设处理器能够访问实际时间或者近似时间,或者假设消息发送在已知的上下限之间,因此,看起来部分同步模型比异步模型少了一些不确定性。但是,时序会引发更多其他的问题,因为在这种模型下算法的正确性取决于时序的假设

小结

想到什么写什么,很多地方写的很简略,只是想描述一下分布式系统大概有哪些关键性问题,后续文章会慢慢详细介绍各个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值