Netty 的 Reactor 线程模型
目前高性能网络通信服务大多是基于 epoll 机制和多线程模型组合的实现。而 Netty 可依据用户自定义的程序启动参数调整其运行期间的线程模型。Netty 官方推荐使用主从 Reactor 多线程模型。其主要特点是拥有多个线程池,其中主线程池是处理新的客户端连接,处理完新连接后将新建的Socket 绑定到从线程池中的某个线程中;从线程池将负责后续对这个 Socket 的读写、编解码、业务处理工作。设计主从 Reactor 多线程模型的目的是将监听端口服务与处理数据功能剥离开来,从而提高处理数据的能力[15]。在实际应用中,Netty 支持添加多个从线程池,可按照业务特性将不同的业务分配到不同的从线程池处理,或若干个特性相似的业务分配到同一个从线程池。如图 1 所示,主线程池负责响应新连接接入,从线程池 1 负责编解码业务,从线程池 m 负责数据读取业务,做到按特性分配,辅以合理的线程池参数,可令 Netty 的性能更出色。
Kafka 流式消息处理系统
Kafka 的 commit log 队列是 Kafka 消息队列概念的具体实现。生产者向 commit log 队列中发送流式消息,其他消费者可以在毫秒级延时处理这些日志的最新信息。每个数据消费者在 commit log 中有一个自己的指针,并独立移动,从而促使消费者们在分布式环境下能可靠、顺序的处理队列中的消息。commit log