lec06
dz / distributed_systems_MIT / lec06Summary
RAFT part 1
Node Tree
- 
raft
- problems_solved
 - time_diagram
 - automated_failover
 - early_systems
 - library_implementation
 - logs_diverge
 - majority_vote
 - network_failures
 - operation_log
 
 - failure
 
Nodes
| raft | |
| content | RAFT | 
| children | problems_solved (Problems that RAFT solves), time_diagram, automated_failover, early_systems, library_implementation (how it's typically used in practice), logs_diverge (raft ensures identical long term), majority_vote (Core principle), network_failures, operation_log | 
| problems_solved | |
| content | Problems Solved | 
| children | prevent_split_brain, replication_patterns (example) | 
| parents | raft | 
| replication_patterns | |
| content | Common Patterns Found in Replication Systems | 
| children | single_entity (The main pattern being observed), vmware_ft (example), GFS (example), MR (example) | 
| parents | problems_solved | 
| GFS | |
| content | GFS Replication: datat relies on single master | 
| parents | replication_patterns | 
| MR | |
| content | MapReduce: replicates communication, but controlled by single master | 
| parents | replication_patterns | 
| vmware_ft | |
| content | VMWare FT: relies on single test and set server | 
| parents | replication_patterns | 
| single_entity | |
| content | Single Entity to decide critical decisions | 
| children | single_point_of_failure (single entity -> single point of failure) | 
| parents | replication_patterns | 
| single_point_of_failure | |
| content | This is a single point of failure | 
| parents | single_entity | 
| prevent_split_brain | |
| content | prevent split brain | 
| children | partition | 
| parents | problems_solved | 
| partition | |
| content | Partition: sides that can't communicate | 
| parents | prevent_split_brain, automated_failover | 
| flashcard (front) | Partition (RAFT) | 
| flashcard (back) | Refers to sides that can't communicate | 
| automated_failover | |
| content | automated failover systmes that can partition | 
| children | partition | 
| parents | raft | 
| majority_vote | |
| content | RAFT centers around the principle of a majority vote | 
| children | quorem_systems, total_number, assemble_majority, leader_election, odd_number (required to prevent ties), overlap (This is an important property of the majority vote.) | 
| parents | raft | 
| total_number | |
| content | Out of total number of servers, not just active servers | 
| parents | majority_vote | 
| odd_number | |
| content | Odd number of servers required to prevent ties | 
| parents | majority_vote | 
| assemble_majority | |
| content | Assemble majority before doing anything | 
| parents | majority_vote | 
| quorem_systems | |
| content | Majority Vote is also known as being a "Quarom"(sp?) system | 
| parents | majority_vote | 
| overlap | |
| content | Any two majorities overlap for at least one server | 
| parents | majority_vote | 
| early_systems | |
| content | Early Systems that implemented something like RAFT | 
| children | vsr, paxos | 
| parents | raft | 
| paxos | |
| content | Paxos | 
| parents | early_systems | 
| vsr | |
| content | View Stamp Replication (VSR) | 
| parents | early_systems | 
| library_implementation | |
| content | RAFT is typically implemented/used as a library | 
| children | raft_layer | 
| parents | raft | 
| operation_log | |
| content | Operation Log | 
| children | log_focused | 
| parents | raft | 
| raft_layer | |
| content | Application Architecture has a RAFT Layer | 
| parents | library_implementation | 
| time_diagram | |
| content | Time Diagram: used to visualize communications between leader/followers and client request | 
| parents | raft | 
| log_focused | |
| content | Log Focused. Why? | 
| children | rejoin, resend_replicas, tentative_ops, mechanism_ordering | 
| parents | operation_log | 
| mechanism_ordering | |
| content | Mechanism for Ordering Operations | 
| parents | log_focused | 
| tentative_ops | |
| content | Place to set aside tentative operations (for the follower) | 
| parents | log_focused | 
| resend_replicas | |
| content | Way to resend events to replicas (leader) | 
| parents | log_focused | 
| rejoin | |
| content | Means to rejoin | 
| parents | log_focused | 
| failure | |
| content | If there's a failure, what did the logs see? | 
| remarks | Didn't connect to anything | 
| logs_diverge | |
| content | logs sometimes diverge | 
| parents | raft | 
| leader_election | |
| content | Leader Election | 
| children | term, zero_leaders, leader_partition_minority, majority_rule, possible_no_leader | 
| parents | majority_vote | 
| term | |
| content | Term for a leader | 
| children | at_most_one (at most one leader), election_timer, no_one_can_append | 
| parents | leader_election | 
| possible_no_leader | |
| content | It's possible when designing these systems to not have a leader (leaderless), but using a leader yields better performance | 
| parents | leader_election | 
| at_most_one | |
| content | At most one leader per term | 
| parents | term | 
| majority_rule | |
| content | Majority Rule: allows election to happen if something crashes | 
| children | client_no_response (Appends from old leader can never happen due to the majority rule), no_one_can_append | 
| parents | leader_election | 
| election_timer | |
| content | Election Timer | 
| children | random_split_votes, atleast_heartbeat, if_expires (start election if expires), max_election_timer | 
| parents | term | 
| if_expires | |
| content | If election timer expires, start election | 
| children | term++ | 
| parents | election_timer | 
| term++ | |
| content | Increment term number on new election | 
| children | request_votes | 
| parents | if_expires | 
| request_votes | |
| content | Request Votes | 
| parents | term++ | 
| no_one_can_append | |
| content | No one can append entries unless they are leader for that term. | 
| parents | majority_rule, term | 
| random_split_votes | |
| content | The chance of split votes are reduced by randomizing the election timer amount | 
| children | choose_new_random | 
| parents | election_timer | 
| zero_leaders | |
| content | What if zero leaders? | 
| children | failure_rest | 
| parents | leader_election | 
| failure_rest | |
| content | Failed election. Reset. | 
| parents | zero_leaders | 
| atleast_heartbeat | |
| content | At least as long as heartbeat | 
| parents | election_timer | 
| max_election_timer | |
| content | What should the max election timer time be? | 
| children | longer_delay, longer_than_roundtrip | 
| parents | election_timer | 
| longer_delay | |
| content | Longer delay means longer recovery time (slower client requests) | 
| parents | max_election_timer | 
| longer_than_roundtrip | |
| content | Should be longer than the roundtrip latency of for making an election | 
| parents | max_election_timer | 
| choose_new_random | |
| content | Choose new random number on each reset | 
| parents | random_split_votes | 
| leader_partition_minority | |
| content | What if? Leader in partition with minorty due, to network failure? | 
| children | client_no_response | 
| parents | leader_election | 
| client_no_response | |
| content | The client will never hear a response, because this leader has a minority and no append will ever happen. | 
| parents | majority_rule, leader_partition_minority | 
| append_entries_to_subset | |
| content | What happens if a leader appends to subset of entries? | 
| children | divergent_logs | 
| parents | network_failures | 
| network_failures | |
| content | Problems due to network failures | 
| children | append_entries_to_subset | 
| parents | raft | 
| divergent_logs | |
| content | How does new leader sort out divergent logs? | 
| children | log_combos | 
| parents | append_entries_to_subset | 
| log_combos | |
| content | visualize hypothetical log combinations from different servers | 
| children | could_it_happen | 
| parents | divergent_logs | 
| could_it_happen | |
| content | important to ask: could it happen? Could it actually occur? | 
| parents | log_combos |