当前位置:网站首页>[re understand the communication model] the application of reactor mode in redis and Kafka
[re understand the communication model] the application of reactor mode in redis and Kafka
2022-07-07 17:37:00 【Lin like】
Re understand the communication model
Each framework has its own communication model , Used to handle network events . It's just that different frameworks depend on their own priorities , The requirements and implementation of network communication are different .
The development of our network communication mode :
- Single thread : Only one request can be processed at a time , Other requests are blocked , Low processing efficiency ;
- Multithreading : One request, one connection , Create a large number of threads , It brings thread switching and maintenance problems , High system complexity ;
- Thread pool : Thread reuse , Thread management , But thread pool resources are limited , There are also thread waiting problems .
- Reactor: Modern high-performance Networks IO Pattern , Use the event driven mechanism .
0,Reactor
Reactor Pattern , Reactor mode , It is an event driven network request processing mode , It is implemented in many high-performance network communication frameworks .
stay Reactor In the pattern , Divide the network processing requests into one event , Specifically, it includes reading events 、 Write events 、 Connection event .
In this mode , There are three key components :reactor、acceptor、handler, Respectively correspond to listening and distributing requests , Connect requests and process requests .
The basic flow : Client requests are first reactor receive ,reactor Distribute the request according to the request type , The connection request will be distributed to acceptor Components , He always monitors the network status , For read requests and write requests, it is given to handler Handle .
meanwhile , According to the different ways of handling ,reactor Modes can be divided into many kinds :
single reactror Single thread : One reactor, One handler;
shortcoming : Single thread , The processing capacity is slow ( Compared with these three ),redis6.0 This method was used before , such as keys * It is easy to block
single reactror Multithreading : One reactor,handler Drop the request to worker Thread pool , Read / write events are handled by the thread pool
Take full advantage of multi-core capabilities ,redis6.0 The multi threading mechanism introduced is this mode , however redis The logic of specific command execution is still single thread .
many reactor Multithreading :mainReactor be responsible for acceptor Handle ,subReactors be responsible for handler Handle
You can see that the performance is very strong ,kafka,netty Have used this mode .
1,Redis Medium Reactor
redis in reactor The mode is embodied in IO Based on multiplexing , say concretely redis For different os Of IO Multiplexing mechanism realizes different reactor Model , such as mac os Of kqueue; Let's mainly talk about Redis be based on Linux Of epoll Functionally implemented reactor Pattern . Be careful : Only epoll It adopts the idea of event driven .
that redis How to reuse epoll What about ?
First through a while Loop constantly listening for network events , Implement different processing strategies according to different events . There are three main types of events , Empty event , Continue polling ; Time event , Call the time handler ; Read and write events , You need to call os Of io The multiplexing mechanism performs event capture . Here is a brief mention of multiplexing functions epoll workflow :
epoll First, through epoll_ctl Function to register a file descriptor , And listen for other file descriptor States , If a fd be ready , The callback mechanism will be adopted callback, Activate this fd And put it in the ready list , Then it is handled by specific threads .
2,Kafka Medium Reactor
kafaka It is also based on Reactor Pattern designed its own network communication framework , Bottom use NIO Medium selector function .
First ,broker There was a stockerserver Will listen and dispatch requests ,acceptor Processing connection requests , Rotate and select one processor Handle this connection . This network thread is handled by parameters num.network.threads=3 control . And then in IO Thread by work Thread specific execution ,num.io.threads=8. After execution , Will reponse Put it in the response queue , And then back to the client . among , Each network thread has its own response queue .
besides ,kafka Added a cache layer ,RequestChannel, Used to cache those delayed requests , Used to handle settings ack=all Of produce request
Some details in the source code :
#SocketServer, Managed two sets acceptor,processor,RequestChannel; Including data requests data-plane, Control request control-plane;
#KafkaRequestHandlerPool,IO Thread pool , The thread that actually processes the request ,KafkaRequestHandler Match and process different requests .
kafka The request process of is the process of network communication , Let's talk about it again , To handle different requests ,kafka Priority the request . It is divided into
Data request : Such as produce request , Write messages to disk ;fetch request , Pull messages from disk or cache pages
Control request : Such as updating the copy and ISR Of leaderAndlsr request , And ordering copies offline stopReplica Request etc.
The benefit of request priority is , Some requests can be processed first , Prevent invalid request processing . such as , When deleting a topic , We will use stopreplica request , So even if it's ack=all Under the circumstances , There is no need to wait ack Complete , You can execute the deletion request , Speed up the process , Avoid invalid operations . The implementation mechanism is , Start the two request processing models mentioned above , And configure different listeners Listen for the request , Then the specified .
Reference link :
select、poll、epoll Detailed analysis of
边栏推荐
- Lex & yacc of Pisa proxy SQL parsing
- LeetCode刷题day49
- 【网络攻防原理与技术】第6章:特洛伊木马
- Linux 安装mysql8.X超详细图文教程
- [video / audio data processing] Shanghai daoning brings you elecard download, trial and tutorial
- LeetCode 648(C#)
- Nerf: the ultimate replacement for deepfake?
- MySQL usage notes 1
- A tour of grpc:03 - proto serialization / deserialization
- Several best practices for managing VDI
猜你喜欢
Sator推出Web3遊戲“Satorspace” ,並上線Huobi
VSCode关于C语言的3个配置文件
textSwitch文本切换器的功能和用法
Is AI more fair than people in the distribution of wealth? Research on multiplayer game from deepmind
麒麟信安中标国网新一代调度项目!
【重新理解通信模型】Reactor 模式在 Redis 和 Kafka 中的应用
mysql官网下载:Linux的mysql8.x版本(图文详解)
With the latest Alibaba P7 technology system, mom doesn't have to worry about me looking for a job anymore
【解惑】App处于前台,Activity就不会被回收了?
第2章搭建CRM项目开发环境(数据库设计)
随机推荐
数值 - number(Lua)
L1-028 判断素数(Lua)
【可信计算】第十三次课:TPM扩展授权与密钥管理
MRS离线数据分析:通过Flink作业处理OBS数据
本周小贴士#134:make_unique与私有构造函数
Matplotlib绘制三维图形
青年时代历练和职业发展
From Devops to mlops: how do it tools evolve to AI tools?
使用 xml资源文件定义菜单
《世界粮食安全和营养状况》报告发布:2021年全球饥饿人口增至8.28亿
L1-019 谁先倒(Lua)
VSCode关于C语言的3个配置文件
Flash build API service
让保险更“保险”!麒麟信安一云多芯云桌面中标中国人寿, 助力金融保险信息技术创新发展
请将磁盘插入“U盘(H)“的情况&无法访问 磁盘结构损坏且无法读取
【网络攻防原理与技术】第6章:特洛伊木马
Flask build API service SQL configuration file
Ratingbar的功能和用法
【TPM2.0原理及应用指南】 9、10、11章
大笨钟(Lua)