<i><ahref=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Source: Transitioning from RDBMS to NoSQL</a></i>
</p>
@ -1083,7 +1083,7 @@ NoSQLに適するサンプルデータ:
## キャッシュ
<palign="center">
<imgsrc="http://i.imgur.com/Q6z24La.png">
<imgsrc="http://i.imgur.com/Q6z24La.png"/>
<br/>
<i><ahref=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i>
</p>
@ -1154,7 +1154,7 @@ Redisはさらに以下のような機能を備えています:
#### キャッシュアサイド
<palign="center">
<imgsrc="http://i.imgur.com/ONjORqk.png">
<imgsrc="http://i.imgur.com/ONjORqk.png"/>
<br/>
<i><ahref=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><ahref=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><ahref=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
</p>
@ -757,7 +757,7 @@ Systems such as [Consul](https://www.consul.io/docs/index.html), [Etcd](https://
## Database
<palign="center">
<imgsrc="http://i.imgur.com/Xkm5CXz.png">
<imgsrc="http://i.imgur.com/Xkm5CXz.png"/>
<br/>
<i><ahref=https://www.youtube.com/watch?v=w95murBkYmU>Source: Scaling up to your first 10 million users</a></i>
</p>
@ -780,7 +780,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.
@ -795,7 +795,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.
@ -1039,7 +1039,7 @@ Graphs databases offer high performance for data models with complex relationshi
### SQL or NoSQL
<palign="center">
<imgsrc="http://i.imgur.com/wXGqG5f.png">
<imgsrc="http://i.imgur.com/wXGqG5f.png"/>
<br/>
<i><ahref=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Source: Transitioning from RDBMS to NoSQL</a></i>
</p>
@ -1081,7 +1081,7 @@ Sample data well-suited for NoSQL:
## Cache
<palign="center">
<imgsrc="http://i.imgur.com/Q6z24La.png">
<imgsrc="http://i.imgur.com/Q6z24La.png"/>
<br/>
<i><ahref=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Source: Scalable system design patterns</a></i>
</p>
@ -1152,7 +1152,7 @@ Since you can only store a limited amount of data in cache, you'll need to deter
#### Cache-aside
<palign="center">
<imgsrc="http://i.imgur.com/ONjORqk.png">
<imgsrc="http://i.imgur.com/ONjORqk.png"/>
<br/>
<i><ahref=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>
@ -1188,7 +1188,7 @@ Subsequent reads of data added to cache are fast. Cache-aside is also referred
@ -1241,7 +1241,7 @@ In write-behind, the application does the following:
#### Refresh-ahead
<palign="center">
<imgsrc="http://i.imgur.com/kxtjqgE.png">
<imgsrc="http://i.imgur.com/kxtjqgE.png"/>
<br/>
<i><ahref=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>
@ -1273,7 +1273,7 @@ Refresh-ahead can result in reduced latency vs read-through if the cache can acc
## Asynchronism
<palign="center">
<imgsrc="http://i.imgur.com/54GYsSx.png">
<imgsrc="http://i.imgur.com/54GYsSx.png"/>
<br/>
<i><ahref=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Source: Intro to architecting systems for scale</a></i>
</p>
@ -1319,7 +1319,7 @@ If queues start to grow significantly, the queue size can become larger than mem
## Communication
<palign="center">
<imgsrc="http://i.imgur.com/5KeocQs.jpg">
<imgsrc="http://i.imgur.com/5KeocQs.jpg"/>
<br/>
<i><ahref=http://www.escotal.com/osilayer.html>Source: OSI 7 layer model</a></i>
</p>
@ -1351,7 +1351,7 @@ HTTP is an application layer protocol relying on lower-level protocols such as *
### Transmission control protocol (TCP)
<palign="center">
<imgsrc="http://i.imgur.com/JdAsdvG.jpg">
<imgsrc="http://i.imgur.com/JdAsdvG.jpg"/>
<br/>
<i><ahref=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>
@ -1375,7 +1375,7 @@ Use TCP over UDP when:
### User datagram protocol (UDP)
<palign="center">
<imgsrc="http://i.imgur.com/yzDrJtA.jpg">
<imgsrc="http://i.imgur.com/yzDrJtA.jpg"/>
<br/>
<i><ahref=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>
@ -1404,7 +1404,7 @@ Use UDP over TCP when:
### Remote procedure call (RPC)
<palign="center">
<imgsrc="http://i.imgur.com/iF4Mkb5.png">
<imgsrc="http://i.imgur.com/iF4Mkb5.png"/>
<br/>
<i><ahref=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>Source: Crack the system design interview</a></i>
</p>
@ -1600,7 +1600,7 @@ Handy metrics based on numbers above:
| Question | Reference(s) |
|---|---|
| Design a file sync service like Dropbox | [youtube.com](https://www.youtube.com/watch?v=PE4gwstWhmc) |
| Design a search engine like Google | [queue.acm.org](http://queue.acm.org/detail.cfm?id=988407)<br/>[stackexchange.com](http://programmers.stackexchange.com/questions/38324/interview-question-how-would-you-implement-google-search)<br/>[ardendertat.com](http://www.ardendertat.com/2012/01/11/implementing-search-engines/)<br>[stanford.edu](http://infolab.stanford.edu/~backrub/google.html) |
| Design a search engine like Google | [queue.acm.org](http://queue.acm.org/detail.cfm?id=988407)<br/>[stackexchange.com](http://programmers.stackexchange.com/questions/38324/interview-question-how-would-you-implement-google-search)<br/>[ardendertat.com](http://www.ardendertat.com/2012/01/11/implementing-search-engines/)<br/>[stanford.edu](http://infolab.stanford.edu/~backrub/google.html) |
| Design a scalable web crawler like Google | [quora.com](https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch) |
| Design Google docs | [code.google.com](https://code.google.com/p/google-mobwrite/)<br/>[neil.fraser.name](https://neil.fraser.name/writing/sync/) |
| Design a key-value store like Redis | [slideshare.net](http://www.slideshare.net/dvirsky/introduction-to-redis) |
@ -1628,7 +1628,7 @@ Handy metrics based on numbers above:
> Articles on how real world systems are designed.
<palign="center">
<imgsrc="http://i.imgur.com/TcUo2fw.png">
<imgsrc="http://i.imgur.com/TcUo2fw.png"/>
<br/>
<i><ahref=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Source: Twitter timelines at scale</a></i>