Transcript
DCPP( 管道 )Java 高性能 I/O 网络应用开发
孙晓晨 2010.5.12
可伸缩的网络服务
事件驱动
Reactor 模式
Java NIO
DCPP 应用
网络服务
Web 服务、对象分发基本结构:
读取请求解码业务处理重新编码响应
网络服务
网络服务
可伸缩的目标
• 负载增长的情况下优雅的降级• 持续改进增长的资源 (CPU/ 内存 / 带宽 )• 可用和性能目标:
• 更短的延时• 峰值压力• 可调节的 QoS• C10K 问题
• 可伸缩的银弹 - 分而治之
分而治之
• 处理流程拆分成小的任务• 每个任务的执行是非阻塞的
• 满足条件时执行任务
• java.nio 提供的支持• Non-blocking 读 / 写• IO Event
• 基于事件的设计
事件驱动
• 更加高效• 更少的资源• 更低的负载• 分发变慢
• 编程复杂度提高• 非阻塞• 服务状态控制• 多线程
Reactor Pattern
• Reactor 调度 IO 事件给处理器• Handler 非阻塞的处理• 事件绑定到处理器上• Proactor Pattern
Pattern-Oriented Software Architecture, Volume 2 (POSA2)http://www.cs.wustl.edu/~schmidt/POSA/
Reactor Pattern
单线程
java.nio
• Channel• Buffer• Selector• SelectionKey
java.nio - Channel
java.nio - Channel
java.nio - Buffer
java.nio - Selector
java.nio - SelectionKey
java.nio - SelectionKey
Reactor Pattern - reactor
Reactor Pattern - decode
Reactor Pattern - decode
Reactor Pattern - handler
DCPPDate Center Peer to Peer Protocol
长度
版本
预留1
预留2
预留3
预留4
保留字
消息号
字段 1 字段 2 … 字段 n
类型
参数个数
类型
扩展号
字段1类型
字段1值
… … 字段n类型
字段n值
消息 头 消息 体
DCPP – 使用
DCPP – 使用java –DhttpPort=8000 -classpath "$CLASSPATH“
com.woniu.connect.dcpp.DCPPServer
DCPP – 效率
DCPP
• Mina1.1.7• ActiveMQ5.3.1• Freemarker2.3• Winstone0.9• H2database• Jquery
DCPP – 下一步
• 更加精简的包依赖• 单元测试• 支持更多的使用场景• 迁移 - Mina2 pk Netty3• Scala 编程
感谢国家,感谢党感谢大家
Q&A & 眼保健操 2.0.1-Snapshot第一节:
(→_→)(↑_↑)(←_←)(↓_↓)(→_→)(↑_↑)(←_←)(↓_↓)(→_→)(↑_↑)(←_←)(↓_↓)(→_→)(↑_↑)(←_←)(↓_↓)
第二节:(→_←)(↑_↓)(←_→)(↓_↑)(→_←)(↑_↓)(←_→)(↓_↑)(→_←)(↑_↓)(←_→)(↓_↑)(→_←)(↑_↓)(←_→)(↓_↑)
第三节:(→_↑)(←_↑)(↓_←)(↓_→)(→_↑)(←_↑)(↓_←)(↓_→)(→_↑)(←_↑)(↓_←)(↓_→)(→_↑)(←_↑)(↓_←)(↓_→)
第四节:(↖_↗)(↘_↙)(↖_↘)(↙_↗)(↖_↗)(↘_↙)(↖_↘)(↙_↗)(↖_↗)(↘_↙)(↖_↘)(↙_↗)(↖_↗)(↘_↙)(↖_↘)(↙_↗)
top related