# router-parallel **Repository Path**: zhuchaoyang1/router-parallel ## Basic Information - **Project Name**: router-parallel - **Description**: 组件为路由提供了丰富的请求方式,包括Netty、HTTP方式;在传输过程中支持数据的多种序列化方式,包含但不限于JSON、Protubuf - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 4 - **Created**: 2021-08-30 - **Last Updated**: 2023-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Description ## Background: **Router-Parallel-Starter**模块内置了两种场景:**NettyAdapterTemplate**、**RestAdapterTemplate** - **NettyAdapterTemplate** 略 - **RestAdapterTemplate** | Key | Value | | ------------------ | ----- | | MaxTotal | 10000 | | DefaultMaxPerRoute | 10000 | (注:压测模拟了10000笔请求,为了最大化减少TCP连接次数,因此**RestAdapterTemplate**中将维护10000个长链接供给HTTP请求,在生产环境中维护10000个长链接应该是个不小的开销。) ## JMeter 压测说明: | Key | Value | | ------------------------- | ----- | | Number of Threads (users) | 10000 | | Ramp-up period (seconds) | 0 | | Loop Count | 1 | ### Result: | Samples | Average | Median | 90% Line | 99% Line | Error % | TPS | KeepAlive Thread Num | | ----------- | ------- | ------ | -------- | -------- | ------- | ---------- | -------------------- | | Netty-10000 | 4872 | 4704 | 5731 | 6406 | 3.53% | 1650.2/sec | - | | Rest-10000 | 3677 | 4363 | 5087 | 5769 | 22.47% | 1536.6/sec | 10000 | | Rest-10000 | 12545 | 12976 | 15262 | 16041 | 14.83% | 617.1/sec | 1000 | **Description:** 多次试验发现:当**RestAdapterTemplate**中长链接维护数每下降一些,两者的**TPS**就会相差的越大; **The main error messages are as follows**: ```txt java.net.SocketException: No buffer space available (maximum connections reached?): connect ``` 上述异常的原因是因为机器的可用端口数量有限, 要知道在TCP网络模型中,面向开发者最终的``Socket``四元组,在服务端绑定了固定端口之后,客户端发情请求是占用随机端口的, 并且``TCP``链路不会随着四次挥手而立即断开,而是进入``Time_Wait``状态,这个状态的时常因各个系统的配置不同,多则持续几分钟, 基于此背景下,客户端占用的随机端口因链路未断开导致随机端口一直被占用。最终导致发送端无可用随机端口。 ### 模块说明 项目分为三个模块: - bond-server 改模块为简单的业务服务模块,内部也引入了``router-parallel-starter``模块,并实现模块中``AbstractHandlerProcessor``接口并将其注册到``router-parallel-starter``中 - router-parallel-server 这里是真正的流量的入口,内部引入了``router-parallel-starter``模块,将流量分流到各个业务模块中 - router-parallel-starter 这是本项目的核心模块,改模块本身并不接受请求,只是作为Starter以Maven的形式嵌入在真正的路由服务、各个业务服务中; 内部基于``Netty``、``Http``协议方式进行流量转发,未来还将支持``Kafka``中