You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
2.6 KiB
Markdown
50 lines
2.6 KiB
Markdown
# 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高性能问题分析
|
|
|
|
```java
|
|
WorkGroup <---- NettyClient -------------------------> NettyServer (BossGroup + WorkGroup)
|
|
| |
|
|
| |
|
|
|/ |/
|
|
ClientHandler ServerHandler[如果业务很复杂的话,耗时很长的话,会影响性能
|
|
| |/
|
|
|/ DATA1
|
|
DATA2 |
|
|
| |
|
|
|/ producer 生产者
|
|
producer 生产者 |
|
|
| |/
|
|
|/ disruptor组件
|
|
disruptor组件 | |
|
|
| | |/ |/
|
|
|/ |/ consumer1 consumer2
|
|
consumer1 consumer2
|
|
```
|
|
|
|
|
|
---
|
|
|
|
* 在使用Netty进行接收处理数据的时候,我们尽量都不要在工作线程上全编写自己的代码逻辑
|
|
* 我们需要利用异步的机制,比如使用线程池异步处理,如果使用线程池就意味着使用阻塞队列,这里可以替换为Disruptor提高性能
|
|
|
|
---
|
|
|
|
* 解决办法
|
|
* ServerHandler的消息处理交给一个异步的线程池去处理即可(数据库持久化操作,IO读写)
|
|
* 采用Disruptor作为异步线程池的替代来进行处理
|