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

Post on 21-Jan-2016

130 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

余锋 (mryufeng@gmail.com)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

top related