lec16
dz / distributed_systems_MIT / lec16Summary
Lecture 16: Facebook and Memcached
Node Tree
- how_to_start_web_app
- memcached
Nodes
how_to_start_web_app | |
content | How to start a web app |
children | second_approach, single_computer, third_approach |
single_computer | |
content | single computer |
children | few_users, mysql, php, second_approach (next), too_much_cpu (early problem that arises: php takes up too much CPU) |
parents | how_to_start_web_app |
few_users | |
content | Few Users |
parents | single_computer |
php | |
content | PHP |
children | too_much_cpu (too much CPU on single computer) |
parents | single_computer |
mysql | |
content | MySQL |
children | db_server_out_of_steam, mysql_expensive |
parents | single_computer |
too_much_cpu | |
content | Too much CPU |
children | scale_out_frontend (solution) |
parents | php, single_computer |
second_approach | |
content | Second Approach |
children | db_server_out_of_steam, scale_out_frontend, third_approach (next) |
parents | how_to_start_web_app, single_computer |
scale_out_frontend | |
content | Scale out frontend servers running PHP |
parents | too_much_cpu, second_approach |
db_server_out_of_steam | |
content | Database server runs out of steam |
parents | mysql, second_approach |
third_approach | |
content | Third Approch |
children | fourth_approach (next), multiple_FE_BE_servers, mysql_expensive, sharding |
parents | how_to_start_web_app, second_approach |
multiple_FE_BE_servers | |
content | Multiple frontend and backend servers |
parents | third_approach |
sharding | |
content | Sharding |
parents | third_approach |
mysql_expensive | |
content | mysql is expensive, not fast |
children | run_out_of_steam_reads |
parents | mysql, third_approach |
run_out_of_steam_reads | |
content | Runs out of steam for reads |
children | use_caching (solution) |
parents | mysql_expensive |
use_caching | |
content | Use Caching |
parents | run_out_of_steam_reads |
fourth_approach | |
content | Fourth Approach |
children | caching_layer |
parents | third_approach |
caching_layer | |
content | Use a caching layer |
parents | memcached, fourth_approach |
memcached | |
content | Memcached |
children | gutter, lookaside_cache, mc_fails_db_load_increases, regional_pool, stay_synced_with_db, thundering_herd, 10x_faster_reads, caching_layer |
content | |
children | east_west_datacenter, lookaside_cache, performance_architecture, consistency |
10x_faster_reads | |
content | 10x faster than database reads |
parents | memcached |
lookaside_cache | |
content | lookaside cache |
children | lookthrough_cache (verses), neutral_about_db, read_operation, write_operation |
parents | facebook, memcached |
lookthrough_cache | |
content | look-through cache |
parents | lookaside_cache |
neutral_about_db | |
content | Neutral about database |
parents | lookaside_cache |
stay_synced_with_db | |
content | How to stay synchronized with database? |
parents | memcached |
mc_fails_db_load_increases | |
content | If Memcached fails, database load increases |
children | db_shouldnt_see_full_load |
parents | memcached |
db_shouldnt_see_full_load | |
content | Database shouldn't see full load |
parents | mc_fails_db_load_increases |
stale_data_okay | |
content | Stale data (seconds) okay |
parents | consistency |
consistency | |
content | Consistency |
children | lots_of_copies_of_data, stale_data_okay, users_should_see_their_changes |
parents |
users_should_see_their_changes | |
content | If a user changes data, they should be able to see it |
parents | consistency |
east_west_datacenter | |
content | East/West Datacenter |
parents |
read_operation | |
content | read: if v = get(k); if v is nil: v = [fetch from DB]; set(k, v) |
parents | lookaside_cache |
write_operation | |
content | write: send kv to database, then delete(k) |
children | delete_needed |
parents | lookaside_cache |
delete_needed | |
content | Delete needed so frontends will see their own writes |
children | invalidates_key |
parents | write_operation |
invalidates_key | |
content | Invalidates key |
parents | delete_needed |
performance_architecture | |
content | Performance Architecture |
children | parallel_execution, partition, replicate |
parents |
parallel_execution | |
content | Parallel Execution |
parents | performance_architecture |
replicate | |
content | Replicate |
children | few_tcp_connections, good_hot_keys, less_total_data, regions |
parents | performance_architecture |
partition | |
content | Partition |
children | memory_efficient, not_good_hot_keys, 50ms_latency, client_talks_every_part |
parents | performance_architecture |
memory_efficient | |
content | Memory Efficient |
parents | partition |
not_good_hot_keys | |
content | Not good for hot keys |
children | good_hot_keys (verses) |
parents | partition |
client_talks_every_part | |
content | Client talks to every partition |
children | few_tcp_connections (verses) |
parents | partition |
good_hot_keys | |
content | Good for hot keys |
parents | replicate, not_good_hot_keys |
few_tcp_connections | |
content | Few TCP connections |
parents | replicate, client_talks_every_part |
less_total_data | |
content | Less total data |
parents | replicate |
50ms_latency | |
content | 50ms Latency Across country |
children | localized_faster_reads (Removes latency caused by traveling across country) |
parents | partition |
regions | |
content | Regions |
children | db_servers, localized_faster_reads, regional_pool |
parents | replicate |
localized_faster_reads | |
content | Localized, faster reads |
parents | 50ms_latency, regions |
db_servers | |
content | Database servers |
children | clusters |
parents | regions |
clusters | |
content | Clusters |
children | why_multicluster |
parents | db_servers |
why_multicluster | |
content | Why Multicluster? |
children | helps_popular_keys (a reason), parallel_serving (a_reason), data_spread |
parents | clusters |
regional_pool | |
content | Regional (memcached) Pool |
children | less_popular_keys_go_here |
parents | regions, memcached |
helps_popular_keys | |
content | Helps with popular keys |
children | parallel_serving |
parents | why_multicluster |
parallel_serving | |
content | Parallel Serving |
parents | helps_popular_keys, why_multicluster |
communication_overhead | |
content | Lots of communication overhead (TCP) |
parents | data_spread |
data_spread | |
content | Data spread over all memcached servers |
children | communication_overhead |
parents | why_multicluster |
less_popular_keys_go_here | |
content | Less popular keys go here |
parents | regional_pool |
thundering_herd | |
content | Thundering Herd |
children | delete_popular_key, high_load_on_same_key (how it gets its name), lease |
parents | memcached |
lease | |
content | Lease |
parents | thundering_herd, high_load_on_same_key |
delete_popular_key | |
content | Deleting a popular key |
children | high_load_on_same_key (causes) |
parents | thundering_herd |
high_load_on_same_key | |
content | Causes high load on same key |
children | lease (solution) |
parents | delete_popular_key, thundering_herd |
gutter | |
content | Gutter |
children | idle_except_on_failure |
parents | memcached |
idle_except_on_failure | |
content | Idle, except when memcached fails |
parents | gutter |
lots_of_copies_of_data | |
content | Lots of copies of data |
parents | consistency |