Remove Imgur dependency by storing images locally (#168)

pull/447/head
Daniel Julius Lasiman 2020-07-18 08:15:47 +07:00 committed by GitHub
parent 828014aaac
commit 7d39c44293
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
40 changed files with 152 additions and 152 deletions

View File

@ -3,7 +3,7 @@
# システム設計入門 # システム設計入門
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jj3A5N8.png"/> <img src="images/jj3A5N8.png">
<br/> <br/>
</p> </p>
@ -44,7 +44,7 @@
## 暗記カード ## 暗記カード
<p align="center"> <p align="center">
<img src="http://i.imgur.com/zdCAkB3.png"/> <img src="images/zdCAkB3.png">
<br/> <br/>
</p> </p>
@ -61,7 +61,7 @@
コード技術面接用の問題を探している場合は[**こちら**](https://github.com/donnemartin/interactive-coding-challenges) コード技術面接用の問題を探している場合は[**こちら**](https://github.com/donnemartin/interactive-coding-challenges)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/b4YtAEN.png"/> <img src="images/b4YtAEN.png">
<br/> <br/>
</p> </p>
@ -91,7 +91,7 @@
> それぞれのセクションはより学びを深めるような他の文献へのリンクが貼られています。 > それぞれのセクションはより学びを深めるような他の文献へのリンクが貼られています。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jrUBAF7.png"/> <img src="images/jrUBAF7.png">
<br/> <br/>
</p> </p>
@ -180,7 +180,7 @@
> 学習スパンに応じてみるべきトピックス (short, medium, long) > 学習スパンに応じてみるべきトピックス (short, medium, long)
![Imgur](http://i.imgur.com/OfVllex.png) ![Imgur](images/OfVllex.png)
**Q: 面接のためには、ここにあるものすべてをやらないといけないのでしょうか?** **Q: 面接のためには、ここにあるものすべてをやらないといけないのでしょうか?**
@ -302,49 +302,49 @@
[問題と解答を見る](solutions/system_design/pastebin/README.md) [問題と解答を見る](solutions/system_design/pastebin/README.md)
![Imgur](http://i.imgur.com/4edXG0T.png) ![Imgur](images/4edXG0T.png)
### Twitterタイムライン&検索 (もしくはFacebookフィード&検索)を設計する ### Twitterタイムライン&検索 (もしくはFacebookフィード&検索)を設計する
[問題と解答を見る](solutions/system_design/twitter/README.md) [問題と解答を見る](solutions/system_design/twitter/README.md)
![Imgur](http://i.imgur.com/jrUBAF7.png) ![Imgur](images/jrUBAF7.png)
### ウェブクローラーの設計 ### ウェブクローラーの設計
[問題と解答を見る](solutions/system_design/web_crawler/README.md) [問題と解答を見る](solutions/system_design/web_crawler/README.md)
![Imgur](http://i.imgur.com/bWxPtQA.png) ![Imgur](images/bWxPtQA.png)
### Mint.comの設計 ### Mint.comの設計
[問題と解答を見る](solutions/system_design/mint/README.md) [問題と解答を見る](solutions/system_design/mint/README.md)
![Imgur](http://i.imgur.com/V5q57vU.png) ![Imgur](images/V5q57vU.png)
### SNSサービスのデータ構造を設計する ### SNSサービスのデータ構造を設計する
[問題と解答を見る](solutions/system_design/social_graph/README.md) [問題と解答を見る](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) [問題と解答を見る](solutions/system_design/query_cache/README.md)
![Imgur](http://i.imgur.com/4j99mhe.png) ![Imgur](images/4j99mhe.png)
### Amazonのカテゴリ毎の売り上げランキングを設計する ### Amazonのカテゴリ毎の売り上げランキングを設計する
[問題と解答を見る](solutions/system_design/sales_rank/README.md) [問題と解答を見る](solutions/system_design/sales_rank/README.md)
![Imgur](http://i.imgur.com/MzExP06.png) ![Imgur](images/MzExP06.png)
### AWS上で100万人規模のユーザーを捌くサービスを設計する ### AWS上で100万人規模のユーザーを捌くサービスを設計する
[問題と解答を見る](solutions/system_design/scaling_aws/README.md) [問題と解答を見る](solutions/system_design/scaling_aws/README.md)
![Imgur](http://i.imgur.com/jj3A5N8.png) ![Imgur](images/jj3A5N8.png)
## オブジェクト指向設計問題と解答 ## オブジェクト指向設計問題と解答
@ -436,7 +436,7 @@
### CAP 理論 ### CAP 理論
<p align="center"> <p align="center">
<img src="http://i.imgur.com/bgLMI2u.png"/> <img src="images/bgLMI2u.png">
<br/> <br/>
<i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>Source: CAP theorem revisited</a></i> <i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>Source: CAP theorem revisited</a></i>
</p> </p>
@ -530,7 +530,7 @@
## ドメインネームシステム ## ドメインネームシステム
<p align="center"> <p align="center">
<img src="http://i.imgur.com/IOyLj4i.jpg"/> <img src="images/IOyLj4i.jpg">
<br/> <br/>
<i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>Source: DNS security presentation</a></i> <i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>Source: DNS security presentation</a></i>
</p> </p>
@ -568,7 +568,7 @@ DNSは少数のオーソライズされたサーバーが上位に位置する
## コンテンツデリバリーネットワーク(Content delivery network) ## コンテンツデリバリーネットワーク(Content delivery network)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h9TAuGI.jpg"/> <img src="images/h9TAuGI.jpg">
<br/> <br/>
<i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>Source: Why use a CDN</a></i> <i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>Source: Why use a CDN</a></i>
</p> </p>
@ -609,7 +609,7 @@ CDNを用いてコンテンツを配信することで以下の二つの理由
## ロードバランサー ## ロードバランサー
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h81n9iK.png"/> <img src="images/h81n9iK.png">
<br/> <br/>
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i> <i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i>
</p> </p>
@ -679,7 +679,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
## リバースプロキシ(webサーバー) ## リバースプロキシ(webサーバー)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n41Azff.png"/> <img src="images/n41Azff.png">
<br/> <br/>
<i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>Source: Wikipedia</a></i> <i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>Source: Wikipedia</a></i>
<br/> <br/>
@ -722,7 +722,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
## アプリケーション層 ## アプリケーション層
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yB5SYwm.png"/> <img src="images/yB5SYwm.png">
<br/> <br/>
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i> <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
</p> </p>
@ -759,7 +759,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
## データベース ## データベース
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Xkm5CXz.png"/> <img src="images/Xkm5CXz.png">
<br/> <br/>
<i><a href=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i> <i><a href=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i>
</p> </p>
@ -782,7 +782,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
マスターデータベースが読み取りと書き込みを処理し、書き込みを一つ以上のスレーブデータベースに複製します。スレーブデータベースは読み取りのみを処理します。スレーブデータベースは木構造のように追加のスレーブにデータを複製することもできます。マスターデータベースがオフラインになった場合には、いずれかのスレーブがマスターに昇格するか、新しいマスターデータベースが追加されるまでは読み取り専用モードで稼働します。 マスターデータベースが読み取りと書き込みを処理し、書き込みを一つ以上のスレーブデータベースに複製します。スレーブデータベースは読み取りのみを処理します。スレーブデータベースは木構造のように追加のスレーブにデータを複製することもできます。マスターデータベースがオフラインになった場合には、いずれかのスレーブがマスターに昇格するか、新しいマスターデータベースが追加されるまでは読み取り専用モードで稼働します。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/C9ioGtn.png"/> <img src="images/C9ioGtn.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -797,7 +797,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
いずれのマスターも読み取り書き込みの両方に対応する。書き込みに関してはそれぞれ協調する。いずれかのマスターが落ちても、システム全体としては読み書き両方に対応したまま運用できる。 いずれのマスターも読み取り書き込みの両方に対応する。書き込みに関してはそれぞれ協調する。いずれかのマスターが落ちても、システム全体としては読み書き両方に対応したまま運用できる。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/krAHLGg.png"/> <img src="images/krAHLGg.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -825,7 +825,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
#### Federation #### Federation
<p align="center"> <p align="center">
<img src="http://i.imgur.com/U3qV33e.png"/> <img src="images/U3qV33e.png">
<br/> <br/>
<i><a href=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i> <i><a href=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i>
</p> </p>
@ -846,7 +846,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
#### シャーディング #### シャーディング
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wU8x5Id.png"/> <img src="images/wU8x5Id.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -990,7 +990,7 @@ NoSQL は **key-value store**、 **document-store**、 **wide column store**、
#### ワイドカラムストア #### ワイドカラムストア
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n16iOGk.png"/> <img src="images/n16iOGk.png">
<br/> <br/>
<i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>Source: SQL & NoSQL, a brief history</a></i> <i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>Source: SQL & NoSQL, a brief history</a></i>
</p> </p>
@ -1013,7 +1013,7 @@ Googleは[Bigtable](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/cha
#### グラフデータベース #### グラフデータベース
<p align="center"> <p align="center">
<img src="http://i.imgur.com/fNcl65g.png"/> <img src="images/fNcl65g.png">
<br/> <br/>
<i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>Source: Graph database</a></i> <i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>Source: Graph database</a></i>
</p> </p>
@ -1041,7 +1041,7 @@ Googleは[Bigtable](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/cha
### SQLかNoSQLか ### SQLかNoSQLか
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wXGqG5f.png"/> <img src="images/wXGqG5f.png">
<br/> <br/>
<i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Source: Transitioning from RDBMS to NoSQL</a></i> <i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Source: Transitioning from RDBMS to NoSQL</a></i>
</p> </p>
@ -1083,7 +1083,7 @@ NoSQLに適するサンプルデータ:
## キャッシュ ## キャッシュ
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Q6z24La.png"/> <img src="images/Q6z24La.png">
<br/> <br/>
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i> <i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i>
</p> </p>
@ -1154,7 +1154,7 @@ Redisはさらに以下のような機能を備えています:
#### キャッシュアサイド #### キャッシュアサイド
<p align="center"> <p align="center">
<img src="http://i.imgur.com/ONjORqk.png"/> <img src="images/ONjORqk.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i> <i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i>
</p> </p>
@ -1190,7 +1190,7 @@ def get_user(self, user_id):
#### ライトスルー #### ライトスルー
<p align="center"> <p align="center">
<img src="http://i.imgur.com/0vBc0hN.png"/> <img src="images/0vBc0hN.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -1225,7 +1225,7 @@ def set_user(user_id, values):
#### ライトビハインド (ライトバック) #### ライトビハインド (ライトバック)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/rgSrvjG.png"/> <img src="images/rgSrvjG.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -1243,7 +1243,7 @@ def set_user(user_id, values):
#### リフレッシュアヘッド #### リフレッシュアヘッド
<p align="center"> <p align="center">
<img src="http://i.imgur.com/kxtjqgE.png"/> <img src="images/kxtjqgE.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i> <i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i>
</p> </p>
@ -1275,7 +1275,7 @@ def set_user(user_id, values):
## 非同期処理 ## 非同期処理
<p align="center"> <p align="center">
<img src="http://i.imgur.com/54GYsSx.png"/> <img src="images/54GYsSx.png">
<br/> <br/>
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i> <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
</p> </p>
@ -1321,7 +1321,7 @@ def set_user(user_id, values):
## 通信 ## 通信
<p align="center"> <p align="center">
<img src="http://i.imgur.com/5KeocQs.jpg"/> <img src="images/5KeocQs.jpg">
<br/> <br/>
<i><a href=http://www.escotal.com/osilayer.html>Source: OSI 7 layer model</a></i> <i><a href=http://www.escotal.com/osilayer.html>Source: OSI 7 layer model</a></i>
</p> </p>
@ -1353,7 +1353,7 @@ HTTPは**TCP** や **UDP** などの低級プロトコルに依存している
### 伝送制御プロトコル (TCP) ### 伝送制御プロトコル (TCP)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/JdAsdvG.jpg"/> <img src="images/JdAsdvG.jpg">
<br/> <br/>
<i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i> <i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i>
</p> </p>
@ -1377,7 +1377,7 @@ TCPは高い依存性を要し、時間制約が厳しくないものに適し
### ユーザデータグラムプロトコル (UDP) ### ユーザデータグラムプロトコル (UDP)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yzDrJtA.jpg"/> <img src="images/yzDrJtA.jpg">
<br/> <br/>
<i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i> <i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i>
</p> </p>
@ -1406,7 +1406,7 @@ TCPよりもUDPを使うのは:
### 遠隔手続呼出 (RPC) ### 遠隔手続呼出 (RPC)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/iF4Mkb5.png"/> <img src="images/iF4Mkb5.png">
<br/> <br/>
<i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>Source: Crack the system design interview</a></i> <i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>Source: Crack the system design interview</a></i>
</p> </p>
@ -1629,7 +1629,7 @@ Notes
> 世の中のシステムがどのように設計されているかについての記事 > 世の中のシステムがどのように設計されているかについての記事
<p align="center"> <p align="center">
<img src="http://i.imgur.com/TcUo2fw.png"/> <img src="images/TcUo2fw.png">
<br/> <br/>
<i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Source: Twitter timelines at scale</a></i> <i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Source: Twitter timelines at scale</a></i>
</p> </p>

View File

@ -8,7 +8,7 @@
# 系统设计入门 # 系统设计入门
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jj3A5N8.png"/> <img src="images/jj3A5N8.png">
<br/> <br/>
</p> </p>
@ -49,7 +49,7 @@
## 抽认卡 ## 抽认卡
<p align="center"> <p align="center">
<img src="http://i.imgur.com/zdCAkB3.png"/> <img src="images/zdCAkB3.png">
<br/> <br/>
</p> </p>
@ -66,7 +66,7 @@
你正在寻找资源以准备[**编程面试**](https://github.com/donnemartin/interactive-coding-challenges)吗? 你正在寻找资源以准备[**编程面试**](https://github.com/donnemartin/interactive-coding-challenges)吗?
<p align="center"> <p align="center">
<img src="http://i.imgur.com/b4YtAEN.png"/> <img src="images/b4YtAEN.png">
<br/> <br/>
</p> </p>
@ -97,7 +97,7 @@
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jrUBAF7.png"/> <img src="images/jrUBAF7.png">
<br/> <br/>
</p> </p>
@ -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) [查看实践与解答](solutions/system_design/pastebin/README.md)
![Imgur](http://i.imgur.com/4edXG0T.png) ![Imgur](images/4edXG0T.png)
### 设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索) ### 设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)
[查看实践与解答](solutions/system_design/twitter/README.md) [查看实践与解答](solutions/system_design/twitter/README.md)
![Imgur](http://i.imgur.com/jrUBAF7.png) ![Imgur](images/jrUBAF7.png)
### 设计一个网页爬虫 ### 设计一个网页爬虫
[查看实践与解答](solutions/system_design/web_crawler/README.md) [查看实践与解答](solutions/system_design/web_crawler/README.md)
![Imgur](http://i.imgur.com/bWxPtQA.png) ![Imgur](images/bWxPtQA.png)
### 设计 Mint.com ### 设计 Mint.com
[查看实践与解答](solutions/system_design/mint/README.md) [查看实践与解答](solutions/system_design/mint/README.md)
![Imgur](http://i.imgur.com/V5q57vU.png) ![Imgur](images/V5q57vU.png)
### 为一个社交网络设计数据结构 ### 为一个社交网络设计数据结构
[查看实践与解答](solutions/system_design/social_graph/README.md) [查看实践与解答](solutions/system_design/social_graph/README.md)
![Imgur](http://i.imgur.com/cdCv5g7.png) ![Imgur](images/cdCv5g7.png)
### 为搜索引擎设计一个 key-value 储存 ### 为搜索引擎设计一个 key-value 储存
[查看实践与解答](solutions/system_design/query_cache/README.md) [查看实践与解答](solutions/system_design/query_cache/README.md)
![Imgur](http://i.imgur.com/4j99mhe.png) ![Imgur](images/4j99mhe.png)
### 设计按类别分类的 Amazon 销售排名 ### 设计按类别分类的 Amazon 销售排名
[查看实践与解答](solutions/system_design/sales_rank/README.md) [查看实践与解答](solutions/system_design/sales_rank/README.md)
![Imgur](http://i.imgur.com/MzExP06.png) ![Imgur](images/MzExP06.png)
### 在 AWS 上设计一个百万用户级别的系统 ### 在 AWS 上设计一个百万用户级别的系统
[查看实践与解答](solutions/system_design/scaling_aws/README.md) [查看实践与解答](solutions/system_design/scaling_aws/README.md)
![Imgur](http://i.imgur.com/jj3A5N8.png) ![Imgur](images/jj3A5N8.png)
## 面向对象设计的面试问题及解答 ## 面向对象设计的面试问题及解答
@ -441,7 +441,7 @@
### CAP 理论 ### CAP 理论
<p align="center"> <p align="center">
<img src="http://i.imgur.com/bgLMI2u.png"/> <img src="images/bgLMI2u.png">
<br/> <br/>
<strong><a href="http://robertgreiner.com/2014/08/cap-theorem-revisited">来源:再看 CAP 理论</a></strong> <strong><a href="http://robertgreiner.com/2014/08/cap-theorem-revisited">来源:再看 CAP 理论</a></strong>
</p> </p>
@ -536,7 +536,7 @@ DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性
## 域名系统 ## 域名系统
<p align="center"> <p align="center">
<img src="http://i.imgur.com/IOyLj4i.jpg"/> <img src="images/IOyLj4i.jpg">
<br/> <br/>
<strong><a href="http://www.slideshare.net/srikrupa5/dns-security-presentation-issa">来源DNS 安全介绍</a></strong> <strong><a href="http://www.slideshare.net/srikrupa5/dns-security-presentation-issa">来源DNS 安全介绍</a></strong>
</p> </p>
@ -574,7 +574,7 @@ DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性
## 内容分发网络CDN ## 内容分发网络CDN
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h9TAuGI.jpg"/> <img src="images/h9TAuGI.jpg">
<br/> <br/>
<strong><a href="https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/">来源:为什么使用 CDN</a></strong> <strong><a href="https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/">来源:为什么使用 CDN</a></strong>
</p> </p>
@ -613,7 +613,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
## 负载均衡器 ## 负载均衡器
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h81n9iK.png"/> <img src="images/h81n9iK.png">
<br/> <br/>
<strong><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">来源:可扩展的系统设计模式</a></strong> <strong><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">来源:可扩展的系统设计模式</a></strong>
</p> </p>
@ -682,7 +682,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
## 反向代理web 服务器) ## 反向代理web 服务器)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n41Azff.png"/> <img src="images/n41Azff.png">
<br/> <br/>
<strong><a href="https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg">资料来源:维基百科</a></strong> <strong><a href="https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg">资料来源:维基百科</a></strong>
<br/> <br/>
@ -726,7 +726,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
## 应用层 ## 应用层
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yB5SYwm.png"/> <img src="images/yB5SYwm.png">
<br/> <br/>
<strong><a href="http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer">资料来源:可缩放系统构架介绍</a></strong> <strong><a href="http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer">资料来源:可缩放系统构架介绍</a></strong>
</p> </p>
@ -764,7 +764,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
## 数据库 ## 数据库
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Xkm5CXz.png"/> <img src="images/Xkm5CXz.png">
<br/> <br/>
<strong><a href="https://www.youtube.com/watch?v=w95murBkYmU">资料来源:扩展你的用户数到第一个一千万</a></strong> <strong><a href="https://www.youtube.com/watch?v=w95murBkYmU">资料来源:扩展你的用户数到第一个一千万</a></strong>
</p> </p>
@ -785,7 +785,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
关系型数据库扩展包括许多技术:**主从复制**、**主主复制**、**联合**、**分片**、**非规范化**和 **SQL调优** 关系型数据库扩展包括许多技术:**主从复制**、**主主复制**、**联合**、**分片**、**非规范化**和 **SQL调优**
<p align="center"> <p align="center">
<img src="http://i.imgur.com/C9ioGtn.png"/> <img src="images/C9ioGtn.png">
<br/> <br/>
<strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong> <strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong>
</p> </p>
@ -800,7 +800,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
- 参考[不利之处:复制](#不利之处复制)中,主从复制和主主复制**共同**的问题。 - 参考[不利之处:复制](#不利之处复制)中,主从复制和主主复制**共同**的问题。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/krAHLGg.png"/> <img src="images/krAHLGg.png">
<br/> <br/>
<strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong> <strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong>
</p> </p>
@ -835,7 +835,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
#### 联合 #### 联合
<p align="center"> <p align="center">
<img src="http://i.imgur.com/U3qV33e.png"/> <img src="images/U3qV33e.png">
<br/> <br/>
<strong><a href="https://www.youtube.com/watch?v=w95murBkYmU">资料来源:扩展你的用户数到第一个一千万</a></strong> <strong><a href="https://www.youtube.com/watch?v=w95murBkYmU">资料来源:扩展你的用户数到第一个一千万</a></strong>
</p> </p>
@ -857,7 +857,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
#### 分片 #### 分片
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wU8x5Id.png"/> <img src="images/wU8x5Id.png">
<br/> <br/>
<strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong> <strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong>
</p> </p>
@ -1001,7 +1001,7 @@ MongoDB 和 CouchDB 等一些文档类型存储还提供了类似 SQL 语言的
#### 列型存储 #### 列型存储
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n16iOGk.png"/> <img src="images/n16iOGk.png">
<br/> <br/>
<strong><a href="http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html">资料来源: SQL 和 NoSQL一个简短的历史</a></strong> <strong><a href="http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html">资料来源: SQL 和 NoSQL一个简短的历史</a></strong>
</p> </p>
@ -1024,7 +1024,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h
#### 图数据库 #### 图数据库
<p align="center"> <p align="center">
<img src="http://i.imgur.com/fNcl65g.png"/> <img src="images/fNcl65g.png">
<br/> <br/>
<strong><a href="https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png"/>资料来源:图数据库</a></strong> <strong><a href="https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png"/>资料来源:图数据库</a></strong>
</p> </p>
@ -1051,7 +1051,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h
### SQL 还是 NoSQL ### SQL 还是 NoSQL
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wXGqG5f.png"/> <img src="images/wXGqG5f.png">
<br/> <br/>
<strong><a href="https://www.infoq.com/articles/Transition-RDBMS-NoSQL/">资料来源:从 RDBMS 转换到 NoSQL</a></strong> <strong><a href="https://www.infoq.com/articles/Transition-RDBMS-NoSQL/">资料来源:从 RDBMS 转换到 NoSQL</a></strong>
</p> </p>
@ -1092,7 +1092,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h
## 缓存 ## 缓存
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Q6z24La.png"/> <img src="images/Q6z24La.png">
<br/> <br/>
<strong><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">资料来源:可扩展的系统设计模式</a></strong> <strong><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">资料来源:可扩展的系统设计模式</a></strong>
</p> </p>
@ -1163,7 +1163,7 @@ Redis 有下列附加功能:
#### 缓存模式 #### 缓存模式
<p align="center"> <p align="center">
<img src="http://i.imgur.com/ONjORqk.png"/> <img src="images/ONjORqk.png">
<br/> <br/>
<strong><a href="http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast">资料来源:从缓存到内存数据网格</a></strong> <strong><a href="http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast">资料来源:从缓存到内存数据网格</a></strong>
</p> </p>
@ -1199,7 +1199,7 @@ def get_user(self, user_id):
#### 直写模式 #### 直写模式
<p align="center"> <p align="center">
<img src="http://i.imgur.com/0vBc0hN.png"/> <img src="images/0vBc0hN.png">
<br/> <br/>
<strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong> <strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong>
</p> </p>
@ -1234,7 +1234,7 @@ def set_user(user_id, values):
#### 回写模式 #### 回写模式
<p align="center"> <p align="center">
<img src="http://i.imgur.com/rgSrvjG.png"/> <img src="images/rgSrvjG.png">
<br/> <br/>
<strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong> <strong><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">资料来源:可扩展性、可用性、稳定性、模式</a></strong>
</p> </p>
@ -1252,7 +1252,7 @@ def set_user(user_id, values):
#### 刷新 #### 刷新
<p align="center"> <p align="center">
<img src="http://i.imgur.com/kxtjqgE.png"/> <img src="images/kxtjqgE.png">
<br/> <br/>
<strong><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>资料来源:从缓存到内存数据网格</a></strong> <strong><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>资料来源:从缓存到内存数据网格</a></strong>
</p> </p>
@ -1284,7 +1284,7 @@ def set_user(user_id, values):
## 异步 ## 异步
<p align="center"> <p align="center">
<img src="http://i.imgur.com/54GYsSx.png"/> <img src="images/54GYsSx.png">
<br/> <br/>
<strong><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>资料来源:可缩放系统构架介绍</a></strong> <strong><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>资料来源:可缩放系统构架介绍</a></strong>
</p> </p>
@ -1330,7 +1330,7 @@ def set_user(user_id, values):
## 通讯 ## 通讯
<p align="center"> <p align="center">
<img src="http://i.imgur.com/5KeocQs.jpg"/> <img src="images/5KeocQs.jpg">
<br/> <br/>
<strong><a href=http://www.escotal.com/osilayer.html>资料来源OSI 7层模型</a></strong> <strong><a href=http://www.escotal.com/osilayer.html>资料来源OSI 7层模型</a></strong>
</p> </p>
@ -1365,7 +1365,7 @@ HTTP 是依赖于较低级协议(如 **TCP** 和 **UDP**)的应用层协议
### 传输控制协议TCP ### 传输控制协议TCP
<p align="center"> <p align="center">
<img src="http://i.imgur.com/JdAsdvG.jpg"/> <img src="images/JdAsdvG.jpg">
<br/> <br/>
<strong><a href="http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/">资料来源:如何制作多人游戏</a></strong> <strong><a href="http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/">资料来源:如何制作多人游戏</a></strong>
</p> </p>
@ -1389,7 +1389,7 @@ TCP 对于需要高可靠性但时间紧迫的应用程序很有用。比如包
### 用户数据报协议UDP ### 用户数据报协议UDP
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yzDrJtA.jpg"/> <img src="images/yzDrJtA.jpg">
<br/> <br/>
<strong><a href="http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1">资料来源:如何制作多人游戏</a></strong> <strong><a href="http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1">资料来源:如何制作多人游戏</a></strong>
</p> </p>
@ -1418,7 +1418,7 @@ UDP 可靠性更低但适合用在网络电话、视频聊天,流媒体和实
### 远程过程调用协议RPC ### 远程过程调用协议RPC
<p align="center"> <p align="center">
<img src="http://i.imgur.com/iF4Mkb5.png"/> <img src="images/iF4Mkb5.png">
<br/> <br/>
<strong><a href="http://www.puncsky.com/blog/2016/02/14/crack-the-system-design-interview">Source: Crack the system design interview</a></strong> <strong><a href="http://www.puncsky.com/blog/2016/02/14/crack-the-system-design-interview">Source: Crack the system design interview</a></strong>
</p> </p>
@ -1640,7 +1640,7 @@ Notes
> 关于现实中真实的系统是怎么设计的文章。 > 关于现实中真实的系统是怎么设计的文章。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/TcUo2fw.png"/> <img src="images/TcUo2fw.png">
<br/> <br/>
<strong><a href="https://www.infoq.com/presentations/Twitter-Timeline-Scalability">Source: Twitter timelines at scale</a></strong> <strong><a href="https://www.infoq.com/presentations/Twitter-Timeline-Scalability">Source: Twitter timelines at scale</a></strong>
</p> </p>

View File

@ -3,7 +3,7 @@
# 系統設計入門 # 系統設計入門
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jj3A5N8.png"/> <img src="images/jj3A5N8.png">
<br/> <br/>
</p> </p>
@ -44,7 +44,7 @@
## 學習單字卡 ## 學習單字卡
<p align="center"> <p align="center">
<img src="http://i.imgur.com/zdCAkB3.png"/> <img src="images/zdCAkB3.png">
<br/> <br/>
</p> </p>
@ -61,7 +61,7 @@
你正在尋找資源來面對[**程式語言面試**](https://github.com/donnemartin/interactive-coding-challenges)嗎? 你正在尋找資源來面對[**程式語言面試**](https://github.com/donnemartin/interactive-coding-challenges)嗎?
<p align="center"> <p align="center">
<img src="http://i.imgur.com/b4YtAEN.png"/> <img src="images/b4YtAEN.png">
<br/> <br/>
</p> </p>
@ -91,7 +91,7 @@
> 每一章節都包含更深入資源的連結。 > 每一章節都包含更深入資源的連結。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jrUBAF7.png"/> <img src="images/jrUBAF7.png">
<br/> <br/>
</p> </p>
@ -180,7 +180,7 @@
> 基於你面試的時間 (短、中、長) 來複習這些建議的主題。 > 基於你面試的時間 (短、中、長) 來複習這些建議的主題。
![Imgur](http://i.imgur.com/OfVllex.png) ![Imgur](images/OfVllex.png)
**Q: 對於面試者來說,我需要知道這裡所有的知識嗎?** **Q: 對於面試者來說,我需要知道這裡所有的知識嗎?**
@ -302,49 +302,49 @@
[閱讀練習與解答](solutions/system_design/pastebin/README.md) [閱讀練習與解答](solutions/system_design/pastebin/README.md)
![Imgur](http://i.imgur.com/4edXG0T.png) ![Imgur](images/4edXG0T.png)
### 設計一個像是 Twitter 的 timeline (或 Facebook feed)設計一個 Twitter 搜尋功能 (or Facebook 搜尋功能) ### 設計一個像是 Twitter 的 timeline (或 Facebook feed)設計一個 Twitter 搜尋功能 (or Facebook 搜尋功能)
[閱讀練習與解答](solutions/system_design/twitter/README.md) [閱讀練習與解答](solutions/system_design/twitter/README.md)
![Imgur](http://i.imgur.com/jrUBAF7.png) ![Imgur](images/jrUBAF7.png)
### 設計一個爬蟲系統 ### 設計一個爬蟲系統
[閱讀練習與解答](solutions/system_design/web_crawler/README.md) [閱讀練習與解答](solutions/system_design/web_crawler/README.md)
![Imgur](http://i.imgur.com/bWxPtQA.png) ![Imgur](images/bWxPtQA.png)
### 設計 Mint.com 網站 ### 設計 Mint.com 網站
[閱讀練習與解答](solutions/system_design/mint/README.md) [閱讀練習與解答](solutions/system_design/mint/README.md)
![Imgur](http://i.imgur.com/V5q57vU.png) ![Imgur](images/V5q57vU.png)
### 設計一個社交網站的資料結構 ### 設計一個社交網站的資料結構
[閱讀練習與解答](solutions/system_design/social_graph/README.md) [閱讀練習與解答](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) [閱讀練習與解答](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) [閱讀練習與解答](solutions/system_design/sales_rank/README.md)
![Imgur](http://i.imgur.com/MzExP06.png) ![Imgur](images/MzExP06.png)
### 在 AWS 上設計一個百萬用戶等級的系統 ### 在 AWS 上設計一個百萬用戶等級的系統
[閱讀練習與解答](solutions/system_design/scaling_aws/README.md) [閱讀練習與解答](solutions/system_design/scaling_aws/README.md)
![Imgur](http://i.imgur.com/jj3A5N8.png) ![Imgur](images/jj3A5N8.png)
## 物件導向設計面試問題與解答 ## 物件導向設計面試問題與解答
@ -435,7 +435,7 @@
### CAP 理論 ### CAP 理論
<p align="center"> <p align="center">
<img src="http://i.imgur.com/bgLMI2u.png"/> <img src="images/bgLMI2u.png">
<br/> <br/>
<i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>來源:再看 CAP 理論</a></i> <i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>來源:再看 CAP 理論</a></i>
</p> </p>
@ -529,7 +529,7 @@ DNS 或是電子郵件系統使用的就是這種方式,最終一致性在高
## 域名系統 ## 域名系統
<p align="center"> <p align="center">
<img src="http://i.imgur.com/IOyLj4i.jpg"/> <img src="images/IOyLj4i.jpg">
<br/> <br/>
<i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>資料來源DNS 安全介紹</a></i> <i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>資料來源DNS 安全介紹</a></i>
</p> </p>
@ -567,7 +567,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
## 內容傳遞網路(CDN) ## 內容傳遞網路(CDN)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h9TAuGI.jpg"/> <img src="images/h9TAuGI.jpg">
<br/> <br/>
<i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>來源:為什麼要使用 CDN</a></i> <i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>來源:為什麼要使用 CDN</a></i>
</p> </p>
@ -608,7 +608,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
## 負載平衡器 ## 負載平衡器
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h81n9iK.png"/> <img src="images/h81n9iK.png">
<br/> <br/>
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>來源:可擴展的系統設計模式</a></i> <i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>來源:可擴展的系統設計模式</a></i>
</p> </p>
@ -678,7 +678,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
## 反向代理(網頁伺服器) ## 反向代理(網頁伺服器)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n41Azff.png"/> <img src="images/n41Azff.png">
<br/> <br/>
<i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>來源:維基百科</a></i> <i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>來源:維基百科</a></i>
<br/> <br/>
@ -721,7 +721,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
## 應用層 ## 應用層
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yB5SYwm.png"/> <img src="images/yB5SYwm.png">
<br/> <br/>
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>資料來源:可縮放式系統架構介紹</a></i> <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>資料來源:可縮放式系統架構介紹</a></i>
</p> </p>
@ -758,7 +758,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
## 資料庫 ## 資料庫
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Xkm5CXz.png"/> <img src="images/Xkm5CXz.png">
<br/> <br/>
<i><a href=https://www.youtube.com/watch?v=vg5onp8TU6Q>來源:擴展你的使用者數量到第一個一千萬量級</a></i> <i><a href=https://www.youtube.com/watch?v=vg5onp8TU6Q>來源:擴展你的使用者數量到第一個一千萬量級</a></i>
</p> </p>
@ -781,7 +781,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
主資料庫負責讀和寫,並且將寫入的資料複寫至一或多個從屬資料庫中,從屬資料庫只負責讀取。而從屬資料庫可以再將寫入複製到更多以樹狀結構的其他資料庫中。如果主資料庫離線了,系統可以以只讀模式運行,直到某個從屬資料庫被提升為主資料庫,或有新的主資料庫出現。 主資料庫負責讀和寫,並且將寫入的資料複寫至一或多個從屬資料庫中,從屬資料庫只負責讀取。而從屬資料庫可以再將寫入複製到更多以樹狀結構的其他資料庫中。如果主資料庫離線了,系統可以以只讀模式運行,直到某個從屬資料庫被提升為主資料庫,或有新的主資料庫出現。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/C9ioGtn.png"/> <img src="images/C9ioGtn.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>來源: 可擴展性、可用性、穩定性及其模式</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>來源: 可擴展性、可用性、穩定性及其模式</a></i>
</p> </p>
@ -796,7 +796,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
兩個主要的資料庫都負責讀取和寫入,並且兩者互相協調。如果其中一個主要資料庫離線,系統可以繼續運作。 兩個主要的資料庫都負責讀取和寫入,並且兩者互相協調。如果其中一個主要資料庫離線,系統可以繼續運作。
<p align="center"> <p align="center">
<img src="http://i.imgur.com/krAHLGg.png"/> <img src="images/krAHLGg.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>來源: 可擴展性、可用性、穩定性及其模式</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>來源: 可擴展性、可用性、穩定性及其模式</a></i>
</p> </p>
@ -824,7 +824,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
#### 聯邦式資料庫 #### 聯邦式資料庫
<p align="center"> <p align="center">
<img src="http://i.imgur.com/U3qV33e.png"/> <img src="images/U3qV33e.png">
<br/> <br/>
<i><a href=https://www.youtube.com/watch?v=vg5onp8TU6Q>來源:擴展你的使用者數量到第一個一千萬量級</a></i> <i><a href=https://www.youtube.com/watch?v=vg5onp8TU6Q>來源:擴展你的使用者數量到第一個一千萬量級</a></i>
</p> </p>
@ -845,7 +845,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
#### 分片 #### 分片
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wU8x5Id.png"/> <img src="images/wU8x5Id.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>來源: 可擴展性、可用性、穩定性及其模式</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>來源: 可擴展性、可用性、穩定性及其模式</a></i>
</p> </p>
@ -991,7 +991,7 @@ NoSQL 指的是 **鍵-值對的資料庫**、**文件類型資料庫**、**列
#### 列儲存型資料庫 #### 列儲存型資料庫
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n16iOGk.png"/> <img src="images/n16iOGk.png">
<br/> <br/>
<i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>來源SQL 和 NoSQL簡短的歷史介紹</a></i> <i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>來源SQL 和 NoSQL簡短的歷史介紹</a></i>
</p> </p>
@ -1014,7 +1014,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h
#### 圖形資料庫 #### 圖形資料庫
<p align="center"> <p align="center">
<img src="http://i.imgur.com/fNcl65g.png"/> <img src="images/fNcl65g.png">
<br/> <br/>
<i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>來源: 圖形化資料庫</a></i> <i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>來源: 圖形化資料庫</a></i>
</p> </p>
@ -1042,7 +1042,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h
### SQL 或 NoSQL ### SQL 或 NoSQL
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wXGqG5f.png"/> <img src="images/wXGqG5f.png">
<br/> <br/>
<i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>來源:從 RDBMS 轉換到 NoSQL</a></i> <i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>來源:從 RDBMS 轉換到 NoSQL</a></i>
</p> </p>
@ -1084,7 +1084,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h
## 快取 ## 快取
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Q6z24La.png"/> <img src="images/Q6z24La.png">
<br/> <br/>
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>來源:可擴展的系統設計模式</a></i> <i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>來源:可擴展的系統設計模式</a></i>
</p> </p>
@ -1155,7 +1155,7 @@ Redis 還有以下額外的功能:
#### 快取模式 #### 快取模式
<p align="center"> <p align="center">
<img src="http://i.imgur.com/ONjORqk.png"/> <img src="images/ONjORqk.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>資料來源:從快取到記憶體資料網格</a></i> <i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>資料來源:從快取到記憶體資料網格</a></i>
</p> </p>
@ -1191,7 +1191,7 @@ def get_user(self, user_id):
#### 寫入模式 #### 寫入模式
<p align="center"> <p align="center">
<img src="http://i.imgur.com/0vBc0hN.png"/> <img src="images/0vBc0hN.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>資料來源:可獲展性、可用性、穩定性與模式</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>資料來源:可獲展性、可用性、穩定性與模式</a></i>
</p> </p>
@ -1226,7 +1226,7 @@ def set_user(user_id, values):
#### 事後寫入(回寫) #### 事後寫入(回寫)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/rgSrvjG.png"/> <img src="images/rgSrvjG.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>資料來源:可獲展性、可用性、穩定性與模式</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>資料來源:可獲展性、可用性、穩定性與模式</a></i>
</p> </p>
@ -1244,7 +1244,7 @@ def set_user(user_id, values):
#### 更新式快取 #### 更新式快取
<p align="center"> <p align="center">
<img src="http://i.imgur.com/kxtjqgE.png"/> <img src="images/kxtjqgE.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>來源:從快取到記憶體資料網格技術</a></i> <i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>來源:從快取到記憶體資料網格技術</a></i>
</p> </p>
@ -1276,7 +1276,7 @@ def set_user(user_id, values):
## 非同步機制 ## 非同步機制
<p align="center"> <p align="center">
<img src="http://i.imgur.com/54GYsSx.png"/> <img src="images/54GYsSx.png">
<br/> <br/>
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>資料來源:可縮放性系統架構介紹</a></i> <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>資料來源:可縮放性系統架構介紹</a></i>
</p> </p>
@ -1322,7 +1322,7 @@ def set_user(user_id, values):
## 通訊 ## 通訊
<p align="center"> <p align="center">
<img src="http://i.imgur.com/5KeocQs.jpg"/> <img src="images/5KeocQs.jpg">
<br/> <br/>
<i><a href=http://www.escotal.com/osilayer.html>來源OSI 七層模型</a></i> <i><a href=http://www.escotal.com/osilayer.html>來源OSI 七層模型</a></i>
</p> </p>
@ -1354,7 +1354,7 @@ HTTP 是依賴於較底層的協議(例如:**TCP** 和 **UDP**) 的應用層
### 傳輸控制通訊協定(TCP) ### 傳輸控制通訊協定(TCP)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/JdAsdvG.jpg"/> <img src="images/JdAsdvG.jpg">
<br/> <br/>
<i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>來源:如何開發多人遊戲</a></i> <i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>來源:如何開發多人遊戲</a></i>
</p> </p>
@ -1378,7 +1378,7 @@ TCP 對於需要高可靠、低時間急迫性的應用來說很有用,比如
### 使用者資料流通訊協定 (UDP) ### 使用者資料流通訊協定 (UDP)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yzDrJtA.jpg"/> <img src="images/yzDrJtA.jpg">
<br/> <br/>
<i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>資料來源:如何製作多人遊戲</a></i> <i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>資料來源:如何製作多人遊戲</a></i>
</p> </p>
@ -1407,7 +1407,7 @@ UDP 的可靠性較低,但適合用在像是網路電話、視訊聊天、串
### 遠端程式呼叫 (RPC) ### 遠端程式呼叫 (RPC)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/iF4Mkb5.png"/> <img src="images/iF4Mkb5.png">
<br/> <br/>
<i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>資料來源:破解系統設計面試</a></i> <i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>資料來源:破解系統設計面試</a></i>
</p> </p>
@ -1630,7 +1630,7 @@ Notes
> 底下是關於真實世界的系統架構是如何設計的文章 > 底下是關於真實世界的系統架構是如何設計的文章
<p align="center"> <p align="center">
<img src="http://i.imgur.com/TcUo2fw.png"/> <img src="images/TcUo2fw.png">
<br/> <br/>
<i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>資料來源:可擴展式的 Twitter 時間軸設計</a></i> <i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>資料來源:可擴展式的 Twitter 時間軸設計</a></i>
</p> </p>

View File

@ -5,7 +5,7 @@
# The System Design Primer # The System Design Primer
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jj3A5N8.png"/> <img src="images/jj3A5N8.png">
<br/> <br/>
</p> </p>
@ -46,7 +46,7 @@ Additional topics for interview prep:
## Anki flashcards ## Anki flashcards
<p align="center"> <p align="center">
<img src="http://i.imgur.com/zdCAkB3.png"/> <img src="images/zdCAkB3.png">
<br/> <br/>
</p> </p>
@ -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)? Looking for resources to help you prep for the [**Coding Interview**](https://github.com/donnemartin/interactive-coding-challenges)?
<p align="center"> <p align="center">
<img src="http://i.imgur.com/b4YtAEN.png"/> <img src="images/b4YtAEN.png">
<br/> <br/>
</p> </p>
@ -93,7 +93,7 @@ Review the [Contributing Guidelines](CONTRIBUTING.md).
> Each section contains links to more in-depth resources. > Each section contains links to more in-depth resources.
<p align="center"> <p align="center">
<img src="http://i.imgur.com/jrUBAF7.png"/> <img src="images/jrUBAF7.png">
<br/> <br/>
</p> </p>
@ -183,7 +183,7 @@ Review the [Contributing Guidelines](CONTRIBUTING.md).
> Suggested topics to review based on your interview timeline (short, medium, long). > 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?** **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) [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) ### Design the Twitter timeline and search (or Facebook feed and search)
[View exercise and solution](solutions/system_design/twitter/README.md) [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 ### Design a web crawler
[View exercise and solution](solutions/system_design/web_crawler/README.md) [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 ### Design Mint.com
[View exercise and solution](solutions/system_design/mint/README.md) [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 ### Design the data structures for a social network
[View exercise and solution](solutions/system_design/social_graph/README.md) [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 ### Design a key-value store for a search engine
[View exercise and solution](solutions/system_design/query_cache/README.md) [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 ### Design Amazon's sales ranking by category feature
[View exercise and solution](solutions/system_design/sales_rank/README.md) [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 ### Design a system that scales to millions of users on AWS
[View exercise and solution](solutions/system_design/scaling_aws/README.md) [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 ## Object-oriented design interview questions with solutions
@ -440,7 +440,7 @@ Generally, you should aim for **maximal throughput** with **acceptable latency**
### CAP theorem ### CAP theorem
<p align="center"> <p align="center">
<img src="http://i.imgur.com/bgLMI2u.png"/> <img src="images/bgLMI2u.png">
<br/> <br/>
<i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>Source: CAP theorem revisited</a></i> <i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>Source: CAP theorem revisited</a></i>
</p> </p>
@ -581,7 +581,7 @@ If both `Foo` and `Bar` each had 99.9% availability, their total availability in
## Domain name system ## Domain name system
<p align="center"> <p align="center">
<img src="http://i.imgur.com/IOyLj4i.jpg"/> <img src="images/IOyLj4i.jpg">
<br/> <br/>
<i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>Source: DNS security presentation</a></i> <i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>Source: DNS security presentation</a></i>
</p> </p>
@ -619,7 +619,7 @@ Services such as [CloudFlare](https://www.cloudflare.com/dns/) and [Route 53](ht
## Content delivery network ## Content delivery network
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h9TAuGI.jpg"/> <img src="images/h9TAuGI.jpg">
<br/> <br/>
<i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>Source: Why use a CDN</a></i> <i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>Source: Why use a CDN</a></i>
</p> </p>
@ -660,7 +660,7 @@ Sites with heavy traffic work well with pull CDNs, as traffic is spread out more
## Load balancer ## Load balancer
<p align="center"> <p align="center">
<img src="http://i.imgur.com/h81n9iK.png"/> <img src="images/h81n9iK.png">
<br/> <br/>
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i> <i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i>
</p> </p>
@ -730,7 +730,7 @@ Load balancers can also help with horizontal scaling, improving performance and
## Reverse proxy (web server) ## Reverse proxy (web server)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n41Azff.png"/> <img src="images/n41Azff.png">
<br/> <br/>
<i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>Source: Wikipedia</a></i> <i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>Source: Wikipedia</a></i>
<br/> <br/>
@ -773,7 +773,7 @@ Additional benefits include:
## Application layer ## Application layer
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yB5SYwm.png"/> <img src="images/yB5SYwm.png">
<br/> <br/>
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i> <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
</p> </p>
@ -808,7 +808,7 @@ Systems such as [Consul](https://www.consul.io/docs/index.html), [Etcd](https://
## Database ## Database
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Xkm5CXz.png"/> <img src="images/Xkm5CXz.png">
<br/> <br/>
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>Source: Scaling up to your first 10 million users</a></i> <i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>Source: Scaling up to your first 10 million users</a></i>
</p> </p>
@ -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. 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.
<p align="center"> <p align="center">
<img src="http://i.imgur.com/C9ioGtn.png"/> <img src="images/C9ioGtn.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -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. 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.
<p align="center"> <p align="center">
<img src="http://i.imgur.com/krAHLGg.png"/> <img src="images/krAHLGg.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -874,7 +874,7 @@ Both masters serve reads and writes and coordinate with each other on writes. I
#### Federation #### Federation
<p align="center"> <p align="center">
<img src="http://i.imgur.com/U3qV33e.png"/> <img src="images/U3qV33e.png">
<br/> <br/>
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>Source: Scaling up to your first 10 million users</a></i> <i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>Source: Scaling up to your first 10 million users</a></i>
</p> </p>
@ -895,7 +895,7 @@ Federation (or functional partitioning) splits up databases by function. For ex
#### Sharding #### Sharding
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wU8x5Id.png"/> <img src="images/wU8x5Id.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -1039,7 +1039,7 @@ Document stores provide high flexibility and are often used for working with occ
#### Wide column store #### Wide column store
<p align="center"> <p align="center">
<img src="http://i.imgur.com/n16iOGk.png"/> <img src="images/n16iOGk.png">
<br/> <br/>
<i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>Source: SQL & NoSQL, a brief history</a></i> <i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>Source: SQL & NoSQL, a brief history</a></i>
</p> </p>
@ -1062,7 +1062,7 @@ Wide column stores offer high availability and high scalability. They are often
#### Graph database #### Graph database
<p align="center"> <p align="center">
<img src="http://i.imgur.com/fNcl65g.png"/> <img src="images/fNcl65g.png">
<br/> <br/>
<i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>Source: Graph database</a></i> <i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>Source: Graph database</a></i>
</p> </p>
@ -1090,7 +1090,7 @@ Graphs databases offer high performance for data models with complex relationshi
### SQL or NoSQL ### SQL or NoSQL
<p align="center"> <p align="center">
<img src="http://i.imgur.com/wXGqG5f.png"/> <img src="images/wXGqG5f.png">
<br/> <br/>
<i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Source: Transitioning from RDBMS to NoSQL</a></i> <i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Source: Transitioning from RDBMS to NoSQL</a></i>
</p> </p>
@ -1132,7 +1132,7 @@ Sample data well-suited for NoSQL:
## Cache ## Cache
<p align="center"> <p align="center">
<img src="http://i.imgur.com/Q6z24La.png"/> <img src="images/Q6z24La.png">
<br/> <br/>
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i> <i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i>
</p> </p>
@ -1203,7 +1203,7 @@ Since you can only store a limited amount of data in cache, you'll need to deter
#### Cache-aside #### Cache-aside
<p align="center"> <p align="center">
<img src="http://i.imgur.com/ONjORqk.png"/> <img src="images/ONjORqk.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i> <i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i>
</p> </p>
@ -1239,7 +1239,7 @@ Subsequent reads of data added to cache are fast. Cache-aside is also referred
#### Write-through #### Write-through
<p align="center"> <p align="center">
<img src="http://i.imgur.com/0vBc0hN.png"/> <img src="images/0vBc0hN.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -1274,7 +1274,7 @@ Write-through is a slow overall operation due to the write operation, but subseq
#### Write-behind (write-back) #### Write-behind (write-back)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/rgSrvjG.png"/> <img src="images/rgSrvjG.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i> <i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Source: Scalability, availability, stability, patterns</a></i>
</p> </p>
@ -1292,7 +1292,7 @@ In write-behind, the application does the following:
#### Refresh-ahead #### Refresh-ahead
<p align="center"> <p align="center">
<img src="http://i.imgur.com/kxtjqgE.png"/> <img src="images/kxtjqgE.png">
<br/> <br/>
<i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i> <i><a href=http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast>Source: From cache to in-memory data grid</a></i>
</p> </p>
@ -1324,7 +1324,7 @@ Refresh-ahead can result in reduced latency vs read-through if the cache can acc
## Asynchronism ## Asynchronism
<p align="center"> <p align="center">
<img src="http://i.imgur.com/54GYsSx.png"/> <img src="images/54GYsSx.png">
<br/> <br/>
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i> <i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
</p> </p>
@ -1370,7 +1370,7 @@ If queues start to grow significantly, the queue size can become larger than mem
## Communication ## Communication
<p align="center"> <p align="center">
<img src="http://i.imgur.com/5KeocQs.jpg"/> <img src="images/5KeocQs.jpg">
<br/> <br/>
<i><a href=http://www.escotal.com/osilayer.html>Source: OSI 7 layer model</a></i> <i><a href=http://www.escotal.com/osilayer.html>Source: OSI 7 layer model</a></i>
</p> </p>
@ -1402,7 +1402,7 @@ HTTP is an application layer protocol relying on lower-level protocols such as *
### Transmission control protocol (TCP) ### Transmission control protocol (TCP)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/JdAsdvG.jpg"/> <img src="images/JdAsdvG.jpg">
<br/> <br/>
<i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i> <i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i>
</p> </p>
@ -1426,7 +1426,7 @@ Use TCP over UDP when:
### User datagram protocol (UDP) ### User datagram protocol (UDP)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/yzDrJtA.jpg"/> <img src="images/yzDrJtA.jpg">
<br/> <br/>
<i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i> <i><a href=http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/>Source: How to make a multiplayer game</a></i>
</p> </p>
@ -1455,7 +1455,7 @@ Use UDP over TCP when:
### Remote procedure call (RPC) ### Remote procedure call (RPC)
<p align="center"> <p align="center">
<img src="http://i.imgur.com/iF4Mkb5.png"/> <img src="images/iF4Mkb5.png">
<br/> <br/>
<i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>Source: Crack the system design interview</a></i> <i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>Source: Crack the system design interview</a></i>
</p> </p>
@ -1681,7 +1681,7 @@ Handy metrics based on numbers above:
> Articles on how real world systems are designed. > Articles on how real world systems are designed.
<p align="center"> <p align="center">
<img src="http://i.imgur.com/TcUo2fw.png"/> <img src="images/TcUo2fw.png">
<br/> <br/>
<i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Source: Twitter timelines at scale</a></i> <i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Source: Twitter timelines at scale</a></i>
</p> </p>

BIN
images/0vBc0hN.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
images/4edXG0T.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

BIN
images/4j99mhe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
images/54GYsSx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
images/5KeocQs.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

BIN
images/C9ioGtn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

BIN
images/IOyLj4i.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
images/JdAsdvG.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
images/MzExP06.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

BIN
images/ONjORqk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

BIN
images/OfVllex.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
images/Q6z24La.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
images/TcUo2fw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

BIN
images/U3qV33e.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

BIN
images/V5q57vU.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

BIN
images/Xkm5CXz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
images/b4YtAEN.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 KiB

BIN
images/bWxPtQA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

BIN
images/bgLMI2u.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
images/cdCv5g7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
images/fNcl65g.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
images/h81n9iK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
images/h9TAuGI.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
images/iF4Mkb5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
images/jj3A5N8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

BIN
images/jrUBAF7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

BIN
images/krAHLGg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
images/kxtjqgE.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
images/n16iOGk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/n41Azff.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
images/rgSrvjG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
images/wU8x5Id.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

BIN
images/wXGqG5f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
images/yB5SYwm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

BIN
images/yzDrJtA.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
images/zdCAkB3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB