分布式与云计算基础(中科大课堂笔记)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分布式与云计算基础(中科⼤课堂笔记)
⼤多数课程都是站在使⽤的⾓度来讲分布式系统如何⼯作和完成任务,本课程是站在系统设计⽅⾯来看,分布式系统是怎样实现,要考虑哪些问题。
对我来说受益匪浅,故作为整理。
分布式系统是什么: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)。
第三部分架构和中间件。
中间件是介于应⽤系统和之间的⼀类软件,它使⽤系统软件所提供的基础服务(功能),衔接⽹络上应⽤系统的各个部分或不同的应⽤,能够达到资源共享、功能共享的⽬的。
第四部分分布式系统⾃我管理。
减少⼈为参与。
⾃我配置,错误发现,⾃动优化等等(云计算需要)。