高 级服务器设计和实现 —— 技巧 余 锋   (mryufeng@gmail.com) 2008-06-08
实现语言的选择 <ul><ul><li>C/C++ </li></ul></ul><ul><ul><li>Erlang </li></ul></ul><ul><ul><li>Lua </li></ul></ul>
C/C++ 的特点 <ul><ul><li>优势 </li></ul></ul><ul><ul><ul><li>最大程度的挖掘硬件与系 统的潜力 </li></ul></ul></ul><ul><ul><li>劣 势 </li></ul></u...
Erlang 的特点 <ul><ul><li>并 发性 </li></ul></ul><ul><ul><li>分布式   </li></ul></ul><ul><ul><li>健壮性 </li></ul></ul><ul><ul><li>软实时...
Lua 的特点 <ul><ul><li>胶水 语言 </li></ul></ul><ul><ul><li>高性能 </li></ul></ul><ul><ul><li>FP 特性 </li></ul></ul><ul><ul><li>体 积小 ...
采用成熟的网 络框架 <ul><ul><li>ACE </li></ul></ul><ul><ul><li>libevent </li></ul></ul><ul><ul><li>boost:asio </li></ul></ul>
原 则——简单就是美 <ul><ul><li>除非必要不要用非常复 杂的数据结构 </li></ul></ul><ul><ul><li>数 组   链表   解决大部分事情 </li></ul></ul><ul><ul><li>数 组方便利用硬...
错误处理 <ul><ul><li>严谨的错误处理 </li></ul></ul><ul><ul><li>处理信号 </li></ul></ul><ul><ul><li>IO 出 错 </li></ul></ul><ul><ul><li>异常 <...
明确的状 态机和消息驱动 <ul><ul><li>整个 业务就是一个大的状态变迁图 </li></ul></ul><ul><ul><li>一个物理 链接对于一组状态机 </li></ul></ul><ul><ul><li>状 态的变化是消息引起...
例 :HTTP
插件 设计 <ul><ul><li>方便 扩展业务 </li></ul></ul><ul><ul><li>方便 团队参与 </li></ul></ul><ul><ul><li>接口要 简单 </li></ul></ul><ul><ul><li>...
定 时器 <ul><ul><li>大部分网 络程序时间驱动的 </li></ul></ul><ul><ul><li>高效的定 时器管理 </li></ul></ul><ul><ul><li>Wheel heap  </li></ul></ul>
协议设计 <ul><ul><li>文本 协议 </li></ul></ul><ul><ul><li>二 进制协议 </li></ul></ul><ul><ul><li>xml </li></ul></ul><ul><ul><li>RFC 标准协...
协议解析 <ul><ul><li>flex bison (lex & yacc) </li></ul></ul><ul><ul><li>ragel </li></ul></ul><ul><ul><li>lemon </li></ul></ul>...
协议加密与压缩 <ul><ul><li>lzo zlib </li></ul></ul><ul><ul><li>xxtea rc4 aes des </li></ul></ul><ul><ul><li>考 虑到 cpu  和   内存的使用 <...
配置文件 <ul><ul><li>可以用 Lua 这样的脚本来描述 </li></ul></ul><ul><ul><li>适 应经常性的变化 </li></ul></ul><ul><ul><li>Unix .conf 文件 </li></ul>...
稳定性 <ul><ul><li>资源预分配 </li></ul></ul><ul><ul><li>不可以 发生泄漏,堆积 </li></ul></ul><ul><ul><li>不可使用 过多资源 </li></ul></ul><ul><ul><...
进程间通信( IPC ) <ul><ul><li>Socket </li></ul></ul><ul><ul><li>共享内存 </li></ul></ul><ul><ul><li>Pipe </li></ul></ul>
Cache <ul><ul><li>尽可能地 Cache </li></ul></ul><ul><ul><li>从硬件 -> 操作系 统 -> 库 -> 应用 </li></ul></ul>
提高服 务质量 <ul><ul><li>heartbeat </li></ul></ul><ul><ul><li>watchdog </li></ul></ul><ul><ul><li>类似 monit 监控程序 </li></ul></ul>
服 务器性能可微调 <ul><ul><li>提供 简单的接口动态改变服务器关键数据 </li></ul></ul><ul><ul><li>自 动根据系统的资源情况来决定默认值 </li></ul></ul><ul><ul><li>有 统计模块做...
移植性 <ul><ul><li>平台移植 </li></ul></ul><ul><ul><li>硬件移植 </li></ul></ul><ul><ul><li>ANSI C 代 码   最大可移植性 </li></ul></ul><ul><ul...
Q & A
Upcoming SlideShare
Loading in …5
×

高级服务器设计和实现2

2,104 views

Published on

Published in: Technology, News & Politics
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,104
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
109
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

高级服务器设计和实现2

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

×