103 lines
1.3 KiB
Markdown
103 lines
1.3 KiB
Markdown
|
---
|
||
|
style: |
|
||
|
img[alt~="center"] {
|
||
|
display: block;
|
||
|
margin: 0 auto;
|
||
|
}
|
||
|
|
||
|
h3 {
|
||
|
font-size: 1.2em;
|
||
|
position: fixed;
|
||
|
top: 1em;
|
||
|
left: 50%;
|
||
|
transform: translateX(-50%);
|
||
|
}
|
||
|
|
||
|
h4 {
|
||
|
text-align: center;
|
||
|
font-size: 1.2em;
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
img[alt~="top-m"] {
|
||
|
margin-top: 40px;
|
||
|
}
|
||
|
|
||
|
---
|
||
|
|
||
|
# A Paxos implementation
|
||
|
|
||
|
Andre Henriques
|
||
|
|
||
|
---
|
||
|
|
||
|
# Basis of the implentation
|
||
|
|
||
|
|
||
|
![Structure](./structure.png) ![Steps](./steps.png)
|
||
|
|
||
|
---
|
||
|
|
||
|
# Steps
|
||
|
|
||
|
```elixir
|
||
|
receive do
|
||
|
{:leader_elector, proc} -> ...
|
||
|
{:propose, inst, value, t, pid_to_inform} -> ...
|
||
|
{:prepare, proc, inst, ballot} -> ...
|
||
|
{:nack, inst, ballot} -> ...
|
||
|
{:prepared, inst, ballot, accepted_ballot, accepted_value} -> ...
|
||
|
{:accept, inst, ballot, value} -> ...
|
||
|
{:accepted, inst, ballot} -> ...
|
||
|
{:decide, inst, value} -> ...
|
||
|
end
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
### Step 1 - "Requirements"
|
||
|
|
||
|
![50% center](./first-step.png)
|
||
|
|
||
|
---
|
||
|
|
||
|
### Step 2 - "Prepare"
|
||
|
|
||
|
![w:600 center](./second-step.png)
|
||
|
|
||
|
---
|
||
|
|
||
|
### Step 3 - "Accept"
|
||
|
|
||
|
![w:600 center](./third-step.png)
|
||
|
|
||
|
---
|
||
|
|
||
|
### Step 4 - "Leader Crash"
|
||
|
|
||
|
![w:600 center](./fourth-step.png)
|
||
|
|
||
|
---
|
||
|
|
||
|
# Application
|
||
|
|
||
|
---
|
||
|
|
||
|
### Atomas
|
||
|
|
||
|
![w:300 center top-m](./atomas.png)
|
||
|
|
||
|
|
||
|
---
|
||
|
|
||
|
## Safety
|
||
|
- If a game state exists, then it was created by a user
|
||
|
- The game state can not divert.
|
||
|
|
||
|
## Liveness
|
||
|
- Eventually all users will have the same game state
|
||
|
|
||
|
---
|
||
|
|
||
|
#### Questions?
|