分布式与云计算基础(中科大课堂笔记)
大多数课程都是站在使用的角度来讲分布式系统如何工作和完成任务,本课程是站在系统设计方面来看,分布式系统是怎样实现,要考虑哪些问题。对我来说受益匪浅,故作为整理。
分布式系统是什么:1.由多个独立的计算机连接在一起的一个系统。必须是多个独立的计算机而不是多核心的单个计算机。2.在用户眼里感觉是单个系统,即透明性。分布式系统想要实现的目标就是将多台电脑的性能融汇成一起无差别来使用。
分布式系统要实现多种透明性,下表说明了常见的几种透明性。
在分布式系统中,可扩展性/伸缩性是考虑的重要性能之一,在任何中心化的系统中,当规模扩大,都会出现问题,难以实现。所以要考虑去中心化的系统。对于去中心化的系统:
·任何一个机器都没有全局性信息,这样的任何决策都不能讲是最优的,都是在其已有的信息上面做决策。P2P还有路由选择协议都是在这个大规模范围下做局部决策的例子。
·基于本地信息做决策,因为即使联网传输也无法获得全局信息,不如本地最快,应该是这样理解。
·错误是不可避免的 ,所以要考虑各种容错机制,很简单的任务,一旦放到分布式系统中,就要考虑各种失败情况,问题便变得复杂。
·没有统一的全局时钟。全局同步时钟可以做,但是会涉及到大量的计算机间通讯,而CPU运转速度是很快的,大量的通讯必然导致性能的下降,所以能不实现全局时钟尽量不去实现全局时钟。
成熟的去中心化分布式系统参考学习:
分布式系统中有很多常见的错误需要设计的时候去加以考虑:
分布式系统大致可以分为三类:
第一类为分布式计算系统:为了进行高效计算,多台计算机集群并行计算
传统的方式一般都是统一的节点群,然后统一的管理结点进行管理。
接下来发展有网格计算(Grid Computing):计算的结点由局域的几十台机器可以扩展到广域的成百上千台。(是云计算的前身)
第二类为分布式信息系统:以处理信息、信息交换为主,不需要计算机有过高的计算能力。分布式信息系统设计中主要考虑对信息的屏蔽,就是屏蔽底层的通讯实现上层应用的端到端数据交互。也就是我们熟知的
第三类为分布式普适系统(我们常见的物联网IOT)基本属于下一代分布式系统,比较特殊,涉及到组网等概念。
讨论一下分布式系统传输过程中常见的at least once 还是 at most once 问题,因为用time out来判断是否传输成功,如果失败的时候无法判断是传送过程中出问题还是返回过程中出问题,所以只能是选择失败的时候重传或者不重传。如果选择不重传,这样假定了返回路径丢失,服务器已经收到数据。但这样如果是传输过程出问题,那么服务器没有收到数据,所以有可能出现数据丢失,不丢失也最多传了一份数据,这时就是 at most once;如果假定是传输过程出现问题,而服务器没有收到数据,这样time out之后重传数据。但这可能是返回路径出问题,服务器已经收到数据,这样会因为重传而收到多份数据,这就是 at least once。我们会根据不同的应用场景决定选择哪种情形,比如TCP有超时重传,则是at least once,大数据kafka中也有决定哪种情形的策略。
接下来介绍到了幂等性的概念,老师说幂等性是指允许多次传输重复的应用。在网上深入查了一下,幂等性是数学中的一个概念,表达的是N次变换与1次变换的结果相同。分布式系统中的幂等性指的就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了错误的结果。最直观的例子就是支付的时候,点击支付时,因为网络或其他原因导致异常,但是钱已经扣掉了,还没来得及返回给用户,此时用户又点击了支付,此时发生了二次扣费。我的理解幂等性说白了就是数据重复时的去重操作,kafka是用全局ID实现事务来保证幂等性的。在非幂等性应用中是不允许重复的,或者是没法对其进行幂等性处理的,此时就必须使用at most once 如果出错在通过检查数据、回滚等操作做后续的处理(处理比较麻烦、回滚事务费时间)。
接下来是架构部分:
第一部分包括了一些常用的架构模式
第二部分是分布式系统架构
这块最重点的部分是非中心化的分布式架构,最典型的就是P2P
p2p最开始由Napster 发明(一款听歌软件),其最开始架构如图
有一部分服务器作为中心注册服务器保存资源与其映射等目录信息。(只起索引形式不存储数据,避免服务端压力)
但是Napster还没有避免集中服务器,再被告侵权败诉之后倒闭。接下来介绍更完善的Gnutella(电驴)。
电驴设计之处就考虑到了有中央服务器的弊端
每个节点都是等同的,但是这样面临了不知道从哪个节点获取数据(有中央集群的话可以统一去中央集群获取数据。)就用ping和返回的pong进行网络发现和探查。(有点像路由的形式,有TTL和本地表缓存)里面有机制去控制避免网络风暴的发生。由于要周期性洪泛的探查,系统效率比较低。
上述是无结构的P2P(节点间无特定的数据结构),存在着很多问题,之后尝试有结构的P2P(cord)。还有混合式P2P(BitTorrent)。
第三部分 架构和中间件。
中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。
第四部分 分布式系统自我管理。减少人为参与。自我配置,错误发现,自动优化等等(云计算需要)