lec17
dz / distributed_systems_MIT / lec17Summary
Lecture 17: COPS, Causal Consistency
Node Tree
- eventual_consistency
- strawman_designs
- COPS
Nodes
| data_multiple_centers | |
| content | Data in multiple centers |
| children | data_duplicated_across |
| parents | COPS |
| close_to_users | |
| content | Want: data close to users |
| children | data_duplicated_across |
| parents | COPS |
| data_duplicated_across | |
| content | Data duplicated across multiple data centers |
| parents | data_multiple_centers, close_to_users |
| spanner_similar_pattern | |
| content | Spanner follows this similar pattern |
| parents | COPS |
| writes_procede_locally | |
| content | Can we have a system where writes procede locally? |
| parents | COPS |
| local_reads_writes | |
| content | Local reads, local writes |
| parents | COPS |
| strawman_designs | |
| content | Strawman designs |
| children | strawman_1, strawman_2 |
| strawman_1 | |
| content | Strawman 1 |
| children | good_perf, lots_of_parallelism, queue_outstanding_writes, reads_less_than_writes |
| parents | strawman_designs, eventual_consistency |
| queue_outstanding_writes | |
| content | Queue of outstanding writes to send to others |
| parents | strawman_1 |
| good_perf | |
| content | Good performance |
| parents | strawman_1 |
| lots_of_parallelism | |
| content | Lots of parallelism |
| parents | strawman_1 |
| reads_less_than_writes | |
| content | Reads are less work than writes |
| parents | strawman_1 |
| eventual_consistency | |
| content | Eventual Consistency |
| children | concurrent_writes_conflicts, strawman_1, weak_spec, which_write_is_recent, writes_stops_eventually_same (description), anomaly |
| writes_stops_eventually_same | |
| content | If writes stop, everything eventually has same data |
| parents | eventual_consistency |
| which_write_is_recent | |
| content | Which write is most recent? |
| children | versioning |
| parents | eventual_consistency |
| versioning | |
| content | Versioning |
| children | wall_clock |
| parents | which_write_is_recent |
| wall_clock | |
| content | Wall clock |
| children | clocks_not_in_sync, same_timestamp |
| parents | versioning |
| clocks_not_in_sync | |
| content | Clocks not in sync? |
| children | lamport_clocks (solution) |
| parents | wall_clock |
| lamport_clocks | |
| content | Lamport Clocks |
| children | t_max, timestamps_related_realtime_cope_fast_clocks (description) |
| parents | clocks_not_in_sync |
| same_timestamp | |
| content | Same timestamp? |
| children | use_id_from_datacenter |
| parents | wall_clock |
| use_id_from_datacenter | |
| content | Use ID from datacenter |
| children | placed_bottom_bits |
| parents | same_timestamp |
| placed_bottom_bits | |
| content | placed in bottom bits |
| parents | use_id_from_datacenter |
| anomaly | |
| content | Anomaly |
| parents | eventual_consistency |
| weak_spec | |
| content | Weak spec, lots of freedom in implementation |
| parents | eventual_consistency |
| timestamps_related_realtime_cope_fast_clocks | |
| content | A way to assign timestamps that are related to relatime, but cope with fast clocks. |
| parents | lamport_clocks |
| t_max | |
| content | T_max: highest version it has seen |
| children | calculate_t |
| parents | lamport_clocks |
| calculate_t | |
| content | T = (T_max + 1, real time) |
| parents | t_max |
| concurrent_writes_conflicts | |
| content | Concurrent writes causing conflicts |
| children | last_writer_wins, more_sophisticated_conflict_resolution, no_good_answer |
| parents | eventual_consistency |
| no_good_answer | |
| content | "real puzzle". No good answer |
| parents | concurrent_writes_conflicts |
| last_writer_wins | |
| content | Last writer wins policy |
| parents | concurrent_writes_conflicts |
| more_sophisticated_conflict_resolution | |
| content | More sophisticated conflict resolution |
| parents | concurrent_writes_conflicts |
| strawman_2 | |
| content | Strawman 2 |
| children | eventual_consistency_barriers, sync_operator |
| parents | strawman_designs |
| eventual_consistency_barriers | |
| content | Eventual consistency plus barriers |
| children | requires_careful_thought |
| parents | strawman_2 |
| sync_operator | |
| content | Sync Operator |
| children | encode_order_instead_of_waiting, quorum_avoid_faults, waits_until_version |
| parents | strawman_2 |
| waits_until_version | |
| content | Waits until all data centers know at least up to version number |
| children | key_version |
| parents | sync_operator |
| key_version | |
| content | Key, version number |
| parents | waits_until_version |
| requires_careful_thought | |
| content | Requires careful thought from the programmer to use |
| parents | eventual_consistency_barriers |
| quorum_avoid_faults | |
| content | Use of quorum to avoid fault tolerance problems |
| parents | sync_operator |
| encode_order_instead_of_waiting | |
| content | Instead of waiting, encode the order |
| children | designated_log_server |
| parents | sync_operator |
| designated_log_server | |
| content | Each data center has designated log server in charge of communicating to other data centers |
| children | non_scalable_solution, sent_log_order, all_writes_through_log_server |
| parents | encode_order_instead_of_waiting |
| non_scalable_solution | |
| content | non-scalable solution |
| children | all_writes_through_log_server |
| parents | designated_log_server |
| sent_log_order | |
| content | Sent in log ordre |
| parents | designated_log_server |
| all_writes_through_log_server | |
| content | All writes go through log server |
| children | eliminate_central_log |
| parents | designated_log_server, non_scalable_solution |
| eliminate_central_log | |
| content | How to elimante central log server? |
| parents | all_writes_through_log_server |
| non_GT_COPS | |
| content | non-GT COPS |
| children | context_accumulates_puts_gets, get_transaction (abbrevation), cascading_wait_problem |
| parents | COPS |
| get_transaction | |
| content | GT = get transaction |
| parents | non_GT_COPS |
| cascading_wait_problem | |
| content | Cascading wait problem |
| parents | non_GT_COPS |
| context_accumulates_puts_gets | |
| content | Context that accumulates puts/gets |
| children | deps_in_put |
| parents | non_GT_COPS |
| deps_in_put | |
| content | Dependencies in "put" |
| children | passed_to_local_shard |
| parents | context_accumulates_puts_gets |
| passed_to_local_shard | |
| content | Passed to local shard server |
| parents | deps_in_put |
| causal_consistency | |
| content | Causal Consistency |
| children | causal_dependency, dep_relationship_transitive, no_obligations_if_not_causal, actions_induce_dependencies (description) |
| parents | COPS |
| actions_induce_dependencies | |
| content | Clients actions induce dependencies |
| children | client_put_dep_prev_put, get_corr_put |
| parents | causal_consistency |
| client_put_dep_prev_put | |
| content | Client put/get, get/put, or put/put depends on previous put |
| parents | actions_induce_dependencies |
| get_corr_put | |
| content | Client get corresponds to a put |
| parents | actions_induce_dependencies |
| dep_relationship_transitive | |
| content | Dependency relationship is transitive |
| parents | causal_consistency |
| causal_dependency | |
| content | Causal Dependency |
| children | client_reads_b_sees_a |
| parents | causal_consistency |
| no_obligations_if_not_causal | |
| content | If updates not causally related, no obligations about maintaining order. |
| parents | causal_consistency |
| client_reads_b_sees_a | |
| content | If A depends on B, and client reads B, the client is guaranteed to see A |
| parents | causal_dependency |
| only_aware_certain_relationships | |
| content | Only aware of certain relationships |
| parents | COPS |
| larger_scheme_causality_other_channels | |
| content | In the larger scheme: causality is often conveyed through channels not aware of by COPS |
| parents | COPS |
| remarks | this was kind of vague in the lecture. There was an example given about a human operator calling another human to explicitely look at a node because it updated. |
| situations_no_desired_order_reads_writes | |
| content | Situations where no one order of reads or writes will yield desired behavior. |
| children | ACL, transactions (mechanism used to help with this (I think?)), at_least_new_as_deps |
| parents | COPS |
| transactions | |
| content | Transactions |
| parents | situations_no_desired_order_reads_writes |
| ACL | |
| content | ACL (Access Control List) |
| children | mutually_consistent_ACL |
| parents | situations_no_desired_order_reads_writes |
| at_least_new_as_deps | |
| content | At least as new as dependencies |
| parents | situations_no_desired_order_reads_writes |
| mutually_consistent_ACL | |
| content | How to get mutually consistent ACL? |
| children | COPS_GT (solution) |
| parents | ACL |
| COPS_GT | |
| content | COPS GT |
| parents | mutually_consistent_ACL |
| remarks | Not elaborated on in lecture (out of time) |