分布式系统开发学习之CS模式(一)
常建昭
CS模式简介
分布式结构至今已经有了30年的历史了,特别自电脑网络的时代开始,分布式结构变的非常的受欢迎。CS模式(Client-Server Architecture)可能是应用软件开发所使用的最成功的一种模式。它首先是出现在主机系统中,在局域网环境下,其性能显的格外的突出。而现在,CS模式已经成为一种基本的开发设计模式。虽然CS应用软件包含了Client和Server部件并且在网络中相互交互。但这并不代表说所有的CS应用软件均需要按照这样来设计(即网络不是必须的),它是允许在单机上运行的。
在CS模式中,工作原理可以简单的理解为:
Client向Server提交一个请求; Server则使用一些方法处理这个请求,并将效果返回给Client. 如下图所示:
在处理Client的请求时,Server本身可以成为另一个CS模式中的Client.
如下图所示:
大部份的朋友认为在Client-Server应用软件中,Server做了几乎所有的工作。但实际上并不是这样。在实际应用中,Client执行了大部份的软件逻辑并完成了大部份的工作。Server当然也做了些工作。但它主要的工作是接受client的请求并返回结果。
有许多人说CS结构是分布式结构中最常用的一个例子。的确,它确实是一个常用的架构模式,而且它也在确是通过网络进行Client和Server之间的交互,但是,严格来说,CS模式有可能不是真正意义上的分布式结构。为什么这么说呢?我们首先应该从分布式结构的定义及特性去考虑。分布式系统简单来说是指通过网络,进行多于一台电脑之间的数据交互。而它最大的特性在于二点,性能(performance)和可量测性(Scalability). 而CS模式由于含有一系列的限制,以至于很难达到这二点分布式系统的特性。(在稍后会讨论有关这一系列的限制)。 另一方面,一个单独的应用软件的透明度通常也是一个分布式结构的特性,但CS模式并没有提供这方向的特性。举全例子,一个网页浏览器,可以看成是一个Client.而用户必须输入网站的网址去连接包含所要求网页的Server,在这里,它就缺乏了透明性。因此我也可以将这个网页浏览器和服务器看成是在这个系统中的二个独立的组件。
由于CS模式一系列的局限,以至于它不能被看成一个完全的分布式结构,我们可以更多的将之考虑为一种网络应用程序结构。在下一篇文章中,我将会总结有关CS模式的局限方面的知识。谢谢。
分布式系统开发学习之CS模式(二)
常建昭
CS模式的限制与应用
我在上一篇总结的时候提到CS模式含有一系列的限制。那这些限制都是什么呢?其实CS模式最基本的问题在于其缺乏可量测性,主要原因是由于Server逐渐的变成了性能的瓶颈。在前文里曾介绍可量测性和性能是分布式结构的二大特点。二者相辅相成,缺乏了可量测性也成为了CS模式不是一种完全的分布式结构的一个原因。在CS模式中,服务端通常需要通过获取和使用一些资源来处理Client的请求,比如说,连接数据库,获取数据信息等。对于一个软件的开发设计,任何一个需要访问共享资源的设计系统均应该在最短的时间内获取到所需资源,这样其它的用户就可以有机会去访问资源。试想一下,如果同一时间,大量的Client同时对Server发出请求,会出现什么的样的情况?可能会是Server的崩溃,也可能会是网络的停滞,但不管是什么,这一点将会让Server变成一个性能的瓶颈,这也是为什么我说C/S模式对于一个应用软件的可量测性来说含有一定的限制。(有关可量测性,在稍后会补充讨论)。C/S模式不适合大型的网络系统,但对于局域网系统来说是个很好的选择,换句话说,C/S模式适合10到100用户的局域网的系统开发,而对于Internet用户的系统来说,这种模式就不适合了。
如果说CS模式不是一种完全的分布式系统,那么它与传统的分布式系统又有什么差别呢?正如我在上一篇学习总结中和一些朋友的讨论,CS模式的大部处理是在Client 中执行,而传统的分布式系统是在另一远程机器中进行处理。二者的边界有点模糊,但我认为针对不同的系统要进行正确的选择,这样才能设计出高性能的系统。在稍后我将会对其它的分布式架构做出学习的总结,例如点对点模式,多层架构模式等,同时也会涉及到一些分布式技术例如RPC, RMI, XML Web Service及.NET Remoting等。
可量测性(Scalability)的讨论
在上一篇学习总结中,和一些朋友讨论了有关可量测性这一词,现做个简短的总结,希望大家能指教指教。
博客园的朋友“小陆”指出将Scalability翻译成可量测性不太准确,随后他给出了解释和例子,我在这里非常感谢,这里我贴出来,让大家看看,我认为他的比较容易明白。
|=========<转>=========
Scalability翻译成可量测性不太准确, 这个词的意思是: 系统的性能会随着硬件条件的增加而同步增加, 基本上成比例增长. 比如一个服务器的响应时间为100ms, 两个服务器就是50ms, 四个服务器就是25ms. 这是理想的情况, 实际上是不可能的, 总有一些损失.
不仅对于分布式系统, 对于独立系统也有Scalability这个概念, 随着CPU主频, CPU个数和内存的增加, 系统的性能可以同步增加.
|=====================
其后我也查了一下相关方面的笔记,得出以下结论:
什么是可量测性呢?对于一个含有可量测性的系统来说,当其在物理资源(小陆所说的硬件资源)的数量或者用户的数量增加的前提下,仍应尽可能的保持着效率。当然,在实际的操作中,正如小陆所说,这是不可能的,多多少少性能都会受到影响。再拿我玩的魔兽世界Wow来当例子,当玩家多的时候,大家都需要排队,才能进入到游戏,而当玩家少的时候,大家就可以直接选取人物,进入到游戏中。
对于一个含有这种特性的系统需要有以下的能力:
- 控制物理资源的耗费。
- 控制系统性能的降低。
- 预防系统资源损耗。
- 避免系统性能瓶颈。
如果大家对于Scalability 持有不同意见,欢迎大家留言讨论,共同学习。
注:
这是我在学习分布式系统开发时所接触的知识,内容一部份为摘录笔记(英文)的翻译,一部份为自己的理解。所以难免有错误之处,还请大家多多指教。谢谢。
首帖于博客园,未经许可,不得进行任何形式的转发。