服务器模型
C/S模型
客户连接请求是随机到达的异步事件,服务器需要使用某种I/O模型来监听这一事件。
C/S模型非常适合资源相对集中的场合,并且它的实现也很简单,但其缺点也很明显:服务器是通信的中心,当访问量过大时,可能所有客户都将得到很慢的响应。下面讨论的P2P模型解决了这个问题。
P2P模型
P2P模型使得每台机器在消耗服务的同时也给别人提供服务,这样资源能够充分、自由地共享。但P2P模型的缺点也很明显:当用户之间传输的请求过多时,网络的负载将加重。
图a中的P2P模型存在一个显著的问题,即主机之间很难互相发现。所以实际使用的P2P模型通常带有一个专门的发现服务器。这个发现服务器通常还提供查找服务(甚至还可以提供内容服务),使每个客户都能尽快地找到自己需要的资源。
从编程角度来讲,P2P模型可以看做C/S模型的扩展:每台主机既是客户端,又是服务器。
C/S模型和P2P模型的比较
不难看出,在C/S模型中,服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。而P2P的思想是整个互联网中的传输内容不再被保存在中心服务器上,每个节点都同时具有下载、上传的功能,其权利和义务都是大体相等的。
客户/服务器模型的主要特点主要有:
(1)网络中各计算机的地位不平等,服务器可以通过对用户权限的限制来达到管理客户机的目的。整个网络的管理工作由少数服务器担当,故网络的管理非常集中和方便。
(2)客户机相互之间不直接通信。例如,在Web应用中两个浏览器并不直接通信。
(3)可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数有限。
和C/S模型相比,P2P模型的优点主要体现在:
(1)减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率。
(2)可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求。
(3)网络健壮性强,单个结点的失效也不会影响其他部分的结点。
P2P模型也有缺点,在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度。例如,经常进行P2P下载还会对硬盘造成较大的损伤。据