当前位置:网站首页>[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
边栏推荐
- 【网络攻防原理与技术】第5章:拒绝服务攻击
- Flask build API service SQL configuration file
- 无法链接远程redis服务器(解决办法百分百)
- 【可信计算】第十二次课:TPM授权与会话
- Audio device strategy audio device output and input selection is based on 7.0 code
- 请将磁盘插入“U盘(H)“的情况&无法访问 磁盘结构损坏且无法读取
- rpcms获取指定分类下的文章的方法
- How to implement safety practice in software development stage
- [source code interpretation] | source code interpretation of livelistenerbus
- 从DevOps到MLOps:IT工具怎样向AI工具进化?
猜你喜欢
Toast will display a simple prompt message on the program interface
本周小贴士#136:无序容器
What is cloud computing?
Matplotlib绘图界面设置
Sator a lancé le jeu web 3 "satorspace" et a lancé huobi
PLC: automatically correct the data set noise, wash the data set | ICLR 2021 spotlight
Devops' operational and commercial benefits Guide
【信息安全法律法规】复习篇
命令模式 - Unity
【分布式理论】(二)分布式存储
随机推荐
textSwitch文本切换器的功能和用法
A tour of grpc:03 - proto serialization / deserialization
【OKR目标管理】价值分析
How to mount the original data disk without damage after the reinstallation of proxmox ve?
【解惑】App处于前台,Activity就不会被回收了?
Smart logistics platform: make overseas warehouses smarter
First in China! Todesk integrates RTC technology into remote desktop, with clearer image quality and smoother operation
ViewSwitcher的功能和用法
Dateticket and timeticket, functions and usage of date and time selectors
本周小贴士#141:注意隐式转换到bool
centos7安装mysql笔记
Flash build API Service - generate API documents
【分布式理论】(一)分布式事务
【网络攻防原理与技术】第3章:网络侦察技术
Functions and usage of imageswitch
LeetCode 497(C#)
The computer cannot add a domain, and the Ping domain name is displayed as the public IP. What is the problem? How to solve it?
What is cloud computing?
Audio device strategy audio device output and input selection is based on 7.0 code
【信息安全法律法规】复习篇