diff --git a/README-ja.md b/README-ja.md index 4257e495..cb6633d5 100644 --- a/README-ja.md +++ b/README-ja.md @@ -3,7 +3,7 @@ # システム設計入門

- +

@@ -44,7 +44,7 @@ ## 暗記カード

- +

@@ -61,7 +61,7 @@ コード技術面接用の問題を探している場合は[**こちら**](https://github.com/donnemartin/interactive-coding-challenges)

- +

@@ -91,7 +91,7 @@ > それぞれのセクションはより学びを深めるような他の文献へのリンクが貼られています。

- +

@@ -180,7 +180,7 @@ > 学習スパンに応じてみるべきトピックス (short, medium, long) -![Imgur](http://i.imgur.com/OfVllex.png) +![Imgur](images/OfVllex.png) **Q: 面接のためには、ここにあるものすべてをやらないといけないのでしょうか?** @@ -302,49 +302,49 @@ [問題と解答を見る](solutions/system_design/pastebin/README.md) -![Imgur](http://i.imgur.com/4edXG0T.png) +![Imgur](images/4edXG0T.png) ### Twitterタイムライン&検索 (もしくはFacebookフィード&検索)を設計する [問題と解答を見る](solutions/system_design/twitter/README.md) -![Imgur](http://i.imgur.com/jrUBAF7.png) +![Imgur](images/jrUBAF7.png) ### ウェブクローラーの設計 [問題と解答を見る](solutions/system_design/web_crawler/README.md) -![Imgur](http://i.imgur.com/bWxPtQA.png) +![Imgur](images/bWxPtQA.png) ### Mint.comの設計 [問題と解答を見る](solutions/system_design/mint/README.md) -![Imgur](http://i.imgur.com/V5q57vU.png) +![Imgur](images/V5q57vU.png) ### SNSサービスのデータ構造を設計する [問題と解答を見る](solutions/system_design/social_graph/README.md) -![Imgur](http://i.imgur.com/cdCv5g7.png) +![Imgur](images/cdCv5g7.png) ### 検索エンジンのキー/バリュー構造を設計する [問題と解答を見る](solutions/system_design/query_cache/README.md) -![Imgur](http://i.imgur.com/4j99mhe.png) +![Imgur](images/4j99mhe.png) ### Amazonのカテゴリ毎の売り上げランキングを設計する [問題と解答を見る](solutions/system_design/sales_rank/README.md) -![Imgur](http://i.imgur.com/MzExP06.png) +![Imgur](images/MzExP06.png) ### AWS上で100万人規模のユーザーを捌くサービスを設計する [問題と解答を見る](solutions/system_design/scaling_aws/README.md) -![Imgur](http://i.imgur.com/jj3A5N8.png) +![Imgur](images/jj3A5N8.png) ## オブジェクト指向設計問題と解答 @@ -436,7 +436,7 @@ ### CAP 理論

- +
Source: CAP theorem revisited

@@ -530,7 +530,7 @@ ## ドメインネームシステム

- +
Source: DNS security presentation

@@ -568,7 +568,7 @@ DNSは少数のオーソライズされたサーバーが上位に位置する ## コンテンツデリバリーネットワーク(Content delivery network)

- +
Source: Why use a CDN

@@ -609,7 +609,7 @@ CDNを用いてコンテンツを配信することで以下の二つの理由 ## ロードバランサー

- +
Source: Scalable system design patterns

@@ -679,7 +679,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通 ## リバースプロキシ(webサーバー)

- +
Source: Wikipedia
@@ -722,7 +722,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通 ## アプリケーション層

- +
Source: Intro to architecting systems for scale

@@ -759,7 +759,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通 ## データベース

- +
Source: Scaling up to your first 10 million users

@@ -782,7 +782,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ マスターデータベースが読み取りと書き込みを処理し、書き込みを一つ以上のスレーブデータベースに複製します。スレーブデータベースは読み取りのみを処理します。スレーブデータベースは木構造のように追加のスレーブにデータを複製することもできます。マスターデータベースがオフラインになった場合には、いずれかのスレーブがマスターに昇格するか、新しいマスターデータベースが追加されるまでは読み取り専用モードで稼働します。

- +
Source: Scalability, availability, stability, patterns

@@ -797,7 +797,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ いずれのマスターも読み取り書き込みの両方に対応する。書き込みに関してはそれぞれ協調する。いずれかのマスターが落ちても、システム全体としては読み書き両方に対応したまま運用できる。

- +
Source: Scalability, availability, stability, patterns

@@ -825,7 +825,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ #### Federation

- +
Source: Scaling up to your first 10 million users

@@ -846,7 +846,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ #### シャーディング

- +
Source: Scalability, availability, stability, patterns

@@ -990,7 +990,7 @@ NoSQL は **key-value store**、 **document-store**、 **wide column store**、 #### ワイドカラムストア

- +
Source: SQL & NoSQL, a brief history

@@ -1013,7 +1013,7 @@ Googleは[Bigtable](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/cha #### グラフデータベース

- +
Source: Graph database

@@ -1041,7 +1041,7 @@ Googleは[Bigtable](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/cha ### SQLか?NoSQLか?

- +
Source: Transitioning from RDBMS to NoSQL

@@ -1083,7 +1083,7 @@ NoSQLに適するサンプルデータ: ## キャッシュ

- +
Source: Scalable system design patterns

@@ -1154,7 +1154,7 @@ Redisはさらに以下のような機能を備えています: #### キャッシュアサイド

- +
Source: From cache to in-memory data grid

@@ -1190,7 +1190,7 @@ def get_user(self, user_id): #### ライトスルー

- +
Source: Scalability, availability, stability, patterns

@@ -1225,7 +1225,7 @@ def set_user(user_id, values): #### ライトビハインド (ライトバック)

- +
Source: Scalability, availability, stability, patterns

@@ -1243,7 +1243,7 @@ def set_user(user_id, values): #### リフレッシュアヘッド

- +
Source: From cache to in-memory data grid

@@ -1275,7 +1275,7 @@ def set_user(user_id, values): ## 非同期処理

- +
Source: Intro to architecting systems for scale

@@ -1321,7 +1321,7 @@ def set_user(user_id, values): ## 通信

- +
Source: OSI 7 layer model

@@ -1353,7 +1353,7 @@ HTTPは**TCP** や **UDP** などの低級プロトコルに依存している ### 伝送制御プロトコル (TCP)

- +
Source: How to make a multiplayer game

@@ -1377,7 +1377,7 @@ TCPは高い依存性を要し、時間制約が厳しくないものに適し ### ユーザデータグラムプロトコル (UDP)

- +
Source: How to make a multiplayer game

@@ -1406,7 +1406,7 @@ TCPよりもUDPを使うのは: ### 遠隔手続呼出 (RPC)

- +
Source: Crack the system design interview

@@ -1629,7 +1629,7 @@ Notes > 世の中のシステムがどのように設計されているかについての記事

- +
Source: Twitter timelines at scale

diff --git a/README-zh-Hans.md b/README-zh-Hans.md index 1b997f3c..15de279c 100644 --- a/README-zh-Hans.md +++ b/README-zh-Hans.md @@ -8,7 +8,7 @@ # 系统设计入门

- +

@@ -49,7 +49,7 @@ ## 抽认卡

- +

@@ -66,7 +66,7 @@ 你正在寻找资源以准备[**编程面试**](https://github.com/donnemartin/interactive-coding-challenges)吗?

- +

@@ -97,7 +97,7 @@

- +

@@ -186,7 +186,7 @@ > 基于你面试的时间线(短、中、长)去复习那些推荐的主题。 -![Imgur](http://i.imgur.com/OfVllex.png) +![Imgur](images/OfVllex.png) **问:对于面试来说,我需要知道这里的所有知识点吗?** @@ -307,49 +307,49 @@ [查看实践与解答](solutions/system_design/pastebin/README.md) -![Imgur](http://i.imgur.com/4edXG0T.png) +![Imgur](images/4edXG0T.png) ### 设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索) [查看实践与解答](solutions/system_design/twitter/README.md) -![Imgur](http://i.imgur.com/jrUBAF7.png) +![Imgur](images/jrUBAF7.png) ### 设计一个网页爬虫 [查看实践与解答](solutions/system_design/web_crawler/README.md) -![Imgur](http://i.imgur.com/bWxPtQA.png) +![Imgur](images/bWxPtQA.png) ### 设计 Mint.com [查看实践与解答](solutions/system_design/mint/README.md) -![Imgur](http://i.imgur.com/V5q57vU.png) +![Imgur](images/V5q57vU.png) ### 为一个社交网络设计数据结构 [查看实践与解答](solutions/system_design/social_graph/README.md) -![Imgur](http://i.imgur.com/cdCv5g7.png) +![Imgur](images/cdCv5g7.png) ### 为搜索引擎设计一个 key-value 储存 [查看实践与解答](solutions/system_design/query_cache/README.md) -![Imgur](http://i.imgur.com/4j99mhe.png) +![Imgur](images/4j99mhe.png) ### 设计按类别分类的 Amazon 销售排名 [查看实践与解答](solutions/system_design/sales_rank/README.md) -![Imgur](http://i.imgur.com/MzExP06.png) +![Imgur](images/MzExP06.png) ### 在 AWS 上设计一个百万用户级别的系统 [查看实践与解答](solutions/system_design/scaling_aws/README.md) -![Imgur](http://i.imgur.com/jj3A5N8.png) +![Imgur](images/jj3A5N8.png) ## 面向对象设计的面试问题及解答 @@ -441,7 +441,7 @@ ### CAP 理论

- +
来源:再看 CAP 理论

@@ -536,7 +536,7 @@ DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性 ## 域名系统

- +
来源:DNS 安全介绍

@@ -574,7 +574,7 @@ DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性 ## 内容分发网络(CDN)

- +
来源:为什么使用 CDN

@@ -613,7 +613,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 ## 负载均衡器

- +
来源:可扩展的系统设计模式

@@ -682,7 +682,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 ## 反向代理(web 服务器)

- +
资料来源:维基百科
@@ -726,7 +726,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 ## 应用层

- +
资料来源:可缩放系统构架介绍

@@ -764,7 +764,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 ## 数据库

- +
资料来源:扩展你的用户数到第一个一千万

@@ -785,7 +785,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 关系型数据库扩展包括许多技术:**主从复制**、**主主复制**、**联合**、**分片**、**非规范化**和 **SQL调优**。

- +
资料来源:可扩展性、可用性、稳定性、模式

@@ -800,7 +800,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 - 参考[不利之处:复制](#不利之处复制)中,主从复制和主主复制**共同**的问题。

- +
资料来源:可扩展性、可用性、稳定性、模式

@@ -835,7 +835,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 #### 联合

- +
资料来源:扩展你的用户数到第一个一千万

@@ -857,7 +857,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源 #### 分片

- +
资料来源:可扩展性、可用性、稳定性、模式

@@ -1001,7 +1001,7 @@ MongoDB 和 CouchDB 等一些文档类型存储还提供了类似 SQL 语言的 #### 列型存储

- +
资料来源: SQL 和 NoSQL,一个简短的历史

@@ -1024,7 +1024,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h #### 图数据库

- +
资料来源:图数据库

@@ -1051,7 +1051,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h ### SQL 还是 NoSQL

- +
资料来源:从 RDBMS 转换到 NoSQL

@@ -1092,7 +1092,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h ## 缓存

- +
资料来源:可扩展的系统设计模式

@@ -1163,7 +1163,7 @@ Redis 有下列附加功能: #### 缓存模式

- +
资料来源:从缓存到内存数据网格

@@ -1199,7 +1199,7 @@ def get_user(self, user_id): #### 直写模式

- +
资料来源:可扩展性、可用性、稳定性、模式

@@ -1234,7 +1234,7 @@ def set_user(user_id, values): #### 回写模式

- +
资料来源:可扩展性、可用性、稳定性、模式

@@ -1252,7 +1252,7 @@ def set_user(user_id, values): #### 刷新

- +
资料来源:从缓存到内存数据网格

@@ -1284,7 +1284,7 @@ def set_user(user_id, values): ## 异步

- +
资料来源:可缩放系统构架介绍

@@ -1330,7 +1330,7 @@ def set_user(user_id, values): ## 通讯

- +
资料来源:OSI 7层模型

@@ -1365,7 +1365,7 @@ HTTP 是依赖于较低级协议(如 **TCP** 和 **UDP**)的应用层协议 ### 传输控制协议(TCP)

- +
资料来源:如何制作多人游戏

@@ -1389,7 +1389,7 @@ TCP 对于需要高可靠性但时间紧迫的应用程序很有用。比如包 ### 用户数据报协议(UDP)

- +
资料来源:如何制作多人游戏

@@ -1418,7 +1418,7 @@ UDP 可靠性更低但适合用在网络电话、视频聊天,流媒体和实 ### 远程过程调用协议(RPC)

- +
Source: Crack the system design interview

@@ -1640,7 +1640,7 @@ Notes > 关于现实中真实的系统是怎么设计的文章。

- +
Source: Twitter timelines at scale

diff --git a/README-zh-TW.md b/README-zh-TW.md index e7996c45..8f302155 100644 --- a/README-zh-TW.md +++ b/README-zh-TW.md @@ -3,7 +3,7 @@ # 系統設計入門

- +

@@ -44,7 +44,7 @@ ## 學習單字卡

- +

@@ -61,7 +61,7 @@ 你正在尋找資源來面對[**程式語言面試**](https://github.com/donnemartin/interactive-coding-challenges)嗎?

- +

@@ -91,7 +91,7 @@ > 每一章節都包含更深入資源的連結。

- +

@@ -180,7 +180,7 @@ > 基於你面試的時間 (短、中、長) 來複習這些建議的主題。 -![Imgur](http://i.imgur.com/OfVllex.png) +![Imgur](images/OfVllex.png) **Q: 對於面試者來說,我需要知道這裡所有的知識嗎?** @@ -302,49 +302,49 @@ [閱讀練習與解答](solutions/system_design/pastebin/README.md) -![Imgur](http://i.imgur.com/4edXG0T.png) +![Imgur](images/4edXG0T.png) ### 設計一個像是 Twitter 的 timeline (或 Facebook feed)設計一個 Twitter 搜尋功能 (or Facebook 搜尋功能) [閱讀練習與解答](solutions/system_design/twitter/README.md) -![Imgur](http://i.imgur.com/jrUBAF7.png) +![Imgur](images/jrUBAF7.png) ### 設計一個爬蟲系統 [閱讀練習與解答](solutions/system_design/web_crawler/README.md) -![Imgur](http://i.imgur.com/bWxPtQA.png) +![Imgur](images/bWxPtQA.png) ### 設計 Mint.com 網站 [閱讀練習與解答](solutions/system_design/mint/README.md) -![Imgur](http://i.imgur.com/V5q57vU.png) +![Imgur](images/V5q57vU.png) ### 設計一個社交網站的資料結構 [閱讀練習與解答](solutions/system_design/social_graph/README.md) -![Imgur](http://i.imgur.com/cdCv5g7.png) +![Imgur](images/cdCv5g7.png) ### 設計一個搜尋引擎使用的鍵值儲存資料結構 [閱讀練習與解答](solutions/system_design/query_cache/README.md) -![Imgur](http://i.imgur.com/4j99mhe.png) +![Imgur](images/4j99mhe.png) ### 設計一個根據產品分類的亞馬遜銷售排名 [閱讀練習與解答](solutions/system_design/sales_rank/README.md) -![Imgur](http://i.imgur.com/MzExP06.png) +![Imgur](images/MzExP06.png) ### 在 AWS 上設計一個百萬用戶等級的系統 [閱讀練習與解答](solutions/system_design/scaling_aws/README.md) -![Imgur](http://i.imgur.com/jj3A5N8.png) +![Imgur](images/jj3A5N8.png) ## 物件導向設計面試問題與解答 @@ -435,7 +435,7 @@ ### CAP 理論

- +
來源:再看 CAP 理論

@@ -529,7 +529,7 @@ DNS 或是電子郵件系統使用的就是這種方式,最終一致性在高 ## 域名系統

- +
資料來源:DNS 安全介紹

@@ -567,7 +567,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 ## 內容傳遞網路(CDN)

- +
來源:為什麼要使用 CDN

@@ -608,7 +608,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 ## 負載平衡器

- +
來源:可擴展的系統設計模式

@@ -678,7 +678,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 ## 反向代理(網頁伺服器)

- +
來源:維基百科
@@ -721,7 +721,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 ## 應用層

- +
資料來源:可縮放式系統架構介紹

@@ -758,7 +758,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 ## 資料庫

- +
來源:擴展你的使用者數量到第一個一千萬量級

@@ -781,7 +781,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 主資料庫負責讀和寫,並且將寫入的資料複寫至一或多個從屬資料庫中,從屬資料庫只負責讀取。而從屬資料庫可以再將寫入複製到更多以樹狀結構的其他資料庫中。如果主資料庫離線了,系統可以以只讀模式運行,直到某個從屬資料庫被提升為主資料庫,或有新的主資料庫出現。

- +
來源: 可擴展性、可用性、穩定性及其模式

@@ -796,7 +796,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 兩個主要的資料庫都負責讀取和寫入,並且兩者互相協調。如果其中一個主要資料庫離線,系統可以繼續運作。

- +
來源: 可擴展性、可用性、穩定性及其模式

@@ -824,7 +824,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 #### 聯邦式資料庫

- +
來源:擴展你的使用者數量到第一個一千萬量級

@@ -845,7 +845,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢 #### 分片

- +
來源: 可擴展性、可用性、穩定性及其模式

@@ -991,7 +991,7 @@ NoSQL 指的是 **鍵-值對的資料庫**、**文件類型資料庫**、**列 #### 列儲存型資料庫

- +
來源:SQL 和 NoSQL,簡短的歷史介紹

@@ -1014,7 +1014,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h #### 圖形資料庫

- +
來源: 圖形化資料庫

@@ -1042,7 +1042,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h ### SQL 或 NoSQL

- +
來源:從 RDBMS 轉換到 NoSQL

@@ -1084,7 +1084,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h ## 快取

- +
來源:可擴展的系統設計模式

@@ -1155,7 +1155,7 @@ Redis 還有以下額外的功能: #### 快取模式

- +
資料來源:從快取到記憶體資料網格

@@ -1191,7 +1191,7 @@ def get_user(self, user_id): #### 寫入模式

- +
資料來源:可獲展性、可用性、穩定性與模式

@@ -1226,7 +1226,7 @@ def set_user(user_id, values): #### 事後寫入(回寫)

- +
資料來源:可獲展性、可用性、穩定性與模式

@@ -1244,7 +1244,7 @@ def set_user(user_id, values): #### 更新式快取

- +
來源:從快取到記憶體資料網格技術

@@ -1276,7 +1276,7 @@ def set_user(user_id, values): ## 非同步機制

- +
資料來源:可縮放性系統架構介紹

@@ -1322,7 +1322,7 @@ def set_user(user_id, values): ## 通訊

- +
來源:OSI 七層模型

@@ -1354,7 +1354,7 @@ HTTP 是依賴於較底層的協議(例如:**TCP** 和 **UDP**) 的應用層 ### 傳輸控制通訊協定(TCP)

- +
來源:如何開發多人遊戲

@@ -1378,7 +1378,7 @@ TCP 對於需要高可靠、低時間急迫性的應用來說很有用,比如 ### 使用者資料流通訊協定 (UDP)

- +
資料來源:如何製作多人遊戲

@@ -1407,7 +1407,7 @@ UDP 的可靠性較低,但適合用在像是網路電話、視訊聊天、串 ### 遠端程式呼叫 (RPC)

- +
資料來源:破解系統設計面試

@@ -1630,7 +1630,7 @@ Notes > 底下是關於真實世界的系統架構是如何設計的文章

- +
資料來源:可擴展式的 Twitter 時間軸設計

diff --git a/README.md b/README.md index fd8a8ff7..a2a1b86d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ # The System Design Primer

- +

@@ -46,7 +46,7 @@ Additional topics for interview prep: ## Anki flashcards

- +

@@ -63,7 +63,7 @@ Great for use while on-the-go. Looking for resources to help you prep for the [**Coding Interview**](https://github.com/donnemartin/interactive-coding-challenges)?

- +

@@ -93,7 +93,7 @@ Review the [Contributing Guidelines](CONTRIBUTING.md). > Each section contains links to more in-depth resources.

- +

@@ -183,7 +183,7 @@ Review the [Contributing Guidelines](CONTRIBUTING.md). > Suggested topics to review based on your interview timeline (short, medium, long). -![Imgur](http://i.imgur.com/OfVllex.png) +![Imgur](images/OfVllex.png) **Q: For interviews, do I need to know everything here?** @@ -306,49 +306,49 @@ Check out the following links to get a better idea of what to expect: [View exercise and solution](solutions/system_design/pastebin/README.md) -![Imgur](http://i.imgur.com/4edXG0T.png) +![Imgur](images/4edXG0T.png) ### Design the Twitter timeline and search (or Facebook feed and search) [View exercise and solution](solutions/system_design/twitter/README.md) -![Imgur](http://i.imgur.com/jrUBAF7.png) +![Imgur](images/jrUBAF7.png) ### Design a web crawler [View exercise and solution](solutions/system_design/web_crawler/README.md) -![Imgur](http://i.imgur.com/bWxPtQA.png) +![Imgur](images/bWxPtQA.png) ### Design Mint.com [View exercise and solution](solutions/system_design/mint/README.md) -![Imgur](http://i.imgur.com/V5q57vU.png) +![Imgur](images/V5q57vU.png) ### Design the data structures for a social network [View exercise and solution](solutions/system_design/social_graph/README.md) -![Imgur](http://i.imgur.com/cdCv5g7.png) +![Imgur](images/cdCv5g7.png) ### Design a key-value store for a search engine [View exercise and solution](solutions/system_design/query_cache/README.md) -![Imgur](http://i.imgur.com/4j99mhe.png) +![Imgur](images/4j99mhe.png) ### Design Amazon's sales ranking by category feature [View exercise and solution](solutions/system_design/sales_rank/README.md) -![Imgur](http://i.imgur.com/MzExP06.png) +![Imgur](images/MzExP06.png) ### Design a system that scales to millions of users on AWS [View exercise and solution](solutions/system_design/scaling_aws/README.md) -![Imgur](http://i.imgur.com/jj3A5N8.png) +![Imgur](images/jj3A5N8.png) ## Object-oriented design interview questions with solutions @@ -440,7 +440,7 @@ Generally, you should aim for **maximal throughput** with **acceptable latency** ### CAP theorem

- +
Source: CAP theorem revisited

@@ -581,7 +581,7 @@ If both `Foo` and `Bar` each had 99.9% availability, their total availability in ## Domain name system

- +
Source: DNS security presentation

@@ -619,7 +619,7 @@ Services such as [CloudFlare](https://www.cloudflare.com/dns/) and [Route 53](ht ## Content delivery network

- +
Source: Why use a CDN

@@ -660,7 +660,7 @@ Sites with heavy traffic work well with pull CDNs, as traffic is spread out more ## Load balancer

- +
Source: Scalable system design patterns

@@ -730,7 +730,7 @@ Load balancers can also help with horizontal scaling, improving performance and ## Reverse proxy (web server)

- +
Source: Wikipedia
@@ -773,7 +773,7 @@ Additional benefits include: ## Application layer

- +
Source: Intro to architecting systems for scale

@@ -808,7 +808,7 @@ Systems such as [Consul](https://www.consul.io/docs/index.html), [Etcd](https:// ## Database

- +
Source: Scaling up to your first 10 million users

@@ -831,7 +831,7 @@ There are many techniques to scale a relational database: **master-slave replica The master serves reads and writes, replicating writes to one or more slaves, which serve only reads. Slaves can also replicate to additional slaves in a tree-like fashion. If the master goes offline, the system can continue to operate in read-only mode until a slave is promoted to a master or a new master is provisioned.

- +
Source: Scalability, availability, stability, patterns

@@ -846,7 +846,7 @@ The master serves reads and writes, replicating writes to one or more slaves, wh Both masters serve reads and writes and coordinate with each other on writes. If either master goes down, the system can continue to operate with both reads and writes.

- +
Source: Scalability, availability, stability, patterns

@@ -874,7 +874,7 @@ Both masters serve reads and writes and coordinate with each other on writes. I #### Federation

- +
Source: Scaling up to your first 10 million users

@@ -895,7 +895,7 @@ Federation (or functional partitioning) splits up databases by function. For ex #### Sharding

- +
Source: Scalability, availability, stability, patterns

@@ -1039,7 +1039,7 @@ Document stores provide high flexibility and are often used for working with occ #### Wide column store

- +
Source: SQL & NoSQL, a brief history

@@ -1062,7 +1062,7 @@ Wide column stores offer high availability and high scalability. They are often #### Graph database

- +
Source: Graph database

@@ -1090,7 +1090,7 @@ Graphs databases offer high performance for data models with complex relationshi ### SQL or NoSQL

- +
Source: Transitioning from RDBMS to NoSQL

@@ -1132,7 +1132,7 @@ Sample data well-suited for NoSQL: ## Cache

- +
Source: Scalable system design patterns

@@ -1203,7 +1203,7 @@ Since you can only store a limited amount of data in cache, you'll need to deter #### Cache-aside

- +
Source: From cache to in-memory data grid

@@ -1239,7 +1239,7 @@ Subsequent reads of data added to cache are fast. Cache-aside is also referred #### Write-through

- +
Source: Scalability, availability, stability, patterns

@@ -1274,7 +1274,7 @@ Write-through is a slow overall operation due to the write operation, but subseq #### Write-behind (write-back)

- +
Source: Scalability, availability, stability, patterns

@@ -1292,7 +1292,7 @@ In write-behind, the application does the following: #### Refresh-ahead

- +
Source: From cache to in-memory data grid

@@ -1324,7 +1324,7 @@ Refresh-ahead can result in reduced latency vs read-through if the cache can acc ## Asynchronism

- +
Source: Intro to architecting systems for scale

@@ -1370,7 +1370,7 @@ If queues start to grow significantly, the queue size can become larger than mem ## Communication

- +
Source: OSI 7 layer model

@@ -1402,7 +1402,7 @@ HTTP is an application layer protocol relying on lower-level protocols such as * ### Transmission control protocol (TCP)

- +
Source: How to make a multiplayer game

@@ -1426,7 +1426,7 @@ Use TCP over UDP when: ### User datagram protocol (UDP)

- +
Source: How to make a multiplayer game

@@ -1455,7 +1455,7 @@ Use UDP over TCP when: ### Remote procedure call (RPC)

- +
Source: Crack the system design interview

@@ -1681,7 +1681,7 @@ Handy metrics based on numbers above: > Articles on how real world systems are designed.

- +
Source: Twitter timelines at scale

diff --git a/images/0vBc0hN.png b/images/0vBc0hN.png new file mode 100644 index 00000000..f1466344 Binary files /dev/null and b/images/0vBc0hN.png differ diff --git a/images/4edXG0T.png b/images/4edXG0T.png new file mode 100644 index 00000000..f2fc0c29 Binary files /dev/null and b/images/4edXG0T.png differ diff --git a/images/4j99mhe.png b/images/4j99mhe.png new file mode 100644 index 00000000..9ced8734 Binary files /dev/null and b/images/4j99mhe.png differ diff --git a/images/54GYsSx.png b/images/54GYsSx.png new file mode 100644 index 00000000..b23ea554 Binary files /dev/null and b/images/54GYsSx.png differ diff --git a/images/5KeocQs.jpg b/images/5KeocQs.jpg new file mode 100644 index 00000000..ff1d5c97 Binary files /dev/null and b/images/5KeocQs.jpg differ diff --git a/images/C9ioGtn.png b/images/C9ioGtn.png new file mode 100644 index 00000000..cea66c98 Binary files /dev/null and b/images/C9ioGtn.png differ diff --git a/images/IOyLj4i.jpg b/images/IOyLj4i.jpg new file mode 100644 index 00000000..413c8ee8 Binary files /dev/null and b/images/IOyLj4i.jpg differ diff --git a/images/JdAsdvG.jpg b/images/JdAsdvG.jpg new file mode 100644 index 00000000..8c989e20 Binary files /dev/null and b/images/JdAsdvG.jpg differ diff --git a/images/MzExP06.png b/images/MzExP06.png new file mode 100644 index 00000000..348df476 Binary files /dev/null and b/images/MzExP06.png differ diff --git a/images/ONjORqk.png b/images/ONjORqk.png new file mode 100644 index 00000000..3841ca6a Binary files /dev/null and b/images/ONjORqk.png differ diff --git a/images/OfVllex.png b/images/OfVllex.png new file mode 100644 index 00000000..c8dba136 Binary files /dev/null and b/images/OfVllex.png differ diff --git a/images/Q6z24La.png b/images/Q6z24La.png new file mode 100644 index 00000000..b673a72c Binary files /dev/null and b/images/Q6z24La.png differ diff --git a/images/TcUo2fw.png b/images/TcUo2fw.png new file mode 100644 index 00000000..d0727cb6 Binary files /dev/null and b/images/TcUo2fw.png differ diff --git a/images/U3qV33e.png b/images/U3qV33e.png new file mode 100644 index 00000000..a0e147e9 Binary files /dev/null and b/images/U3qV33e.png differ diff --git a/images/V5q57vU.png b/images/V5q57vU.png new file mode 100644 index 00000000..39f4f053 Binary files /dev/null and b/images/V5q57vU.png differ diff --git a/images/Xkm5CXz.png b/images/Xkm5CXz.png new file mode 100644 index 00000000..3aa5dd38 Binary files /dev/null and b/images/Xkm5CXz.png differ diff --git a/images/b4YtAEN.png b/images/b4YtAEN.png new file mode 100644 index 00000000..bdb7ac4c Binary files /dev/null and b/images/b4YtAEN.png differ diff --git a/images/bWxPtQA.png b/images/bWxPtQA.png new file mode 100644 index 00000000..e5e0726b Binary files /dev/null and b/images/bWxPtQA.png differ diff --git a/images/bgLMI2u.png b/images/bgLMI2u.png new file mode 100644 index 00000000..e40e658d Binary files /dev/null and b/images/bgLMI2u.png differ diff --git a/images/cdCv5g7.png b/images/cdCv5g7.png new file mode 100644 index 00000000..d9ab23e5 Binary files /dev/null and b/images/cdCv5g7.png differ diff --git a/images/fNcl65g.png b/images/fNcl65g.png new file mode 100644 index 00000000..7d5b6f6e Binary files /dev/null and b/images/fNcl65g.png differ diff --git a/images/h81n9iK.png b/images/h81n9iK.png new file mode 100644 index 00000000..2ba3f1b7 Binary files /dev/null and b/images/h81n9iK.png differ diff --git a/images/h9TAuGI.jpg b/images/h9TAuGI.jpg new file mode 100644 index 00000000..692e0631 Binary files /dev/null and b/images/h9TAuGI.jpg differ diff --git a/images/iF4Mkb5.png b/images/iF4Mkb5.png new file mode 100644 index 00000000..391e3cd9 Binary files /dev/null and b/images/iF4Mkb5.png differ diff --git a/images/jj3A5N8.png b/images/jj3A5N8.png new file mode 100644 index 00000000..e400e5f4 Binary files /dev/null and b/images/jj3A5N8.png differ diff --git a/images/jrUBAF7.png b/images/jrUBAF7.png new file mode 100644 index 00000000..623b5824 Binary files /dev/null and b/images/jrUBAF7.png differ diff --git a/images/krAHLGg.png b/images/krAHLGg.png new file mode 100644 index 00000000..7cc0e802 Binary files /dev/null and b/images/krAHLGg.png differ diff --git a/images/kxtjqgE.png b/images/kxtjqgE.png new file mode 100644 index 00000000..98d6c06b Binary files /dev/null and b/images/kxtjqgE.png differ diff --git a/images/n16iOGk.png b/images/n16iOGk.png new file mode 100644 index 00000000..8a9be232 Binary files /dev/null and b/images/n16iOGk.png differ diff --git a/images/n41Azff.png b/images/n41Azff.png new file mode 100644 index 00000000..b4ed1a81 Binary files /dev/null and b/images/n41Azff.png differ diff --git a/images/rgSrvjG.png b/images/rgSrvjG.png new file mode 100644 index 00000000..dddfc503 Binary files /dev/null and b/images/rgSrvjG.png differ diff --git a/images/wU8x5Id.png b/images/wU8x5Id.png new file mode 100644 index 00000000..369a9c3a Binary files /dev/null and b/images/wU8x5Id.png differ diff --git a/images/wXGqG5f.png b/images/wXGqG5f.png new file mode 100644 index 00000000..7184333c Binary files /dev/null and b/images/wXGqG5f.png differ diff --git a/images/yB5SYwm.png b/images/yB5SYwm.png new file mode 100644 index 00000000..6d494b4d Binary files /dev/null and b/images/yB5SYwm.png differ diff --git a/images/yzDrJtA.jpg b/images/yzDrJtA.jpg new file mode 100644 index 00000000..f70ebd65 Binary files /dev/null and b/images/yzDrJtA.jpg differ diff --git a/images/zdCAkB3.png b/images/zdCAkB3.png new file mode 100644 index 00000000..8df59582 Binary files /dev/null and b/images/zdCAkB3.png differ