高 级服务器设计和实现 —— 技巧

23
高高高高高高高高高高 ——高高 高高 ([email protected]) 2008-06-08

Upload: laszlo

Post on 21-Jan-2016

130 views

Category:

Documents


0 download

DESCRIPTION

高 级服务器设计和实现 —— 技巧. 余 锋 ([email protected]) 2008-06-08. 实现语言的选择. C/C++ Erlang Lua. C/C++ 的特点. 优势 最大程度的挖掘硬件与系 统的潜力 劣 势 编码、维护困难 容易出 问题. Erlang 的特点. 并 发性 分布式 健壮性 软实时性 热代码升级 递增式代码装载 外部接口. Lua 的特点. 胶水 语言 高性能 FP 特性 体 积小 非常灵活. 采用成熟的网 络框架. ACE libevent boost:asio. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 高 级服务器设计和实现 —— 技巧

高级服务器设计和实现——技巧

余锋 ([email protected])2008-06-08

Page 2: 高 级服务器设计和实现 —— 技巧

实现语言的选择

• C/C++• Erlang• Lua

Page 3: 高 级服务器设计和实现 —— 技巧

C/C++ 的特点

• 优势o 最大程度的挖掘硬件与系统的潜力

• 劣势o 编码、维护困难o 容易出问题

Page 4: 高 级服务器设计和实现 —— 技巧

Erlang 的特点

• 并发性• 分布式 • 健壮性• 软实时性• 热代码升级• 递增式代码装载 • 外部接口

Page 5: 高 级服务器设计和实现 —— 技巧

Lua 的特点

• 胶水语言• 高性能• FP 特性• 体积小• 非常灵活

Page 6: 高 级服务器设计和实现 —— 技巧

采用成熟的网络框架

• ACE• libevent• boost:asio

Page 7: 高 级服务器设计和实现 —— 技巧

原则——简单就是美

• 除非必要不要用非常复杂的数据结构• 数组 链表 解决大部分事情• 数组方便利用硬件 cache • 不需要为未来的东西付出代价

Page 8: 高 级服务器设计和实现 —— 技巧

错误处理

• 严谨的错误处理• 处理信号• IO 出错• 异常• 可恢复

Page 9: 高 级服务器设计和实现 —— 技巧

明确的状态机和消息驱动

• 整个业务就是一个大的状态变迁图• 一个物理链接对于一组状态机• 状态的变化是消息引起的• 消息是可以跟踪的

Page 10: 高 级服务器设计和实现 —— 技巧

例 :HTTP

Page 11: 高 级服务器设计和实现 —— 技巧

插件设计

• 方便扩展业务• 方便团队参与• 接口要简单• 可以考虑用脚本

Page 12: 高 级服务器设计和实现 —— 技巧

定时器

• 大部分网络程序时间驱动的• 高效的定时器管理• Wheel heap

Page 13: 高 级服务器设计和实现 —— 技巧

协议设计

• 文本协议• 二进制协议• xml• RFC 标准协议

Page 14: 高 级服务器设计和实现 —— 技巧

协议解析

• flex bison (lex & yacc)• ragel• lemon• 合适的库• 手动解析

Page 15: 高 级服务器设计和实现 —— 技巧

协议加密与压缩

• lzo zlib• xxtea rc4 aes des• 考虑到 cpu 和 内存的使用

Page 16: 高 级服务器设计和实现 —— 技巧

配置文件

• 可以用 Lua 这样的脚本来描述• 适应经常性的变化• Unix .conf 文件• ini 格式

Page 17: 高 级服务器设计和实现 —— 技巧

稳定性

• 资源预分配• 不可以发生泄漏,堆积• 不可使用过多资源• 避免频繁的分配 / 释放内存(内存碎片)

Page 18: 高 级服务器设计和实现 —— 技巧

进程间通信( IPC )

• Socket• 共享内存• Pipe

Page 19: 高 级服务器设计和实现 —— 技巧

Cache

• 尽可能地 Cache• 从硬件 -> 操作系统 -> 库 -> 应用

Page 20: 高 级服务器设计和实现 —— 技巧

提高服务质量

• heartbeat• watchdog• 类似 monit 监控程序

Page 21: 高 级服务器设计和实现 —— 技巧

服务器性能可微调

• 提供简单的接口动态改变服务器关键数据• 自动根据系统的资源情况来决定默认值•有统计模块做微调依据

Page 22: 高 级服务器设计和实现 —— 技巧

移植性

•平台移植• 硬件移植• ANSI C 代码 最大可移植性• 网络字节序 (big endian/little endian)

Page 23: 高 级服务器设计和实现 —— 技巧

Q & A