土豆兄弟
389ff387ef
1. 实现了基于百万长链接架构的消息推送服务系统 2. 进行了相关的设计及优化配置服务 |
2 years ago | |
---|---|---|
.. | ||
dev-protocol-disruptor-netty-client | 2 years ago | |
dev-protocol-disruptor-netty-common | 2 years ago | |
dev-protocol-disruptor-netty-server | 2 years ago | |
README.md | 2 years ago |
README.md
Disruptor与Netty实现百万级长连接接入
1. 核心模块组成
- Disruptor与Netty整合的服务端实现
- Disruptor与Netty整合的客户端实现
- Netty的高性能
- Disruptor核心池化封装
- 承接百万级连接的接入
2. 启动及结构说明
dev-protocol-disruptor-netty-client 客户端(后启动) dev-protocol-disruptor-netty-common 公用的jar(对Server和Client端同时提供依赖) dev-protocol-disruptor-netty-server 服务端(先启动)
3. Netty高性能问题分析
WorkGroup <---- NettyClient -------------------------> NettyServer (BossGroup + WorkGroup) | | | | |/ |/ ClientHandler ServerHandler[如果业务很复杂的话,耗时很长的话,会影响性能 | |/ |/ DATA1 DATA2 | | | |/ producer 生产者 producer 生产者 | | |/ |/ disruptor组件 disruptor组件 | | | | |/ |/ |/ |/ consumer1 consumer2 consumer1 consumer2
- 在使用Netty进行接收处理数据的时候,我们尽量都不要在工作线程上全编写自己的代码逻辑
- 我们需要利用异步的机制,比如使用线程池异步处理,如果使用线程池就意味着使用阻塞队列,这里可以替换为Disruptor提高性能
- 解决办法
- ServerHandler的消息处理交给一个异步的线程池去处理即可(数据库持久化操作,IO读写)
- 采用Disruptor作为异步线程池的替代来进行处理