Upload
laszlo
View
130
Download
0
Embed Size (px)
DESCRIPTION
高 级服务器设计和实现 —— 技巧. 余 锋 ([email protected]) 2008-06-08. 实现语言的选择. C/C++ Erlang Lua. C/C++ 的特点. 优势 最大程度的挖掘硬件与系 统的潜力 劣 势 编码、维护困难 容易出 问题. Erlang 的特点. 并 发性 分布式 健壮性 软实时性 热代码升级 递增式代码装载 外部接口. Lua 的特点. 胶水 语言 高性能 FP 特性 体 积小 非常灵活. 采用成熟的网 络框架. ACE libevent boost:asio. - PowerPoint PPT Presentation
Citation preview
高级服务器设计和实现——技巧
余锋 ([email protected])2008-06-08
实现语言的选择
• C/C++• Erlang• Lua
C/C++ 的特点
• 优势o 最大程度的挖掘硬件与系统的潜力
• 劣势o 编码、维护困难o 容易出问题
Erlang 的特点
• 并发性• 分布式 • 健壮性• 软实时性• 热代码升级• 递增式代码装载 • 外部接口
Lua 的特点
• 胶水语言• 高性能• FP 特性• 体积小• 非常灵活
采用成熟的网络框架
• ACE• libevent• boost:asio
原则——简单就是美
• 除非必要不要用非常复杂的数据结构• 数组 链表 解决大部分事情• 数组方便利用硬件 cache • 不需要为未来的东西付出代价
错误处理
• 严谨的错误处理• 处理信号• IO 出错• 异常• 可恢复
明确的状态机和消息驱动
• 整个业务就是一个大的状态变迁图• 一个物理链接对于一组状态机• 状态的变化是消息引起的• 消息是可以跟踪的
例 :HTTP
插件设计
• 方便扩展业务• 方便团队参与• 接口要简单• 可以考虑用脚本
定时器
• 大部分网络程序时间驱动的• 高效的定时器管理• 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 监控程序
服务器性能可微调
• 提供简单的接口动态改变服务器关键数据• 自动根据系统的资源情况来决定默认值•有统计模块做微调依据
移植性
•平台移植• 硬件移植• ANSI C 代码 最大可移植性• 网络字节序 (big endian/little endian)
Q & A