研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。例如,在Web应用程序中,有两个互相通信的不同的程序 :一个是运行在用户主机(桌面机、膝上机、平板电脑、智能电话等)上的浏览器程序;另一个是运行在Web服务器主机上的Web服务器程序。另一个例子是P2P文件共享系统,在参与文件共享的社区中的每台主机中都有一个程序。在这种情况下,在各台主机中的这些程序可能都是类似的或相同的。
因此,当研发新应用程序时,工程师需要编写将在多台端系统上运行的软件。重要的是,工程师不需要写在网络核心设备如路由器或链路层交换机上运行的软件。即使工程师要为网络核心设备写应用程序软件,工程师也不能做到这点。网络核心设备并不在应用层上起作用,而仅在较低层起作用,特别是位于网络层及下面层次。这种基本设计,也即将应用软件限制在端系统的方法,促进了大量的网络应用程序的迅速研发和部署。
当进行软件编码之前,应当对应用程序有一个宽泛的体系结构计划。记住应用程序的体系结构明显不同于网络的体系结构。从应用程序研发者的角度看,网络体系结构是固定的,并为应用程序提供了特定的服务集合。在另一方面,应用程序体系结构(application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一 : 客户-服务器体系结构或对等(P2P)体系结构。
在客户-服务器体系结构(client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。一个经典的例子是Web应用程序,其中总是打开的Web服务器服务于来自浏览器(运行在客户主机上)的请求。当Web服务器接收到来自某客户对某对象的请求时,它向该客户发送所请求的对象作为响应。值得注意的是利用 客户-服务器 体系结构,客户相互之间不直接通信 ; 例如,在Web应用中两个浏览器并不直接通信。客户-服务器体系结构的另一个特征是该服务器具有固定的、周知的地址,该地址称为IP地址(我们将很快讨论它)。因为该服务器具有固定的、周知的地址,并且因为该服务器总是打开的,客户总是能够通过向该服务器的IP地址发送分组来与其联系。具有客户-服务器体系结构的非常著名的应用程序包括Web、FTP、Telnet和电子邮件。下图中显示了这种客户一服务器体系结构。

在一个客户—服务器应用中,常常会出现一台单独的服务器主机跟不上它所有客户请求的情况。例如,一个流行的社交网络站点如果仅有一台服务器来处理所有请求,将很快变得不堪重负。为此,配备大量主机的数据中心常被用于创建强大的虚拟服务器。最为流行的因特网服务--如搜索引擎(如谷歌和Bing)、因特网商务(如亚马逊和e-Bay)、基于Web的电子邮件(如Gmail和雅虎邮件)、社交网络(如脸谱和推特),就应用了一个或多个数据中心。谷歌有分布于全世界的30~50个数据中心,这些数据中心共同处理搜索、YouTube、Gmail和其他服务。一个数据中心能够有数十万台服务器,它们必须要供电和维护。此外,服务提供商必须支付不断出现的互联和带宽费用,以发送和接收到达/来自数据中心的数据。
在一个P2P体系结构(P2P architecture)中,对位于数据中心的专用服务器有最小的(或者没有)依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。这些对等方并不为服务提供商所有,相反却为用户控制的桌面机和膝上机所有,大多数对等方驻留在家庭、大学和办公室。因为这种对等方通信不必通过专门的服务器,该体系结构被称为对等方到对等方的。许多目前流行的、流量密集型应用都是P2P体系结构的。这些应用包括文件共享(例如BitTorrent)、对等方协助下载加速器(例如迅雷)、因特网电话(例如Skype)和IPTV(例如“迅雷看看”和PPstream)。上图中显示了P2P的体系结构。需要提及的是,某些应用具有混合的体系结构,它结合了客户—服务器和P2P的元素。例如,对于许多即时讯息应用而言,服务器被用于跟踪用户的IP地址,但用户到用户的报文在用户主机之间(无需通过中间服务器)直接发送。
P2P体系结构的最引入人胜的特性之一是它们的自扩展性(self-scalability)。例如,在一个P2P文件共享应用中,尽管每个对等方都由于请求文件产生工作量,但每个对等方通过向其他对等方分发文件也为系统增加服务能力。P2P体系结构也是成本有效的,因为它们通常不需要庞大的服务器基础设施和服务器带宽(这与具有数据中心的客户-服务器设计形成反差)。然而,未来P2P应用面临三个主要挑战:
ISP友好。大多数住宅ISP(包括DSL和电缆ISP)已经受制于“非对称的”带宽应用,也就是说,下载比上载要多得多。但是P2P视频流和文件分发应用改变了从服务器到住宅ISP的上载流量,因而给ISP带来了巨大压力。末来P2P应用需要设计对ISP友好的模式。安全性。因为它们的高度分布和开放特性,P2P应用给安全带来挑战激励。未来P2P应用的成功也取决于说服用户自愿向应用提供带宽、存储和计算资源,这对激励设计带来挑战



