当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- 麦格理银行借助DataStax Enterprise (DSE) 驱动数字化转型
- Android Basics - RadioButton (radio button)
- C expression tree (1)
- ubuntu实时显示cpu、内存占用率
- Adobe Lightroom / LR 2021 software installation package (with installation tutorial)
- Learn Scala if Else statement
- Mouse small hand
- Hand tearing algorithm - handwritten singleton mode
- The real-time display of CPU and memory utilization rate by Ubuntu
- C language I blog assignment 03
猜你喜欢
Lay UI left tree Dtree right list table
Sum up some useful functions
Experience the latest version of erofs on Ubuntu
GoLand writes a program with template
Learn Scala if Else statement
Qt混合Python开发技术:Python介绍、混合过程和Demo
VC6兼容性及打开文件崩溃问题解决
Go之发送钉钉和邮箱
Everything is 2020, LINQ query you are still using expression tree
QT hybrid Python development technology: Python introduction, hybrid process and demo
随机推荐
使用 Xunit.DependencyInjection 改造测试项目
golang 匿名结构体成员,具名结构体成员,继承,组合
使用jsDelivr加速你的网站
Judging whether paths intersect or not by leetcode
nvm
Bili Bili common API
14000 word distributed transaction principle analysis, master all of them, are you afraid of being asked in the interview?
Cpp(一) 安装CMake
Using subprocess residue in supervisor and python multiprocessing
Do you really understand the high concurrency?
A compilation bug brought by vs2015 Update1 update [existing solutions]
Blazor 准备好为企业服务了吗?
Tail delivery
IOS upload app store error: this action cannot be completed - 22421 solution
麦格理银行借助DataStax Enterprise (DSE) 驱动数字化转型
数据库基本操作
Unparseable date: 'Mon Aug 15 11:24:39 CST 2016',时间格式转换异常
Littlest JupyterHub| 02 使用nbgitpuller分发共享文件
接口
scala 中 Future 的简单使用