当前位置:网站首页>Distributed consensus mechanism
Distributed consensus mechanism
2020-11-08 04:49:00 【The name of algorithm】
- C/S Pattern
- Let's start with the simplest two computers , One is the server , One is the client , namely C/S Pattern . The client wants to manipulate the data on the server node .
- Since the client wants to manipulate the data on the server , Network communication is necessary , dispatch orders . But we can't guarantee that every message sent by the client will be received by the server .
- So when the server receives the message , A confirmation message will be sent to the client , If the client does not receive the confirmation message sent by the server , The client will resend the same message command .
- But the time when the client sends a message command to the server may be different . The time when the server sends the confirmation message to the client is also different .
- This will result in different order of message commands received between multiple servers and multiple clients . Between different servers , Their states are different .
- For a group of servers , If all servers execute a sequence of commands in the same order ( This set of commands may be sent by multiple clients ), This group of servers implements state replication . Because it's easier for a single server to do this , We usually only send message commands to a single server , A single server must also execute a sequence of commands in a sequence .
- When a single server receives a command , It can forward this command to other servers . When it receives confirmation from other servers , It will inform the client that the command has been successfully executed .
- A single server is prone to downtime , If we don't use a single server to forward commands , It's a two-phase commit , A client tries to get all the server locks first , If you get all the server locks , Start sending commands . In this way, all servers will not be able to receive commands from other clients , Ensure the order consistency of all servers , After the client sends the command, it releases all the server locks . If this client can't get all the server's locks , Release the lock of the server you get , Wait for a while , Try to get all the server locks again . Of course, to save time , We believe that the client can start to execute the command after getting half of the server's lock , Because one client gets half of the server's locks , Then other clients can't get most of the server's locks , In this way, clients who only get a small number of locks have to release the locks .
- Paxos
When we adopt a two-stage proposal , Instead of a single server forwarding , When multiple clients attempt to acquire the lock of most servers at the same time , What's going to happen ? Whether clients have to release all the locks they acquire , To avoid deadlock . Or the client gets part of the lock and hangs up ?
How about if we let this lock expire ? We call these expired locks tickets . In this way, the server that has not been released will not be locked all the time . First, the client requests a ticket from all servers , Tickets are sent from the server to the client , When the client receives half of the tickets sent from the server , The ticket will be sent to all servers along with the command . If the server finds that the ticket received is the latest one sent out by itself , And it's not overdue , It will give the client a positive feedback . The client received positive feedback from more than half of the server , Will notify All the servers Start executing orders . But the server hasn't been informed by the client to execute the command , It will also continue to accept ticket requests from other clients , And will send an up-to-date ticket to other clients . When other clients get half the votes , New tickets and your own commands will be sent to all servers . At this time, if some servers receive this command and ticket , The previous client that received more than half of the server's positive feedback informed all servers to start executing the command , At this time, the commands of all servers are inconsistent .
版权声明
本文为[The name of algorithm]所创,转载请带上原文链接,感谢
边栏推荐
- 1.深入Istio:Sidecar自动注入如何实现的?
- nvm
- 云计算之路-出海记:整一台 aws 免费云服务器
- golang 匿名结构体成员,具名结构体成员,继承,组合
- leetcode之判断路径是否相交
- 关于晋升全栈工程师,从入门到放弃的神功秘籍,不点进来看一看?
- GET,POST,PUT,DELETE,OPTIONS用法与说明
- 14000 word distributed transaction principle analysis, master all of them, are you afraid of being asked in the interview?
- Ladongo open source full platform penetration scanner framework
- c# 表达式树(一)
猜你喜欢
ubuntu实时显示cpu、内存占用率
C / C + + Programming Notes: what are the advantages of C compared with other programming languages?
Android 9.0/P WebView 多进程使用的问题
C expression tree (1)
Wechat applet request reported 400 error @ requestbody failed to receive
Littlest jupyterhub| 02 using nbgitpuller to distribute shared files
GoLand writes a program with template
The most detailed usage guide for perconaxtradbcluster8.0
学习Scala IF…ELSE 语句
Cryptography - Shangsi Valley
随机推荐
leetcode之判断路径是否相交
Swiper window width changes, page width height changes lead to automatic sliding solution
Windows subsystem Ubuntu installation
Summary of knowledge points of Jingtao project
数据库基本操作
GET,POST,PUT,DELETE,OPTIONS用法与说明
c# 表达式树(一)
Littlest JupyterHub| 02 使用nbgitpuller分发共享文件
Interface
Mouse small hand
CPP (1) installation of cmake
Littlest jupyterhub| 02 using nbgitpuller to distribute shared files
尾-递
Cpp(四) Boost安装及基本使用 for Mac
FORTRAN 77 reads some data from the file and uses the heron iteration formula to solve the problem
What details does C + + improve on the basis of C
面部识别:攻击类型和反欺骗技术
Fortify漏洞之 Privacy Violation(隐私泄露)和 Null Dereference(空指针异常)
Search and replace of sed
Using subprocess residue in supervisor and python multiprocessing