2 service and configuration design dimensions——ACE读书笔记

2 service and configuration design dimensions

网络编程是 综合权衡 复杂性、安全性、健壮性,而在时间和空间方面做取舍。
复杂性:
单个服务、无状态连接(http)
状态持有 (smtp)
线程池/( oracle 连接模式 )
监听管理器( inetd 管理 ftp 和 telnet 连接 )
安全性:
1)多线程
1、多线程可能造成的问题是:多个线程间共享相同的系统资源,为权限不同的两个用户的连接派发不同的线程,则由于两个线程共享相同的文件句柄,可能对系统安全造成威胁。
2) 动态连接库
2、动态连接库道理同上。各个进程映射到同一个库文件,如果有用户对库文件进行修改。则使得其它的用户也受到影响。典型的操作是“特洛伊木马”。( trojan horses )
健壮性
1)动态配置。24 * 7 的无间断运行。( Dynamic service reconfiguration )。需要一个额外的“配置管理器”来广播配置更新事件。
2)负载平衡。

时间:
1)运行时时间:
多线程:共享的数据页,有效避免了剧烈的内存换页。
线程/进程池:减少了线程/进程创建和销毁消耗的时间。
2)空间:
线程池:使用了大量的进程空间。
动态连接库:减少了内存使用。

最简单的 网络服务器:

 

几种高效的网络服务器模型:

1、多服务( Multiservice Servers)服务器

listen 多个 port,然后 select 监视多个 socket 句柄 。 select 到后,将事件发送到合适的进程。 inetd 是典型的例子。

多服务模型把 tcp 握手的过程从业务逻辑中分离出来。有利于代码维护。

2、多线程( thread pool )服务器

通过 local IPC 将 socket handle 从监听进程传递到会话进程。 以实现一个进程处理多个 socket handle 。各个线程通过 ACE_TP_Reactor::handle_events() 来处理多线程模型下的 socket handle 上的事件。

进程池、线程池(standing servers)通过 local IPC 来实现。apue 2th edition 17.4. Passing File Descriptors 介绍了怎样通过IPC机制在进程间传递句柄。


原文地址:https://www.cnblogs.com/diylab/p/1517153.html