服务器提供给客户端的一组功能称为服务。在网上能够获取到常见的服务包括:
- Web内容解索服务。
- Castanet、Citrix这样的软件发布服务。
- 电子邮件已经网络新闻的传输服务
- 远程机器上的文件访问服务
- 网络时间的同步,也就是NTP服务
- 支付处理 服务
- RealPlayer或者QuickTime之类的音频/视频流服务
在诸如编译时、静态连接时、安装时或者是运行时这样的各种不同的时间节点上,都可以将组成网络应用的服务配置在一起而创建网络应用。
对于网络应用所使用的通信协议和机制以及并发性架构的领域分析。
对其他处理关键的网络应用属性的设计空间进行分析。这些属性包括服务的时续时间和服务结构,如何识别网络化服务,以及它们绑定在一起形成完整应用的时间。这些设计空间对任何网络应用都很重要,对ACE的Service Configurator框架尤其重要。然而,如果你已经对这些设计空间很熟知,你可以跳到第三章开始学习ACE的各种框架。
2.1 服务和服务器设计维度
在设计网络化应用时,区分服务(Service)和服务器(Server)之间的不同十分重要:
- Service: 是提供给客户的某种能力。
- Server: 是用来提供服务的机制。
关于服务和服务器的歌中歌设计决策很容易发生混淆,但却应该分别加以考虑。
本节覆盖了一下服务和服务器设计维度:
- 短持续时间服务 VS 长持续时间服务
- 内部服务 VS 外部服务
- 有状态服务 VS 无状态服务
- 分层式/模块化服务 VS 整体式服务
- 单服务服务器 VS 多服务服务器
- 一次性服务器 VS 持续式服务器
2.1.1 短持续时间服务 VS 长持续时间服务
网络服务器所提供的服务可被分类为持续时间短和持续时间长的。这些时间长度反应了服务持有系统资源的时间长短。在这一设计维度中,主要的权衡涉及:“当系统资源可在别处更好地被利用时仍然将其占据” VS “在需要某服务时对其进行重启的开销”。在网络化应用中,这一维度与协议选择紧密相关,因为不同协议的设置需求可能会显著地不同。
-
短持续时间服务
在执行时间短,且常常是固定的;通常一次处理一个请求。短持续时间服务的例子包括:当前时间计算、解析IP地址和Ethernet号,以及从网络文件系统的缓存中获取磁盘块;为了使花费在连接设置上的时间降至最低,短持续时间服务常常使用无连接的协议(UDP/IP)来实现。 -
长持续时间的服务
在运行时间更长,且常常是变长的;在其生命期中可以处理许多请求。长持续时间服务的例子包括通过FTP进行的大型软件传输,从使用HTTP的Web服务器上下载MP3文件,从使用RTSP的服务器上下载音频和视频流, 通过telnet远程访问主机资源,以及在网络上进行远程文件系统备份。运行时间更长的服务在协议选择方面的灵活性更大。例如:为了提高效率和可靠性,这些服务常常通过面向连接的协议(TCP/IP) 或者面向会话(session-oriented)的协议(RTSP或者SCTP)来实现。
日志服务===>从单个的日志记录的角度来看,我们的服务器日志daemon就像是短持续时间服务。每个日志记录的最大长度都被限制为4K字节,尽管在实践中大多数日志记录都要小的多。花费在处理一条日志记录上的时间相对很短。但是,因为客户可以传送许多日志记录,譬如:可以持续的发送日志记录。所以我们可以这样来对其性能进行优化:对客户日志daemon进行设计,让它们与它们的对端服务器日志deamon建立连接;随后为后续的日志请求复用这些连接。为每个日志请求设置并断开Socket连接既浪费资源,又耗费时间,特别是在频繁发送小请求的情况下。因此,我们把我们的客户服务器日志deamon建模为长持续时间服务。
2.1.2 内部服务 VS 外部服务
服务可被分类为内部的或外部的。在这一维度中的主要权衡要素是服务初始化时间、服务间的隔离,以及简单性。
-
内部服务
-
外部服务
2.1.3 有状态服务 VS 无状态服务
服务可被分类为有状态的和无