记录自己的程序人生和感悟,记录自己成长的点点滴滴

目前兴趣,游戏开发。

 

服务器设计,开发的体会

做服务器有一段时间了,想记录下自己的体会。
依我的看法,服务器可以看做是4个部分组合起来的, 底层的网络框架, 通用的数据结构和库, 整个服务器的架构设计,服务器的上层业务逻辑。
 
底层的网络框架,目前可以说技术基本都是公开的了, 可以自己从头写,采用iocp,epoll。也可以直接使用ace, libevent 或者asio,
如果是linux下,我觉得libevent是个非常好的选择,效率足够,而且可移植。代码也简单。ace的缺点,就是比较大,用他来开发,没有什么问题,
遇到问题需要查找维护,就比较棘手了,asio看过一点,proactor模式的。口碑也不错。
如果直接用这些库来支撑上层逻辑,那么上层的开发还是比较麻烦的,自己还需要在这些库的基础上,再加上一些封装,以简化上层的开发难度。
譬如lau stephen老兄的spserver, 就是个不错的尝试。他是在libevent的基础上,整合出一个应用层框架。
网络框架的两个关键点,1是性能要足够,2是要方便上层开发。3是要稳定,有这3点,就足够了、
 
通用的数据结构和库,主要是用来实现一些封装,譬如封装线程,封装数据库访问,封装线程池,封装内存池, 封装线程安全的队列,该队列主要用来实现
半同步,半异步模式中关键的排队层。 这个库,应该是随着自己的经验和水平的增进而不断改进的。对于大部分服务器的开发,这个库都是必要的.
 
整个服务器的架构设计,设计架构的时候,考虑无非是简单,容易扩展,安全性,成本也是一部分考虑。 没有通用的架构,只有针对自己的需求和条件的
比较好的架构。所以千万不能照抄架构,要结合自己的实际情况来思考,别人的东西,只能参考。简单的出发点,就是便于维护,KISS原则。
扩展性的关键,就在一个负载均衡,要保证系统中没有会阻碍性能提升的障碍点。安全性的考虑,很多关键的业务,必须部署在内网,以避免攻击。
例如,网游中常用的gate架构,既有安全性的考虑,也有负载均衡的考虑,他只把gate服务器部署在公网上。
 
服务器的上层业务逻辑, 这块千差万别,但是有一些共同的问题。譬如逻辑采用单线程还是多线程的问题,如果上层业务很简单,譬如就是简单的数据库查询或者
注册认证,可以采用多线程来做逻辑,尽可能的提高服务器的性能。但是如果是很复杂的业务,譬如im或者网游逻辑服务器,数据交互会非常多,这个时候,多线程
是很不可取的,维护,扩展性,都会出现很大的问题。查错也会成为大麻烦。
最好的线程划分还是按照业务的相关性,把业务纠缠比较紧密的,放在一个线程里。各个线程直接,通过消息或者队列来进行通信。

逻辑服务器的高下,主要在于细节。譬如数据结构的效率,内存分配的效率,服务器的防御性编程处理, 对于客户端的协议支持是否全面。 做逻辑服务器的关键,是要用心。只要是花心思了,保证稳定,能够满足客户端的业务需求和性能需求,就是很好了。
 
 

posted on 2008-06-14 10:13 Hellfire 阅读(3639) 评论(8)  编辑 收藏 引用

评论

# re: 服务器设计,开发的体会 2008-06-14 11:00 cppexplore

顶下!  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-14 11:20 true

好文  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-14 11:47

博主写的不错啊,有没有具体的例子?  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-14 11:56 Hellfire

@水
例子,都是商业代码,不好办啊。

其实开源的已经提供了足够的例子了。只是自己去不去挖掘而已。  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-14 17:29 23

不错!  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-14 18:06 Kven

说的太专业了,好难懂完。
不过,小弟还是谢谢Hellfire的无私分享。  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-14 21:25 罗宾李

不错  回复  更多评论   

# re: 服务器设计,开发的体会 2008-06-17 12:05 长江三峡

好东东  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

统计

常用链接

留言簿(4)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜