本博文主要介绍分布式系统的特征、应用与挑战(参考DistributedSystems Concepts and Design)
博主曾经在国内某电子商务公司的终面里面遇到了关于分布式系统的问题(因为我的简历上写明了我熟悉分布式系统),于是面试官很慈祥的问了我什么是分布式系统、cap理论、应用场景等。从面试官的言情看得出来他很不满意,博主也很是失望。只想告诫大家:一个项目并不代表你对着一个方向及其原理深度的理解,系统的学习才是王道。
什么是分布式系统
分布式系统是其组件分布在连网的计算机上,组件之间通过传递消息进行通信和动作协调的系统。
一:现在网络的泛在特性、移动和无处不在计算的出现,分布式多媒体不断增加的重要性,都是推动分布式系统发展的关键趋势。
1. 网络的泛在特性:计算机网络不出不在,互联网、移动电话网、协作网、企业网、校园网、家庭网、车内网等,所有这些,即可单独使用,又可互相结合,因为它们觉有相同的本质特征。
2. 移动和无处不在的计算:移动是一个越来越火的名词,笔记本电脑、手持设备、可穿戴智能设备、只能家电都可以被称为移动设备,无线网络的进步让越来越小的设备集成到分布式系统中,一个智能时代正在降临。
3. 分布式多媒体:访问电视广播、访问提供点播的电影资料库和音乐资料科、视频或音频会议等
二:对共享资源的期望是构造和使用分布式系统的主要动力。资源的定义是很抽象的,它描述得是能连网的计算机系统中共享的事物的范围,涉及从硬件组件(硬盘、打印机)到软件实体(文件、数据库、数据对象)。
三:当分布式计算作为一个公共设施的时候,或许云计算的时代就要来临。简而言之,某供应商把硬件、软件打包成服务提供给用户,有应用服务、存储服务、计算服务。如此,使大部分的用户免除本地数据存储和应用软件的使用。当然这个概念还很遥远,各方面政策远远不够成熟,就不多谈了。
分布式系统的特征
分布式系统有三个显著特征:并发、缺乏全局时钟、故障独立性。
一:并发:用户可以在各自的计算机上工作,在必要时共享文件等资源,而系统处理共享资源的能力会随着网络资源的增加而提高。这也是google推广使用大量的廉价PC构成分布式系统来替代昂贵的高端服务器的必要条件。所以,对共享资源的并发执行程序的协调是极其重要的主题。
二:缺乏全局时钟:分布式程序需要协作时,通常通过交互消息来协调它们的动作。然而它的准确性也是极其有限的,这是通过网络发送消息带来的直接后果。
三:故障独立性:任何计算机系统都会出现故障,如网络故障、机器故障、系统程序中断等。故障恢复设计是系统设计者的重要考量因素。
分布式系统已经无处不在
分布式系统渗透到包括金融与商业、信息社会、创意产业和娱乐、医疗保健、教育、交通与物流、科学、环境管理等行业中。其中,三个典型的案例可以让我们了解到它的存在性和重要性:Web搜索、大型多人在线游戏、金融交易。
一:Web搜索。Web搜索引擎的任务是为万维网的所有内容建立索引,其中包含上千亿的页面、上万亿的Web地址。google,它代表了计算历史上最大和最复杂的分布式系统之一。最近的数字表明Google一个月的搜索量已经超过1000亿。其中代表性三大论文是整个业界学习的典范。
二:大型多人在线游戏。它提供一种身临其境的感觉,博主一直认为游戏是最高端软件,也是入行的第一个动力。想想超大数量的用户通过互联网在一个持久的虚拟世界中交互,是一件多么神奇的事情。
三:金融交易。金融行业一直以其需求处在分布式系统技术的前沿。特别是在实时需求的领域上。它通常再用分布式基于时间的系统。其中,感兴趣数据项被称为事件,而需求就是可靠和及时的传递事件给大量对此信息感兴趣的用户。
分布式系统的挑战
一:异构性。网络、计算机硬件、操作系统、编程语言、由不同的开发者完成的软件实现都是造成异构性的主因。其中网络的异构通过互联网协议相互通信而被屏蔽;中间件的流行屏蔽的底层网络、硬件、操作系统和编程语言的异构,它为分布式应用和服务器提供了一直的计算模型,包括RPC、远程事件通知、远程SQL访问和分布式事物调用;虚拟机也是使代码到处运行的一种方法。
二:开放性。它取决于新的资源共享服务能被增加和供多种客户程序使用的程度。特征就是发布系统的关键接口,使其基于一致的通信机制,让不同提供商提供异构硬件和软件。
三:安全性。包括三个部分:机密性(防止泄露给未授权的个人)、完整性(防止被改变或被破坏)、可用性(防止对访问资源的手段的干扰)。其中有两个重要的安全问题:拒绝服务攻击和移动代码的安全性仍然没有得到圆满解决。
四:可伸缩性。顾名思义就是随着资源数量的增加和用户访问的增加,系统仍然能保持其有效性,该系统就被称为可伸缩的。其中有控制物理资源的开销、控制性能损失、防止软件资源用尽和避免性能瓶颈四大挑战。
五:故障处理。在一个分布式系统中,硬件或软件都会出现未知的故障或者不正常运行,因此故障处理是贯穿整个系统的难题。容错(设计容错机制如重传)、故障恢复(数据恢复或“回滚”保证一致性)、冗余(多条路由或者备份等技术)都是故障处理技术。
六:并发性。多个用户对同一资源的使用,要保持操作的正确性就必须在数据保持一致的基础上同步。如使用操作系统的信号量。
七:透明性。
1. 访问透明性:用相同的操作访问本地资源和远程资源(电子邮件)
2. 位置透明性:不需要知道资源的物理位置或网络位置(电子邮件、URL)
3. 并发透明性:几个进程能并发的使用共享资源而不互相干扰
4. 复制透明性:使用资源的多个实例提升可靠性和性能,而用户和程序员无需知道副本的相关信息
5. 故障透明性:屏蔽错误
6. 移动透明性:资源和客户能够在系统内移动而不受影响(移动电话)
7. 性能透明性:负载变化时,系统能够被重新配置以提高性能
8. 伸缩透明性:系统和应用能够进行扩展而不改变系统结构和应用算法
八:服务质量。影响客户和用户体验的服务质量是可靠性、安全性和性能。
这些概念虽然很抽象,且看似简单,但如果能够正确而深入的理解,将受益很多。
由于博主知识有限,如有误,请指正点评,欢迎交流