您的位置:首页 > 其它

服务器设计经验总结

2005-07-01 17:25 302 查看
服务器设计经验总结

在完成我的支持sock4, sock4A, sock5的代理服务器后,写下的总结。
现在它在公司的linux服务器(处于一个校园网)上7*24小时的运行

服务器通讯设计的三种经典架构
(1)one thread/request:对于每个服务请求使用一个线程来处理。在高并发状态下这种方法需要启动大量的线程,并且可能需要比较多的同步机制
(2)只使用一个线程来处理所有的请求,这种架构设计要求对服务处理的每个步骤都必须是非阻塞,而且能在极短的时间内完成。否则在高并发情况下不能提供好的服务响应质量。
(3)异步I/O: 利用OS提供的异步I/O机制(比如windows上的完成端口),可以非阻塞的调用通讯函数(revc, send, accept, connect),以后可以检查调用的完成状态及返回值等。这样可以避免大量的的线程占用资源,也免去了线程中有可能需要的同步

性能
一般设计中容易出现的影响性能的几个方面
(1)频繁的启动线程来处理请求会极大地影响性能。
可以写一个程序不停的启动线程,来观察线程的启动是需要很长时间的(每秒只能启动几十个线程)
可以采用线程池的方法来解决这个问题,在程序启动时预先启动若干线程,置于挂起状态,在需要使用线程的时候恢复线程的运行状态

(2)频繁的动态分配内存
每次动态分配内存都需要搜索记录heap使用状况的链表,找到合适大小的内存块。这是一个耗时的过程,而且在许多次的动态分配以后,会形成大量的内存碎片。可以在程序启动时预分配一定数量的内存块。在运行过程中程序管理。

(3)同步
同步需要消耗较多的系统资源(特别是进程间的同步),频繁的同步也会拖慢服务器的处理和响应速度.

可靠性
服务器除了要求能提供快速的响应,还要求能够长时间7*24小时的运行。
在复杂的网络环境下,这就不只是要求服务器软件具有高的代码质量,同时对抗攻击能力也有要求
(1)针对应用协议层的攻击
能够在不影响性能的情况下处理不符合应用协议的请求和数据。这就要求服务器对收到的数据做严格的有效性检查。
(2)针对网络层,传输层的攻击
这样的攻击例如:DoS攻击。或者攻击者不停的向服务器建立大量后就不做任何请求,这样就大量消耗了服务器资源,降低了服务器的服务质量和效率。可以采用"访问控制"的方法来解决这类问题。这样的策略可以如下所示:
a.只允许一个ip地址列表中的访问
b.限制每个ip能同时并发访问的数量
c.加上智能分析的处理过程:把不符合访问控制策略的访问源地址放入"禁止访问列表",禁止其对服务器一段时间的访问.

注意:
上面提到的DoS, 是从字面上的意思理解的Deny of Service. 而不是特定的针对tcp协议中的连接握手而采用的攻击方式
server在向client提供服务时,总是有一个容量限制的,比如能并发响应1000个请求,如果有人恶意的并发1000个以上的请求,别人就无法使用了。我在这里也把它看成DoS。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: