记忆总是会慢慢褪去,所以让文字记住一切~
分类: 服务器与存储
2016-01-14 14:55:54
今天浏览网页看到一个问题, 大意是如何进行服务器程序的开发。于是停留片刻想想自己在工作中是如何去做的。除了在需求/设计之外,剩下的工作就是写代码了。设计和代码的好坏决定了一个服务器程序运行的可靠性。
1) Run once Or
run as a daemon
首先想到的是设计的程序的运行是一次性的还是长久性的:
a) 如果是一次性,又会涉及是否是周期性的。
周期性的程序可以通过cronjob来进行调度。一次性的程序需要关心的是否在运行的时候卡住。CPU high/ Memory
high等,如果卡住了应该怎么办呢?
b) 如果长久运行,那就是daemon程序,应避免僵尸的存在,同时需要考虑下面几个方面(一次性的程序也应尽量考虑)
2) Daemon
程序需要长时间稳定运行:Stability(稳定性) + Performance(性能) + Maintainability(可维护性) + Security(安全性)
a) 模型选择:单进程单线程/单进程多线程/多进程
决定系统的最大使用,如邮件网关产品,会关心每秒钟能接受处理的邮件数目;
b) 性能提高技术的使用
如缓存技术、线程池等等;
c) Monitor
* 程序的运行过程也许会遇到未定义的情况,这是会引起crash,crash之后是否需要自动启动;
* 对disk, cpu, memory, io的使用;如创建的temp file是不是每次都清理掉了,又或者对file descriptor的每次打开是否释放。
* 在极端情况下,也许需要提供方法(如email)来通知管理者。
d) 对配置的动态加载
这就是常说的reload功能,对一个程序进行设置的更改是很正常的事情。如果不想间断服务程序的运行,就需要提供reload机制。
e) 可维护性
* 正常的Log功能;
* 提供对系统资源以及程序运行状态的dump接口;
f) 安全性
安全性方面除了借助于我们系统的防火墙之外,希望我们开发的程序尽量避免对外打开过多的窗口,这样就避免被恶意的使用。如监听的端口是针对于特定对象还是所有等等;
好了,总结了这么多,希望开发的过程中不要忘记,欢迎指正和补充。算是做个笔记吧~~