Socket分片:基于Netty的Java实现
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近Nginx发布了1.9.1版,其中一个新的特性就是支持socket的SO_REUSEPORT选项。这个socket的SO_REUSEPORT选项已经有许多现实世界的应用。对NGINX而言,它通过将连接均衡的分给多个进程以提升性能。SO_REUSEPORT已经在一些操作系统上实现了支持。这个选项允许多个socket监听同一个IP地址+端口。内核负载均衡这些进来的sockets连接,将这些socket有效的分片。 尽管Java很早就有一个特性请求:JDK-6432031,但是时至今日,Oracle JDK依然不支持这个选项,因此我们只能通过hack的方式在Java中使用此特性。 Google已经在内部服务器中开启了 SO_REUSEPORT 这个特性: Scaling Techniques for Servers with High Connection Rates ####SO_REUSEPORT 就像聂永的博客中所说: 运行在Linux系统上网络应用程序,为了利用多核的优势,一般使用以下比较典型的多进程/多线程服务器模型: 单线程listen/accept,多个工作线程接收任务分发,虽CPU的工作负载不再是问题,但会存在: 单线程listener,在处理高速率海量连接时,一样会成为瓶颈;