高级服务器设计和实现——技巧
语言的选择
C/C++
Erlang
Lua
C/C++的特点
优势
最大程度的挖掘硬件与系统的潜力
劣势
编码、维护困难
容易出问题
Erlang的特点
并发性
分布式
健壮性
软实时性
热代码升级
递增式代码装载
外部接口
采用成熟的网络框架
ACE
libevent
boost:asio
原则——简单就是美
除非必要不要用非常复杂的数据结构
数组 链表 解决大部分事情
数组方便利用硬件cache
不需要为未来的东西付出代价
硬件cache :
错误处理
严谨的错误处理
处理信号
IO出错
异常
可恢复
明确的状态机和消息驱动
整个业务就是一个大的状态变迁图
一个物理链接对于一组状态机
状态的变化是消息引起的
消息是可以跟踪的
插件设计
方便扩展业务
方便团队参与
接口要简单
可以考虑用脚本
定时器
大部分网络程序时间驱动的
高效的定时器管理
Wheel heap
协议设计
文本协议
二进制协议
xml
RFC标准协议
协议解析
flex bison (lex & yacc)
ragel
lemon
合适的库
手动解析
协议加密与压缩
lzo zlib
xxtea rc4 aes des
考虑到cpu 和 内存的使用
配置文件
可以用Lua这样的脚本来描述
适应经常性的变化
Unix .conf文件
ini格式
稳定性
资源预分配
不可以发生泄漏,堆积
不可使用过多资源
避免频繁的分配/释放内存(内存碎片)最好是手工回收!
进程间通信(IPC)
Socket
共享内存
Pipe
Cache
尽可能地Cache
从硬件->操作系统->库->应用
提高服务质量
heartbeat
watchdog
类似monit监控程序
服务器性能可微调
提供简单的接口动态改变服务器关键数据 (要是监控服务器的脚本能够做到此功能将是不错的)
自动根据系统的资源情况来决定默认值
有统计模块做微调依据
阅读(511) | 评论(0) | 转发(0) |