lec13
dz / distributed_systems_MIT / lec13Summary
Spanner
Node Tree
-
spanner
-
goals
- external_consistency
- read_only_transactions
- strong_consistency
- spanner_desc
- synchronized_time
- 2pc_paxos
- challenges
-
goals
Nodes
spanner | |
content | Spanner |
children | goals, spanner_desc, synchronized_time, 2pc_paxos, challenges |
spanner_desc | |
content | Provides distrubuted transactions over data that is widely separated |
parents | spanner |
synchronized_time | |
content | synchronized time |
children | government_labs, transaction_timestamp, uncertainty, clocks_not_synced |
parents | snapshot_isolation, spanner |
2pc_paxos | |
content | 2-phase commit over paxos replicated participants |
children | paxos, 2pc |
parents | spanner |
goals | |
content | goals |
children | external_consistency, read_only_transactions, strong_consistency |
parents | spanner |
read_only_transactions | |
content | Read-only transactions |
children | read_only |
parents | goals |
strong_consistency | |
content | Strong consistency |
children | transactions |
parents | goals |
external_consistency | |
content | External Consistency |
children | ext_cons_def (definition), linearizability, violation_ext_cons |
parents | goals |
challenges | |
content | Challenges |
children | reads_local_data |
parents | spanner |
reads_local_data | |
content | Reads from local data replica for speed |
children | outdated_replica, stay_up_to_date |
parents | challenges |
stay_up_to_date | |
content | How to stay up-to-date? |
children | outdated_replica |
parents | reads_local_data |
outdated_replica | |
content | Local replica may be out of date |
parents | reads_local_data, stay_up_to_date |
transactions | |
content | Transactions |
children | read_only, readwrite, 2_rules |
parents | strong_consistency |
readwrite | |
content | Readwrite |
children | huge_amt_messages, locking_ensures_serialization, 2pc |
parents | transactions |
locking_ensures_serialization | |
content | Locking ensures serialization |
parents | readwrite |
2pc | |
content | 2-phase commit |
children | paxos_instead_of_servers, blocking |
parents | 2pc_paxos, readwrite |
blocking | |
content | blocking |
children | replicate_transaction_mgr (solution) |
parents | 2pc |
paxos | |
content | paxos |
children | replicate_transaction_mgr |
parents | 2pc_paxos |
replicate_transaction_mgr | |
content | Solved by replicating transaction manager |
parents | blocking, paxos |
paxos_instead_of_servers | |
content | Paxos replicated groups instead of individual servers |
parents | 2pc |
huge_amt_messages | |
content | Huge amount of messages |
children | avoiding_preferrable |
parents | readwrite |
avoiding_preferrable | |
content | Slow enough that avoiding is preferrable |
parents | read_only, huge_amt_messages |
read_only | |
content | Read-only |
children | complex_approach, latest_copy_local_replica, local_read, multi_version_db, no_locks, read_lower_ts, snapshot_isolation, still_serializable, avoiding_preferrable (justification for readonly transactions) |
parents | read_only_transactions, transactions |
still_serializable | |
content | Serializable (still) |
parents | read_only |
linearizability | |
content | Linearizability |
parents | external_consistency |
local_read | |
content | Local read |
parents | read_only |
no_locks | |
content | No Locks |
parents | read_only |
latest_copy_local_replica | |
content | What if you simply read the latest copy in the local replica? |
children | not_serializable |
parents | read_only |
not_serializable | |
content | Not serializable |
parents | latest_copy_local_replica |
snapshot_isolation | |
content | Snapshot isolation |
children | synchronized_time, transaction_timestamp |
parents | read_only |
complex_approach | |
content | Complex Approach |
parents | read_only |
ext_cons_def | |
content | If one transaction commits, and another transaction starts in realtime, it is required to see that first commit |
parents | external_consistency |
transaction_timestamp | |
content | Transaction Timestamp |
children | exec_ts_order, blows_up_storage |
parents | snapshot_isolation, synchronized_time |
exec_ts_order | |
content | executions arranged by timestamp order |
parents | transaction_timestamp |
multi_version_db | |
content | Multi-version database |
parents | read_only |
read_lower_ts | |
content | Only read transactions with lower timestamp |
children | stale_data_allowed, too_old |
parents | read_only |
stale_data_allowed | |
content | Stale data allowed because concurrency in linearizability |
children | concurrent |
parents | read_lower_ts |
concurrent | |
content | concurrent |
parents | stale_data_allowed |
blows_up_storage | |
content | Blows up storage |
children | forget_some_history |
parents | transaction_timestamp |
forget_some_history | |
content | forget some history? |
parents | blows_up_storage |
too_old | |
content | What if too old? (not in visible transaction) |
children | safe_time |
parents | read_lower_ts |
safe_time | |
content | Safe Time |
children | replicas_wait_to_respond, true_time (what is produced by safe time (I think?)) |
parents | too_old |
replicas_wait_to_respond | |
content | Replicas do not respond until they know everything |
parents | safe_time |
clocks_not_synced | |
content | What if clocks aren't synced? |
children | ro_ts_too_large, rw_okay, too_slow |
parents | synchronized_time |
rw_okay | |
content | Readwrite transactions are okay, due to locks |
parents | clocks_not_synced |
ro_ts_too_large | |
content | Readonly timestamp too large? |
children | wait_for_paxos |
parents | clocks_not_synced |
wait_for_paxos | |
content | Wait for Paxos leader to catch up |
parents | ro_ts_too_large |
too_slow | |
content | Too slow? |
children | violation_ext_cons |
parents | clocks_not_synced |
violation_ext_cons | |
content | Violation of external consistency |
parents | external_consistency, too_slow |
government_labs | |
content | "Time comes from government labs" |
children | UTC |
parents | synchronized_time |
UTC | |
content | UTC |
children | GPS |
parents | government_labs |
GPS | |
content | GPS Satellite |
children | GPS_rec |
parents | UTC |
GPS_rec | |
content | GPS receiver |
children | time_master |
parents | GPS |
time_master | |
content | Time Master |
children | true_time |
parents | GPS_rec |
uncertainty | |
content | Uncertainty in time |
children | network_var_delay, sat_delay, time_pair (window of time to account for time uncertainty) |
parents | synchronized_time |
sat_delay | |
content | Propagation delay from satellite |
parents | uncertainty |
network_var_delay | |
content | network communication variable delay |
parents | uncertainty |
true_time | |
content | TrueTime |
parents | safe_time, time_master |
time_pair | |
content | Pair of earliest/latest possible times |
parents | uncertainty |
2_rules | |
content | 2 rules for transactions |
children | start_rule (rule), commit_wait (rule) |
parents | transactions |
start_rule | |
content | Start rule |
children | ro_commit, rw_start, start_rule_desc (description) |
parents | 2_rules |
start_rule_desc | |
content | Transaction timestamp has to be equal to latest half of truetime pair. |
children | guaranteed_not_happened |
parents | start_rule |
guaranteed_not_happened | |
content | Guaranteed not to have happned yet |
parents | start_rule_desc |
commit_wait | |
content | Commit Wait |
parents | 2_rules |
rw_start | |
content | R/W start |
parents | start_rule |
ro_commit | |
content | R/O commit |
parents | start_rule |