整理了下通信服务器设计要考虑的问题,希望大家提提意见
首先就是这个性能问题,性能问题从用户,应用系统的角度而言就是,并发数(吞吐量),业务延迟。从计算机的角度来看,就是CPU每秒处理指令的数目,内存的占用率,I/O总线的占用率等等。能够并发为多少用户提供服务。这个就是要看需求啦,要看具体的业务,还有系统运行的环境,环境包括网络环境,硬件环境,系统软件环境。网络环境就是对外提供服务的网络带宽,系统内部网络等。硬件环境,就要看运行服务的计算机的硬件配置,比如网卡速度,主板总线频率,内存,CPU处理速度,CACHE大小,以及这个磁盘I.O总线的速度,这个硬件的配置需要仔细的选择,根据不同的业务需求,应用模式需要仔细测量,例如这个WEB性质的服务,对内存,以及磁盘IO影响比较大。系统软件环境,就是操作系统了,LINUX操作系统,WINDOWS系统本身的特点,比如最大的线程数目,最大的进程数目,每个进程能够打开的最大套接字数目。等等,这个要看具体的操作系统。
性能问题从用户的角度来看,从应用系统的角度而言就是,并发数(吞吐量),业务延迟。
对于这个并发数目我认为这个东西是不定的,不同的规模对系统结构的要求是不同的,在系统初期运行阶段,是无法完全进行预计的。所以我想这就需要在系统设计式考虑这个扩展性问题。就是系统性能扩展性设计。系统的处理资源总是有限的,用户的需求式无限的,那么如果要能够满足需求,要么增加资源,要么减少需求。现在考虑这个增加资源的方法。增加资源有增加单机资源以及增加多机资源。单机资源的提高,就不用介绍了,主要是要确定系统的瓶颈,到底是什么地方造成了系统的堵塞。而后按照相关的应用背景。对系统进行升级。多机资源,就是将用户的需求分布在不同的计算机上进行处理。所以在系统设计的过程中需要考虑这两个方面的软件结构设计。
关于软件结构设计问题,单机情况,需要考虑,怎样减少运算量,减少对内存的访问,减少函数调用次数,增加对寄存器的访问。怎样提高系统的并行性,减少CPU的等待时间,在编程的过程中可以考虑下计算机的硬件结构。可以通过汇编等等对关键位置进行优化。这些都是比较具体的问题,需要在开发的过程中进行测试。
多机扩展的情况,我现在一般是将系统的服务分布在多个进程或线程,使用线程就是却换开销小些,并且一个进程内的资源是共享的。使用进程,却换相对大些,进程间的交互相对麻烦些。比如使用PIPE等等,不同的平台方式不同。但是使用进程可以提高系统的可靠性。一个进程死掉了,如果设计的可以,其它的进程还是可以正常运行的,但是线程不同,如果一个线程死掉了,整个进程基本上就完蛋了,其余的线程服务也发生错误的机会就比较大。
这个通信系统的设计还要涉及到扩展性设计,稳定性设计,安全性设计,可维护性设计等等,问题比较多,希望大家补充。
我现在想把这个东西整理出来,以后设计的时候,可以按照这个来分析。