1)引言
从今天开始,我将会开始学习分布式系统的一些理论知识,全方面的重新学习分布式的各个技术点,所以选用了原版本的英文教材<<Dstributed Sysytems Concepts And Design>>作为学习的资源。在期间,我会没读完一章,及时的做一些阅读的笔记,1个是怕自己忘了,还有一个是把知识分享给大家,这也是我首次阅读全英文的书籍,还是挺吃力的,希望能坚持把长达1000页的书籍学习完把。
2)分布式系统的介绍
分布式系统是通过网络连接各个计算机,通过消息通信的方式实现沟通。有下面3个主要特征
1.并发性,当你在使用你的计算机做你的事情时,别人也在用他的电脑做他的事。
2.没有全局的时钟的概念,很显然,不同地区的时区的时间是不一样。
3.失败的独立性,当你的电脑崩溃的时候,他只会影响到你自己,其他节点上的电脑还是会继续运行的。
3)分布式系统的例子
1.Web搜索,比如米在Google上搜索学校,Google就会在数千个节点中所存放的图片,文字中去寻找相应的资料,最终呈现在你的面前,在这里面需要数千个计算机节点的支持,这些节点分布式于事件各地,里面存放了大致PB,TB级别的资源。
2.在线游戏。在线游戏主要考虑的一个问题是游戏的并发处理能力,但你的只有1000名的时候,系统也许运作非常正常,但是当你的系统的用户规模扩大到100W的时候,你的系统还能承受的了嘛,也许这个时候你的系统结构得进行调整了,还是C-S结构, Or Point-To-Point点对对的方式?
3.金融贸易系统。金融贸易系统也是一个非常典型的分布式系统运作的例子。里面展现各个资源的信息,以及价格的波动于变化,所有他对于1个因素是非常看重的,那就是real-time(实时性),所有像这类系统,在设计之初就做全方面的考虑。
4)分布式系统的趋势
1.将会成为普遍的网络技术。分布式系统将会在现代的网络中越来越普遍,庞大的因特网本身就可以看做是一个分布式的系统
2.分布式系统对于移动计算的支持。你可以用你的手提电脑,又或者是你的手机,通过网络可以随时控制家中的洗衣机洗衣服,也可以在办公室实时查阅室内的温度,前提是只要你接入了网。
3.分布式多媒体系统。随着分布式系统的发展,也越来越支持多媒体的服务,可以在分布式系统中存放多种类型的多媒体信息,图片,文字,视频,音频等,并通过网络的方式在展示给用户。
4.分布式的计算将会成为一个公共的服务。其实这就是我们老是提到的Cloud Computing(云计算),可以把分布式系统中的资源当成一种服务卖给第三方,可以物理上的服务,比如IAAS基础设施的服务,可以上层的SaaS软件服务,无须使用者去关心内部的细节。
5)资源共享
在分布式系统中,一个很重要的概念就是Resource Sharing,资源共享,正是因为资源的共享性,才方便了人们的操作,比如上面的一个文件,你可以去阅读,人家也可以阅读。
6)分布式所面临的挑战和困难
1.异构的环境。至少下面的这些东西可能会不一样,网络,硬件资源,操作系统,程序语言,还有不同的开发者,目前针对于此的办法是中间件的解决办法,比如比较早的CORBA架构,还有1写中间件java RMI,但是只是支持java一种语言的,还有一种办法是mobile code的方法,这是什么意思呢,字面意思是可移动性的代码,就是你的代码在你自己的机子上面编写,但是最终我会让他运行在其他的机子上,一个很好的例子就是java语言,他通过运行jvm上就解决了操作系统不一样的问题。
2.开放性的问题。分布式系统的开发性一直不是特别好,一个关键的因素是接口的公开性,只有接口的公开才能让更多的开发者去扩展这个分布式系统。接口的公开意味要进行统一的规范的声明,因为 要考虑到他的异构的环境。
3.安全问题。安全问题在分布式系统中来说,主要针对的是资源来说的,当然常见的操作就是加密操作了,或者你干脆不开放你的系统,只给内部人员使用,但是有2个问题还是很难解决的:
(1).Dos拒绝服务攻击,如果你办公室的人因为某种原因占着资源不放,你要怎么办。
(2).移动程序的安全攻击,英文原称是Security Of mobile code,一个常见的例子是你早上收到了一封电子邮件,当你毫无戒备心打开它的时候,其实这时候你运行了一个恶意的程序,你的电脑就被attack了。
4.扩展性。在分布式系统中,扩展性一直是一个非常头大的东西,但你的用户群数量成倍增长的时候,你要考虑用各种手段去改善你的系统了,不过你要要率下面几个因素:
(1).控制物理资源的开销,意味的增加机子不是一个永恒的解决办法,至少开销这块你花不起。
(2).控制数据的流失,当你的系统进行扩增的情况下,不能让原先的数据发生loss的操作
(3).防止软件的资源被耗尽,比如说IP地址的数量,32位的ip地址越来越不能满足我们生活的需要了。
(4).避免系统出现性能瓶颈。
5.出错处理。一个好的分布式系统应当有个好的容错机制。下面是几个措施
(1).检测出错,以便系统的下一步处理,常用方法,checksum校验和机制
(2).掩盖错误,当错误来到的时候,重新尝试一次,或者当文件中数据写向磁盘中多个副本,当一个出错的时候,没关系还能保证其他的副本中的数据时正确的。
6.并发性。在高并发的情况下,保证数据的有序性,不会错误,用的比较多的方案是信息号机制。
7.操作透明性。分布式系统使用起来要像使用自己本地主要一样。
8.Qos服务质量。一个好的服务质量是对于分布式服务的一个基本要求。考察服务质量的2个因素是实用性和安全性。
参考文献:<<Distributed Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair