当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- What kind of technical ability should a programmer who has worked for 1-3 years? How to improve?
- On the stock trading of leetcode
- VC6兼容性及打开文件崩溃问题解决
- leetcode之判断路径是否相交
- C语言I博客作业03
- Wechat applet request reported 400 error @ requestbody failed to receive
- Goland 编写含有template的程序
- Simple use of future in Scala
- 云计算之路-出海记:整一台 aws 免费云服务器
- Writing method of field and field comparison condition in where condition in thinkphpp6
猜你喜欢
The real-time display of CPU and memory utilization rate by Ubuntu
OSChina 周日乱弹 —— 之前呢,我一直以为自己是个……
GoLand writes a program with template
C language I blog assignment 03
Wechat nickname Emoji expression, special expression causes the list not to be displayed, export excel error report and other problems solved!
Brief history of computer
The emergence and significance of micro service
学习Scala IF…ELSE 语句
The instanceof operator in ecmascript7 specification
About the promotion of the whole stack of engineers, from the introduction to give up the secret arts, do not click in to have a look?
随机推荐
1. In depth istio: how is sidecar auto injection realized?
[solution] distributed timing task solution
高并发,你真的理解透彻了吗?
GoLand writes a program with template
Supervisor process management installation and use
获取树形菜单列表
PerconaXtraDBCluster8.0 最详尽用法指南
Learn Scala if Else statement
什么你的电脑太渣?这几招包你搞定! (Win10优化教程)
哔哩哔哩常用api
leetcode之判断路径是否相交
Do you really understand the high concurrency?
Web Security (3) -- CSRF attack
Codeforce算法题 | 你能想出解法,让你的基友少氪金吗?
On the concurrency of update operation
High concurrency in ngnix cluster
About the promotion of the whole stack of engineers, from the introduction to give up the secret arts, do not click in to have a look?
On the stock trading of leetcode
Wechat applet request reported 400 error @ requestbody failed to receive
Download, installation and configuration of Sogou input method in Ubuntu