Pages1 (#518)
* Add mkdocs configuration and update index page for System Design Primer: Update Edition - Created mkdocs.yml to establish a structured documentation site with multilingual support. - Updated index.md to reflect the new edition's focus on 2025 software development trends, including Kubernetes and Generative AI. - Enhanced navigation with links to contributing guidelines, changelog, and language-specific resources for improved accessibility. * Move images and solution under docs * Add MkDocs deploy workflow * Add MkDocs deploy workflow * Update navigation and image paths in documentation - Renamed "Start Here" to "Study Guide Start Here" in mkdocs.yml for clarity. - Added "System Design Interview Questions" to the navigation. - Updated image paths in multiple language documentation files to ensure correct referencing. - Enhanced multilingual support by maintaining consistent image paths across all language versions. * merge resloved * Move images and solution under docspull/1081/head
parent
91b67a57f0
commit
f614af8bca
|
@ -0,0 +1,27 @@
|
||||||
|
name: Deploy MkDocs to GitHub Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main # Trigger on pushes to main branch
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📥 Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: 🐍 Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.10'
|
||||||
|
|
||||||
|
- name: 📦 Install dependencies
|
||||||
|
run: |
|
||||||
|
pip install mkdocs-material
|
||||||
|
|
||||||
|
- name: 🚀 Deploy to GitHub Pages
|
||||||
|
run: |
|
||||||
|
mkdocs gh-deploy --force
|
|
@ -5,7 +5,7 @@
|
||||||
# دليل تصميم النظم (System Design Primer)
|
# دليل تصميم النظم (System Design Primer)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jj3A5N8.png">
|
<img src="../../images/jj3A5N8.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
## بطاقات Anki التعليمية
|
## بطاقات Anki التعليمية
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/zdCAkB3.png">
|
<img src="../../images/zdCAkB3.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
هل تبحث عن موارد للمساعدة في التحضير لـ [**مقابلات البرمجة**](https://github.com/donnemartin/interactive-coding-challenges)؟
|
هل تبحث عن موارد للمساعدة في التحضير لـ [**مقابلات البرمجة**](https://github.com/donnemartin/interactive-coding-challenges)؟
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/b4YtAEN.png">
|
<img src="../../images/b4YtAEN.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
> كل قسم يحتوي على روابط لمصادر أكثر تفصيلاً.
|
> كل قسم يحتوي على روابط لمصادر أكثر تفصيلاً.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jrUBAF7.png">
|
<img src="../../images/jrUBAF7.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
|
|
||||||
> المواضيع المقترحة للمراجعة بناءً على الجدول الزمني لمقابلتك (قصير، متوسط، طويل).
|
> المواضيع المقترحة للمراجعة بناءً على الجدول الزمني لمقابلتك (قصير، متوسط، طويل).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**س: هل يجب أن أعرف كل شيء هنا للمقابلة؟**
|
**س: هل يجب أن أعرف كل شيء هنا للمقابلة؟**
|
||||||
|
|
||||||
|
@ -258,49 +258,49 @@
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/pastebin/README.md)
|
[عرض التمرين والحل](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم الجدول الزمني والبحث في Twitter (أو خلاصة Facebook والبحث)
|
### تصميم الجدول الزمني والبحث في Twitter (أو خلاصة Facebook والبحث)
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/twitter/README.md)
|
[عرض التمرين والحل](solutions/system_design/twitter/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم متصفح ويب
|
### تصميم متصفح ويب
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/web_crawler/README.md)
|
[عرض التمرين والحل](solutions/system_design/web_crawler/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم Mint.com
|
### تصميم Mint.com
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/mint/README.md)
|
[عرض التمرين والحل](solutions/system_design/mint/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم هياكل البيانات لشبكة اجتماعية
|
### تصميم هياكل البيانات لشبكة اجتماعية
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/social_graph/README.md)
|
[عرض التمرين والحل](solutions/system_design/social_graph/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم مخزن key-value لمحرك بحث
|
### تصميم مخزن key-value لمحرك بحث
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/query_cache/README.md)
|
[عرض التمرين والحل](solutions/system_design/query_cache/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم ميزة تصنيف المبيعات حسب الفئة في Amazon
|
### تصميم ميزة تصنيف المبيعات حسب الفئة في Amazon
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/sales_rank/README.md)
|
[عرض التمرين والحل](solutions/system_design/sales_rank/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### تصميم نظام يتطور لملايين المستخدمين على AWS
|
### تصميم نظام يتطور لملايين المستخدمين على AWS
|
||||||
|
|
||||||
[عرض التمرين والحل](solutions/system_design/scaling_aws/README.md)
|
[عرض التمرين والحل](solutions/system_design/scaling_aws/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## أسئلة مقابلة التصميم الموجه للكائنات مع الحلول
|
## أسئلة مقابلة التصميم الموجه للكائنات مع الحلول
|
||||||
|
|
||||||
|
@ -391,7 +391,7 @@
|
||||||
### نظرية CAP
|
### نظرية CAP
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -530,7 +530,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
## نظام أسماء النطاقات (Domain Name System)
|
## نظام أسماء النطاقات (Domain Name System)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -568,7 +568,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
## شبكة توصيل المحتوى (CDN)
|
## شبكة توصيل المحتوى (CDN)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -609,7 +609,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
## موازن التحميل (Load Balancer)
|
## موازن التحميل (Load Balancer)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -679,7 +679,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
## الوكيل العكسي (خادم الويب)
|
## الوكيل العكسي (خادم الويب)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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/>
|
||||||
|
@ -722,7 +722,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
## طبقة التطبيق
|
## طبقة التطبيق
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -757,7 +757,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
## قاعدة البيانات (Database)
|
## قاعدة البيانات (Database)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/Xkm5CXz.png">
|
<img src="../../images/Xkm5CXz.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>المصدر: التطوير حتى 10 ملايين مستخدم</a></i>
|
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>المصدر: التطوير حتى 10 ملايين مستخدم</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -780,7 +780,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
يخدم الرئيسي عمليات القراءة والكتابة، مع نسخ عمليات الكتابة إلى تابع واحد أو أكثر، والتي تخدم القراءة فقط. يمكن للتوابع أيضاً النسخ إلى توابع إضافية في شكل شجري. إذا توقف الرئيسي عن العمل، يمكن للنظام الاستمرار في العمل في وضع القراءة فقط حتى يتم ترقية تابع ليصبح رئيسياً أو يتم توفير رئيسي جديد.
|
يخدم الرئيسي عمليات القراءة والكتابة، مع نسخ عمليات الكتابة إلى تابع واحد أو أكثر، والتي تخدم القراءة فقط. يمكن للتوابع أيضاً النسخ إلى توابع إضافية في شكل شجري. إذا توقف الرئيسي عن العمل، يمكن للنظام الاستمرار في العمل في وضع القراءة فقط حتى يتم ترقية تابع ليصبح رئيسياً أو يتم توفير رئيسي جديد.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -795,7 +795,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
كلا الرئيسيين يخدمان القراءة والكتابة وينسقان مع بعضهما البعض في عمليات الكتابة. إذا توقف أي من الرئيسيين عن العمل، يمكن للنظام الاستمرار في العمل مع كل من القراءة والكتابة.
|
كلا الرئيسيين يخدمان القراءة والكتابة وينسقان مع بعضهما البعض في عمليات الكتابة. إذا توقف أي من الرئيسيين عن العمل، يمكن للنظام الاستمرار في العمل مع كل من القراءة والكتابة.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -823,7 +823,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
#### الفيدرالية (Federation)
|
#### الفيدرالية (Federation)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/U3qV33e.png">
|
<img src="../../images/U3qV33e.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>المصدر: التطوير حتى 10 ملايين مستخدم</a></i>
|
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>المصدر: التطوير حتى 10 ملايين مستخدم</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -844,7 +844,7 @@ Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
|
||||||
#### التجزئة (Sharding)
|
#### التجزئة (Sharding)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -986,7 +986,7 @@ NoSQL هي مجموعة من عناصر البيانات ممثلة في **مخ
|
||||||
#### مخزن الأعمدة العريضة
|
#### مخزن الأعمدة العريضة
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1009,7 +1009,7 @@ NoSQL هي مجموعة من عناصر البيانات ممثلة في **مخ
|
||||||
#### قاعدة بيانات الرسوم البيانية
|
#### قاعدة بيانات الرسوم البيانية
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1037,7 +1037,7 @@ NoSQL هي مجموعة من عناصر البيانات ممثلة في **مخ
|
||||||
### SQL أم NoSQL
|
### SQL أم NoSQL
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1079,7 +1079,7 @@ NoSQL هي مجموعة من عناصر البيانات ممثلة في **مخ
|
||||||
## التخزين المؤقت
|
## التخزين المؤقت
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1149,7 +1149,7 @@ NoSQL هي مجموعة من عناصر البيانات ممثلة في **مخ
|
||||||
#### التخزين المؤقت الجانبي (Cache-aside)
|
#### التخزين المؤقت الجانبي (Cache-aside)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1184,7 +1184,7 @@ def get_user(self, user_id):
|
||||||
#### الكتابة المباشرة (Write-through)
|
#### الكتابة المباشرة (Write-through)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1219,7 +1219,7 @@ def set_user(user_id, values):
|
||||||
#### الكتابة المؤجلة (write-back)
|
#### الكتابة المؤجلة (write-back)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1237,7 +1237,7 @@ def set_user(user_id, values):
|
||||||
#### التحديث المسبق (Refresh-ahead)
|
#### التحديث المسبق (Refresh-ahead)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1269,7 +1269,7 @@ def set_user(user_id, values):
|
||||||
## اللاتزامن (Asynchronism)
|
## اللاتزامن (Asynchronism)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1315,7 +1315,7 @@ def set_user(user_id, values):
|
||||||
## الاتصال
|
## الاتصال
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1347,7 +1347,7 @@ HTTP هو بروتوكول طبقة التطبيق يعتمد على بروتو
|
||||||
### بروتوكول التحكم بالإرسال (TCP)
|
### بروتوكول التحكم بالإرسال (TCP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1371,7 +1371,7 @@ TCP مفيد للتطبيقات التي تتطلب موثوقية عالية و
|
||||||
### بروتوكول حزم المستخدم (UDP)
|
### بروتوكول حزم المستخدم (UDP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1400,7 +1400,7 @@ UDP أقل موثوقية ولكنه يعمل بشكل جيد في حالات ا
|
||||||
### استدعاء الإجراء عن بعد (RPC)
|
### استدعاء الإجراء عن بعد (RPC)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1624,7 +1624,7 @@ Notes
|
||||||
> مقالات حول كيفية تصميم الأنظمة في العالم الحقيقي.
|
> مقالات حول كيفية تصميم الأنظمة في العالم الحقيقي.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# The System Design Primer
|
# The System Design Primer
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jj3A5N8.png">
|
<img src="../../images/jj3A5N8.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -48,15 +48,15 @@ Additional topics for interview prep:
|
||||||
## Anki flashcards
|
## Anki flashcards
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/zdCAkB3.png">
|
<img src="../../images/zdCAkB3.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/screenshot.png">
|
<img src="../../images/screenshot.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/screenshot_gif.gif">
|
<img src="../../images/screenshot_gif.gif">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
The provided [Anki flashcard decks](https://apps.ankiweb.net/) use spaced repetition to help you retain key system design concepts.
|
The provided [Anki flashcard decks](https://apps.ankiweb.net/) use spaced repetition to help you retain key system design concepts.
|
||||||
|
@ -74,7 +74,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="images/b4YtAEN.png">
|
<img src="../../images/b4YtAEN.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -111,99 +111,193 @@ 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="images/jrUBAF7.png">
|
<img src="../../images/jrUBAF7.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* [System design topics: start here](#system-design-topics-start-here)
|
- [The System Design Primer](#the-system-design-primer)
|
||||||
* [Step 1: Review the scalability video lecture](#step-1-review-the-scalability-video-lecture)
|
- [Motivation](#motivation)
|
||||||
* [Step 2: Review the scalability article](#step-2-review-the-scalability-article)
|
- [Learn how to design large-scale systems](#learn-how-to-design-large-scale-systems)
|
||||||
* [Next steps](#next-steps)
|
- [Learn from the open source community](#learn-from-the-open-source-community)
|
||||||
* [Performance vs scalability](#performance-vs-scalability)
|
- [Prep for the system design interview](#prep-for-the-system-design-interview)
|
||||||
* [Latency vs throughput](#latency-vs-throughput)
|
- [Anki flashcards](#anki-flashcards)
|
||||||
* [Availability vs consistency](#availability-vs-consistency)
|
- [Coding Resource: Interactive Coding Challenges](#coding-resource-interactive-coding-challenges)
|
||||||
* [CAP theorem](#cap-theorem)
|
- [Video Resources](#video-resources)
|
||||||
* [CP - consistency and partition tolerance](#cp---consistency-and-partition-tolerance)
|
- [Contributing](#contributing)
|
||||||
* [AP - availability and partition tolerance](#ap---availability-and-partition-tolerance)
|
- [Index of system design topics](#index-of-system-design-topics)
|
||||||
* [Consistency patterns](#consistency-patterns)
|
- [Study guide](#study-guide)
|
||||||
* [Weak consistency](#weak-consistency)
|
- [How to approach a system design interview question](#how-to-approach-a-system-design-interview-question)
|
||||||
* [Eventual consistency](#eventual-consistency)
|
- [Step 1: Outline use cases, constraints, and assumptions](#step-1-outline-use-cases-constraints-and-assumptions)
|
||||||
* [Strong consistency](#strong-consistency)
|
- [Step 2: Create a high level design](#step-2-create-a-high-level-design)
|
||||||
* [Availability patterns](#availability-patterns)
|
- [Step 3: Design core components](#step-3-design-core-components)
|
||||||
* [Fail-over](#fail-over)
|
- [Step 4: Scale the design](#step-4-scale-the-design)
|
||||||
* [Active-passive](#active-passive)
|
- [Back-of-the-envelope calculations](#back-of-the-envelope-calculations)
|
||||||
* [Active-active](#active-active)
|
- [Source(s) and further reading](#sources-and-further-reading)
|
||||||
* [Replication](#replication)
|
- [System design interview questions with solutions](#system-design-interview-questions-with-solutions)
|
||||||
* [Availability in numbers](#availability-in-numbers)
|
- [Design Pastebin.com (or Bit.ly)](#design-pastebincom-or-bitly)
|
||||||
* [Domain name system](#domain-name-system)
|
- [Design the Twitter timeline and search (or Facebook feed and search)](#design-the-twitter-timeline-and-search-or-facebook-feed-and-search)
|
||||||
* [Content delivery network](#content-delivery-network)
|
- [Design a web crawler](#design-a-web-crawler)
|
||||||
* [Push CDNs](#push-cdns)
|
- [Design Mint.com](#design-mintcom)
|
||||||
* [Pull CDNs](#pull-cdns)
|
- [Design the data structures for a social network](#design-the-data-structures-for-a-social-network)
|
||||||
* [Load balancer](#load-balancer)
|
- [Design a key-value store for a search engine](#design-a-key-value-store-for-a-search-engine)
|
||||||
* [Layer 4 load balancing](#layer-4-load-balancing)
|
- [Design Amazon's sales ranking by category feature](#design-amazons-sales-ranking-by-category-feature)
|
||||||
* [Layer 7 load balancing](#layer-7-load-balancing)
|
- [Design a system that scales to millions of users on AWS](#design-a-system-that-scales-to-millions-of-users-on-aws)
|
||||||
* [Consistent Hashing](#consistent-hashing)
|
- [Object-oriented design interview questions with solutions](#object-oriented-design-interview-questions-with-solutions)
|
||||||
* [Horizontal scaling](#horizontal-scaling)
|
- [System design topics: start here](#system-design-topics-start-here)
|
||||||
* [Reverse proxy (web server)](#reverse-proxy-web-server)
|
- [Step 1: Review the scalability video lecture](#step-1-review-the-scalability-video-lecture)
|
||||||
* [Load balancer vs reverse proxy](#load-balancer-vs-reverse-proxy)
|
- [Step 2: Review the scalability article](#step-2-review-the-scalability-article)
|
||||||
* [Application layer](#application-layer)
|
- [Next steps](#next-steps)
|
||||||
* [Microservices](#microservices)
|
- [Performance vs scalability](#performance-vs-scalability)
|
||||||
* [Service discovery](#service-discovery)
|
- [Source(s) and further reading](#sources-and-further-reading-1)
|
||||||
* [Database](#database)
|
- [Latency vs throughput](#latency-vs-throughput)
|
||||||
* [Relational database management system (RDBMS)](#relational-database-management-system-rdbms)
|
- [Source(s) and further reading](#sources-and-further-reading-2)
|
||||||
* [Master-slave replication](#master-slave-replication)
|
- [Availability vs consistency](#availability-vs-consistency)
|
||||||
* [Master-master replication](#master-master-replication)
|
- [CAP theorem](#cap-theorem)
|
||||||
* [Federation](#federation)
|
- [CP - consistency and partition tolerance](#cp---consistency-and-partition-tolerance)
|
||||||
* [Sharding](#sharding)
|
- [AP - availability and partition tolerance](#ap---availability-and-partition-tolerance)
|
||||||
* [Denormalization](#denormalization)
|
- [Source(s) and further reading](#sources-and-further-reading-3)
|
||||||
* [SQL tuning](#sql-tuning)
|
- [Consistency patterns](#consistency-patterns)
|
||||||
* [NoSQL](#nosql)
|
- [Weak consistency](#weak-consistency)
|
||||||
* [Key-value store](#key-value-store)
|
- [Eventual consistency](#eventual-consistency)
|
||||||
* [Document store](#document-store)
|
- [Strong consistency](#strong-consistency)
|
||||||
* [Wide column store](#wide-column-store)
|
- [Source(s) and further reading](#sources-and-further-reading-4)
|
||||||
* [Graph Database](#graph-database)
|
- [Availability patterns](#availability-patterns)
|
||||||
* [SQL or NoSQL](#sql-or-nosql)
|
- [Fail-over](#fail-over)
|
||||||
* [Cache](#cache)
|
- [Active-passive](#active-passive)
|
||||||
* [Client caching](#client-caching)
|
- [Active-active](#active-active)
|
||||||
* [CDN caching](#cdn-caching)
|
- [Disadvantage(s): failover](#disadvantages-failover)
|
||||||
* [Web server caching](#web-server-caching)
|
- [Replication](#replication)
|
||||||
* [Database caching](#database-caching)
|
- [Master-slave and master-master](#master-slave-and-master-master)
|
||||||
* [Application caching](#application-caching)
|
- [Availability in numbers](#availability-in-numbers)
|
||||||
* [Caching at the database query level](#caching-at-the-database-query-level)
|
- [99.9% availability - three 9s](#999-availability---three-9s)
|
||||||
* [Caching at the object level](#caching-at-the-object-level)
|
- [99.99% availability - four 9s](#9999-availability---four-9s)
|
||||||
* [When to update the cache](#when-to-update-the-cache)
|
- [Availability in parallel vs in sequence](#availability-in-parallel-vs-in-sequence)
|
||||||
* [Cache-aside](#cache-aside)
|
- [In sequence](#in-sequence)
|
||||||
* [Write-through](#write-through)
|
- [In parallel](#in-parallel)
|
||||||
* [Write-behind (write-back)](#write-behind-write-back)
|
- [Domain name system](#domain-name-system)
|
||||||
* [Refresh-ahead](#refresh-ahead)
|
- [Disadvantage(s): DNS](#disadvantages-dns)
|
||||||
* [Asynchronism](#asynchronism)
|
- [Source(s) and further reading](#sources-and-further-reading-5)
|
||||||
* [Message queues](#message-queues)
|
- [Content delivery network](#content-delivery-network)
|
||||||
* [Task queues](#task-queues)
|
- [Push CDNs](#push-cdns)
|
||||||
* [Back pressure](#back-pressure)
|
- [Pull CDNs](#pull-cdns)
|
||||||
* [Communication](#communication)
|
- [Disadvantage(s): CDN](#disadvantages-cdn)
|
||||||
* [Hypertext transfer protocol (HTTP)](#hypertext-transfer-protocol-http)
|
- [Source(s) and further reading](#sources-and-further-reading-6)
|
||||||
* [Transmission control protocol (TCP)](#transmission-control-protocol-tcp)
|
- [Load balancer](#load-balancer)
|
||||||
* [User datagram protocol (UDP)](#user-datagram-protocol-udp)
|
- [Layer 4 load balancing](#layer-4-load-balancing)
|
||||||
* [Remote procedure call (RPC)](#remote-procedure-call-rpc)
|
- [Layer 7 load balancing](#layer-7-load-balancing)
|
||||||
* [Representational state transfer (REST)](#representational-state-transfer-rest)
|
- [Consistent Hashing](#consistent-hashing)
|
||||||
* [Security](#security)
|
- [Horizontal scaling](#horizontal-scaling)
|
||||||
* [Appendix](#appendix)
|
- [Disadvantage(s): horizontal scaling](#disadvantages-horizontal-scaling)
|
||||||
* [Powers of two table](#powers-of-two-table)
|
- [Disadvantage(s): load balancer](#disadvantages-load-balancer)
|
||||||
* [Latency numbers every programmer should know](#latency-numbers-every-programmer-should-know)
|
- [Source(s) and further reading](#sources-and-further-reading-7)
|
||||||
* [Additional system design interview questions](#additional-system-design-interview-questions)
|
- [Reverse proxy (web server)](#reverse-proxy-web-server)
|
||||||
* [Real world architectures](#real-world-architectures)
|
- [Load balancer vs reverse proxy](#load-balancer-vs-reverse-proxy)
|
||||||
* [Company architectures](#company-architectures)
|
- [Disadvantage(s): reverse proxy](#disadvantages-reverse-proxy)
|
||||||
* [Company engineering blogs](#company-engineering-blogs)
|
- [Source(s) and further reading](#sources-and-further-reading-8)
|
||||||
* [Under development](#under-development)
|
- [Application layer](#application-layer)
|
||||||
* [Credits](#credits)
|
- [Microservices](#microservices)
|
||||||
* [Contact info](#contact-info)
|
- [Service Discovery](#service-discovery)
|
||||||
* [License](#license)
|
- [Disadvantage(s): application layer](#disadvantages-application-layer)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-9)
|
||||||
|
- [Database](#database)
|
||||||
|
- [Relational database management system (RDBMS)](#relational-database-management-system-rdbms)
|
||||||
|
- [Master-slave replication](#master-slave-replication)
|
||||||
|
- [Disadvantage(s): master-slave replication](#disadvantages-master-slave-replication)
|
||||||
|
- [Master-master replication](#master-master-replication)
|
||||||
|
- [Disadvantage(s): master-master replication](#disadvantages-master-master-replication)
|
||||||
|
- [Disadvantage(s): replication](#disadvantages-replication)
|
||||||
|
- [Source(s) and further reading: replication](#sources-and-further-reading-replication)
|
||||||
|
- [Federation](#federation)
|
||||||
|
- [Disadvantage(s): federation](#disadvantages-federation)
|
||||||
|
- [Source(s) and further reading: federation](#sources-and-further-reading-federation)
|
||||||
|
- [Sharding](#sharding)
|
||||||
|
- [Disadvantage(s): sharding](#disadvantages-sharding)
|
||||||
|
- [Source(s) and further reading: sharding](#sources-and-further-reading-sharding)
|
||||||
|
- [Denormalization](#denormalization)
|
||||||
|
- [Disadvantage(s): denormalization](#disadvantages-denormalization)
|
||||||
|
- [Source(s) and further reading: denormalization](#sources-and-further-reading-denormalization)
|
||||||
|
- [SQL tuning](#sql-tuning)
|
||||||
|
- [Tighten up the schema](#tighten-up-the-schema)
|
||||||
|
- [Use good indices](#use-good-indices)
|
||||||
|
- [Avoid expensive joins](#avoid-expensive-joins)
|
||||||
|
- [Partition tables](#partition-tables)
|
||||||
|
- [Tune the query cache](#tune-the-query-cache)
|
||||||
|
- [Source(s) and further reading: SQL tuning](#sources-and-further-reading-sql-tuning)
|
||||||
|
- [NoSQL](#nosql)
|
||||||
|
- [Key-value store](#key-value-store)
|
||||||
|
- [Source(s) and further reading: key-value store](#sources-and-further-reading-key-value-store)
|
||||||
|
- [Document store](#document-store)
|
||||||
|
- [Source(s) and further reading: document store](#sources-and-further-reading-document-store)
|
||||||
|
- [Wide column store](#wide-column-store)
|
||||||
|
- [Source(s) and further reading: wide column store](#sources-and-further-reading-wide-column-store)
|
||||||
|
- [Graph database](#graph-database)
|
||||||
|
- [Source(s) and further reading: graph](#sources-and-further-reading-graph)
|
||||||
|
- [Source(s) and further reading: NoSQL](#sources-and-further-reading-nosql)
|
||||||
|
- [SQL or NoSQL](#sql-or-nosql)
|
||||||
|
- [Source(s) and further reading: SQL or NoSQL](#sources-and-further-reading-sql-or-nosql)
|
||||||
|
- [Cache](#cache)
|
||||||
|
- [Client caching](#client-caching)
|
||||||
|
- [CDN caching](#cdn-caching)
|
||||||
|
- [Web server caching](#web-server-caching)
|
||||||
|
- [Database caching](#database-caching)
|
||||||
|
- [Application caching](#application-caching)
|
||||||
|
- [Caching at the database query level](#caching-at-the-database-query-level)
|
||||||
|
- [Caching at the object level](#caching-at-the-object-level)
|
||||||
|
- [When to update the cache](#when-to-update-the-cache)
|
||||||
|
- [Cache-aside](#cache-aside)
|
||||||
|
- [Disadvantage(s): cache-aside](#disadvantages-cache-aside)
|
||||||
|
- [Write-through](#write-through)
|
||||||
|
- [Disadvantage(s): write through](#disadvantages-write-through)
|
||||||
|
- [Write-behind (write-back)](#write-behind-write-back)
|
||||||
|
- [Disadvantage(s): write-behind](#disadvantages-write-behind)
|
||||||
|
- [Refresh-ahead](#refresh-ahead)
|
||||||
|
- [Disadvantage(s): refresh-ahead](#disadvantages-refresh-ahead)
|
||||||
|
- [Disadvantage(s): cache](#disadvantages-cache)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-10)
|
||||||
|
- [Asynchronism](#asynchronism)
|
||||||
|
- [Message queues](#message-queues)
|
||||||
|
- [Task queues](#task-queues)
|
||||||
|
- [Back pressure](#back-pressure)
|
||||||
|
- [Transactional Messaging](#transactional-messaging)
|
||||||
|
- [Disadvantage(s): asynchronism](#disadvantages-asynchronism)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-11)
|
||||||
|
- [Communication](#communication)
|
||||||
|
- [Hypertext transfer protocol (HTTP)](#hypertext-transfer-protocol-http)
|
||||||
|
- [Source(s) and further reading: HTTP](#sources-and-further-reading-http)
|
||||||
|
- [Transmission control protocol (TCP)](#transmission-control-protocol-tcp)
|
||||||
|
- [User datagram protocol (UDP)](#user-datagram-protocol-udp)
|
||||||
|
- [Source(s) and further reading: TCP and UDP](#sources-and-further-reading-tcp-and-udp)
|
||||||
|
- [Remote procedure call (RPC)](#remote-procedure-call-rpc)
|
||||||
|
- [Disadvantage(s): RPC](#disadvantages-rpc)
|
||||||
|
- [Representational state transfer (REST)](#representational-state-transfer-rest)
|
||||||
|
- [Disadvantage(s): REST](#disadvantages-rest)
|
||||||
|
- [RPC and REST calls comparison](#rpc-and-rest-calls-comparison)
|
||||||
|
- [Source(s) and further reading: REST and RPC](#sources-and-further-reading-rest-and-rpc)
|
||||||
|
- [Security](#security)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-12)
|
||||||
|
- [Appendix](#appendix)
|
||||||
|
- [Powers of two table](#powers-of-two-table)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-13)
|
||||||
|
- [Latency numbers every programmer should know](#latency-numbers-every-programmer-should-know)
|
||||||
|
- [Latency numbers visualized](#latency-numbers-visualized)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-14)
|
||||||
|
- [Additional system design interview questions](#additional-system-design-interview-questions)
|
||||||
|
- [Real world architectures](#real-world-architectures)
|
||||||
|
- [Company architectures](#company-architectures)
|
||||||
|
- [Company engineering blogs](#company-engineering-blogs)
|
||||||
|
- [Source(s) and further reading](#sources-and-further-reading-15)
|
||||||
|
- [Interview preparation resources](#interview-preparation-resources)
|
||||||
|
- [Mock interviews](#mock-interviews)
|
||||||
|
- [Under development](#under-development)
|
||||||
|
- [Credits](#credits)
|
||||||
|
- [Contact info](#contact-info)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
## Study guide
|
## Study guide
|
||||||
|
|
||||||
> Suggested topics to review based on your interview timeline (short, medium, long).
|
> Suggested topics to review based on your interview timeline (short, medium, long).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**Q: For interviews, do I need to know everything here?**
|
**Q: For interviews, do I need to know everything here?**
|
||||||
|
|
||||||
|
@ -332,49 +426,49 @@ You can practice a few sample questions and discuss solutions with the community
|
||||||
|
|
||||||
[View exercise and solution](solutions/system_design/pastebin/README.md)
|
[View exercise and solution](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Object-oriented design interview questions with solutions
|
## Object-oriented design interview questions with solutions
|
||||||
|
|
||||||
|
@ -473,7 +567,7 @@ Generally, you should aim for **maximal throughput** with **acceptable latency**
|
||||||
### CAP theorem
|
### CAP theorem
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/1_2Ed1S7UUfLT21AeH0ymIwQ.png">
|
<img src="../../images/1_2Ed1S7UUfLT21AeH0ymIwQ.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://medium.com/codenx/explaining-the-cap-theorem-and-its-limitations-e43f47f104c3>Source: medium.com explaining-the-cap-theorem-and-its-limitations</a></i>
|
<i><a href=https://medium.com/codenx/explaining-the-cap-theorem-and-its-limitations-e43f47f104c3>Source: medium.com explaining-the-cap-theorem-and-its-limitations</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -615,7 +709,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="images/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>
|
||||||
|
@ -655,7 +749,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="images/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>
|
||||||
|
@ -697,7 +791,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="images/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>
|
||||||
|
@ -752,7 +846,7 @@ Here's how it works:
|
||||||
* <b>Scalability and Consistency:</b> The key benefit of consistent hashing is its scalability. If a server is added or removed, only requests that map to the immediate vicinity of the affected server will be re-routed. Most requests will continue to be directed to the same servers as before. This minimizes data re-caching and avoids creating hotspots where certain servers become overloaded
|
* <b>Scalability and Consistency:</b> The key benefit of consistent hashing is its scalability. If a server is added or removed, only requests that map to the immediate vicinity of the affected server will be re-routed. Most requests will continue to be directed to the same servers as before. This minimizes data re-caching and avoids creating hotspots where certain servers become overloaded
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jsjss.png">
|
<img src="../../images/jsjss.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -786,7 +880,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="images/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/>
|
||||||
|
@ -831,7 +925,7 @@ Additional benefits include:
|
||||||
## Application layer
|
## Application layer
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -866,7 +960,7 @@ Systems such as [Consul](https://www.consul.io/docs/index.html), [Etcd](https://
|
||||||
## Database
|
## Database
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -889,7 +983,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="images/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>
|
||||||
|
@ -904,7 +998,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="images/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>
|
||||||
|
@ -932,7 +1026,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="images/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>
|
||||||
|
@ -953,7 +1047,7 @@ Federation (or functional partitioning) splits up databases by function. For ex
|
||||||
#### Sharding
|
#### Sharding
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1099,7 +1193,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="images/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>
|
||||||
|
@ -1122,7 +1216,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="images/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>
|
||||||
|
@ -1151,7 +1245,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="images/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>
|
||||||
|
@ -1193,7 +1287,7 @@ Sample data well-suited for **NoSQL**:
|
||||||
## Cache
|
## Cache
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1264,7 +1358,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="images/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>
|
||||||
|
@ -1302,7 +1396,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="images/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>
|
||||||
|
@ -1337,7 +1431,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="images/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>
|
||||||
|
@ -1355,7 +1449,7 @@ In write-behind, the application does the following:
|
||||||
#### Refresh-ahead
|
#### Refresh-ahead
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1387,7 +1481,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="images/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>
|
||||||
|
@ -1450,7 +1544,7 @@ Once the transaction is committed, a background worker reads the "process paymen
|
||||||
## Communication
|
## Communication
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1482,7 +1576,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="images/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>
|
||||||
|
@ -1508,7 +1602,7 @@ Use TCP over UDP when:
|
||||||
### User datagram protocol (UDP)
|
### User datagram protocol (UDP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1539,7 +1633,7 @@ Use UDP over TCP when:
|
||||||
### Remote procedure call (RPC)
|
### Remote procedure call (RPC)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1766,7 +1860,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="images/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>
|
||||||
|
|
|
@ -27,7 +27,7 @@ Together, we can create a state-of-the-art primer that reflects the realities of
|
||||||
## What's New?
|
## What's New?
|
||||||
|
|
||||||
|
|
||||||
See [System Design at a Glance]([./design-glance.md](https://github.com/ido777/system-design-primer-update/blob/main/CHANGELOG.md)) for a comprehensive list of changes.
|
See [CHANGELOG](https://github.com/ido777/system-design-primer-update/blob/main/CHANGELOG.md) for a comprehensive list of changes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# システム設計入門
|
# システム設計入門
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jj3A5N8.png">
|
<img src="../../images/jj3A5N8.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
## 暗記カード
|
## 暗記カード
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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="images/b4YtAEN.png">
|
<img src="../../images/b4YtAEN.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -91,96 +91,182 @@
|
||||||
> それぞれのセクションはより学びを深めるような他の文献へのリンクが貼られています。
|
> それぞれのセクションはより学びを深めるような他の文献へのリンクが貼られています。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jrUBAF7.png">
|
<img src="../../images/jrUBAF7.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* [システム設計トピック: まずはここから](#システム設計トピックス-まずはここから)
|
- [システム設計入門](#システム設計入門)
|
||||||
* [Step 1: スケーラビリティに関する動画を見る](#ステップ-1-スケーラビリティに関する動画を観て復習する)
|
- [動機・目的](#動機目的)
|
||||||
* [Step 2: スケーラビリティに関する記事を読む](#ステップ-2-スケーラビリティに関する資料を読んで復習する)
|
- [大規模システムの設計を学ぶ](#大規模システムの設計を学ぶ)
|
||||||
* [次のステップ](#次のステップ)
|
- [オープンソースコミュニティから学ぶ](#オープンソースコミュニティから学ぶ)
|
||||||
* [パフォーマンス vs スケーラビリティ](#パフォーマンス-vs-スケーラビリティ)
|
- [システム設計面接課題に備える](#システム設計面接課題に備える)
|
||||||
* [レイテンシー vs スループット](#レイテンシー-vs-スループット)
|
- [暗記カード](#暗記カード)
|
||||||
* [可用性 vs 一貫性](#可用性-vs-一貫性)
|
- [コーディング技術課題用の問題: 練習用インタラクティブアプリケーション](#コーディング技術課題用の問題-練習用インタラクティブアプリケーション)
|
||||||
* [CAP理論](#cap-理論)
|
- [コントリビュート](#コントリビュート)
|
||||||
* [CP - 一貫性(consistency)と分割性(partition)耐性](#cp---一貫性と分断耐性consistency-and-partition-tolerance)
|
- [システム設計目次](#システム設計目次)
|
||||||
* [AP - 可用性(availability)と分割性(partition)耐性](#ap---可用性と分断耐性availability-and-partition-tolerance)
|
- [学習指針](#学習指針)
|
||||||
* [一貫性 パターン](#一貫性パターン)
|
- [システム設計面接にどのようにして臨めばいいか](#システム設計面接にどのようにして臨めばいいか)
|
||||||
* [弱い一貫性](#弱い一貫性)
|
- [ステップ 1: システム使用例の概要、制約、推計値等を聞き出し、まとめる](#ステップ-1-システム使用例の概要制約推計値等を聞き出しまとめる)
|
||||||
* [結果整合性](#結果整合性)
|
- [ステップ 2: 高レベルのシステム設計を組み立てる](#ステップ-2-高レベルのシステム設計を組み立てる)
|
||||||
* [強い一貫性](#強い一貫性)
|
- [ステップ 3: 核となるコンポーネントを設計する](#ステップ-3-核となるコンポーネントを設計する)
|
||||||
* [可用性 パターン](#可用性パターン)
|
- [ステップ 4: システム設計のスケール](#ステップ-4-システム設計のスケール)
|
||||||
* [フェイルオーバー](#フェイルオーバー)
|
- [ちょっとした暗算問題](#ちょっとした暗算問題)
|
||||||
* [レプリケーション](#レプリケーション)
|
- [文献とその他の参考資料](#文献とその他の参考資料)
|
||||||
* [ドメインネームシステム(DNS)](#ドメインネームシステム)
|
- [システム設計課題例とその解答](#システム設計課題例とその解答)
|
||||||
* [コンテンツデリバリーネットワーク(CDN)](#コンテンツデリバリーネットワークcontent-delivery-network)
|
- [Pastebin.com (もしくは Bit.ly) の設計](#pastebincom-もしくは-bitly-の設計)
|
||||||
* [プッシュCDN](#プッシュcdn)
|
- [Twitterタイムライン\&検索 (もしくはFacebookフィード\&検索)の設計](#twitterタイムライン検索-もしくはfacebookフィード検索の設計)
|
||||||
* [プルCDN](#プルcdn)
|
- [ウェブクローラーの設計](#ウェブクローラーの設計)
|
||||||
* [ロードバランサー](#ロードバランサー)
|
- [Mint.comの設計](#mintcomの設計)
|
||||||
* [アクティブ/パッシブ構成](#アクティブパッシブ)
|
- [SNSサービスのデータ構造の設計](#snsサービスのデータ構造の設計)
|
||||||
* [アクティブ/アクティブ構成](#アクティブアクティブ)
|
- [検索エンジンのキー/バリュー構造の設計](#検索エンジンのキーバリュー構造の設計)
|
||||||
* [Layer 4 ロードバランシング](#layer-4-ロードバランシング)
|
- [Amazonのカテゴリ毎の売り上げランキングの設計](#amazonのカテゴリ毎の売り上げランキングの設計)
|
||||||
* [Layer 7 ロードバランシング](#layer-7-ロードバランシング)
|
- [AWS上で100万人規模のユーザーを捌くサービスの設計](#aws上で100万人規模のユーザーを捌くサービスの設計)
|
||||||
* [水平スケーリング](#水平スケーリング)
|
- [オブジェクト指向設計問題と解答](#オブジェクト指向設計問題と解答)
|
||||||
* [リバースプロキシ (WEBサーバー)](#リバースプロキシwebサーバー)
|
- [システム設計トピックス: まずはここから](#システム設計トピックス-まずはここから)
|
||||||
* [ロードバランサー vs リバースプロキシ](#ロードバランサー-vs-リバースプロキシ)
|
- [ステップ 1: スケーラビリティに関する動画を観て復習する](#ステップ-1-スケーラビリティに関する動画を観て復習する)
|
||||||
* [アプリケーションレイヤー](#アプリケーション層)
|
- [ステップ 2: スケーラビリティに関する資料を読んで復習する](#ステップ-2-スケーラビリティに関する資料を読んで復習する)
|
||||||
* [マイクロサービス](#マイクロサービス)
|
- [次のステップ](#次のステップ)
|
||||||
* [サービスディスカバリー](#service-discovery)
|
- [パフォーマンス vs スケーラビリティ](#パフォーマンス-vs-スケーラビリティ)
|
||||||
* [データベース](#データベース)
|
- [その他の参考資料、ページ](#その他の参考資料ページ)
|
||||||
* [リレーショナルデータベースマネジメントシステム (RDBMS)](#リレーショナルデータベースマネジメントシステム-rdbms)
|
- [レイテンシー vs スループット](#レイテンシー-vs-スループット)
|
||||||
* [マスター/スレーブ レプリケーション](#マスタースレーブ-レプリケーション)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-1)
|
||||||
* [マスター/マスター レプリケーション](#マスターマスター-レプリケーション)
|
- [可用性 vs 一貫性](#可用性-vs-一貫性)
|
||||||
* [フェデレーション](#federation)
|
- [CAP 理論](#cap-理論)
|
||||||
* [シャーディング](#シャーディング)
|
- [CP - 一貫性と分断耐性(consistency and partition tolerance)](#cp---一貫性と分断耐性consistency-and-partition-tolerance)
|
||||||
* [デノーマライゼーション](#非正規化)
|
- [AP - 可用性と分断耐性(availability and partition tolerance)](#ap---可用性と分断耐性availability-and-partition-tolerance)
|
||||||
* [SQL チューニング](#sqlチューニング)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-2)
|
||||||
* [NoSQL](#nosql)
|
- [一貫性パターン](#一貫性パターン)
|
||||||
* [キー/バリューストア](#キーバリューストア)
|
- [弱い一貫性](#弱い一貫性)
|
||||||
* [ドキュメントストア](#ドキュメントストア)
|
- [結果整合性](#結果整合性)
|
||||||
* [ワイドカラムストア](#ワイドカラムストア)
|
- [強い一貫性](#強い一貫性)
|
||||||
* [グラフ データベース](#グラフデータベース)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-3)
|
||||||
* [SQL or NoSQL](#sqlかnosqlか)
|
- [可用性パターン](#可用性パターン)
|
||||||
* [キャッシュ](#キャッシュ)
|
- [フェイルオーバー](#フェイルオーバー)
|
||||||
* [クライアントキャッシング](#クライアントキャッシング)
|
- [アクティブ・パッシブ](#アクティブパッシブ)
|
||||||
* [CDNキャッシング](#cdnキャッシング)
|
- [アクティブ・アクティブ](#アクティブアクティブ)
|
||||||
* [Webサーバーキャッシング](#webサーバーキャッシング)
|
- [短所: フェイルオーバー](#短所-フェイルオーバー)
|
||||||
* [データベースキャッシング](#データベースキャッシング)
|
- [レプリケーション](#レプリケーション)
|
||||||
* [アプリケーションキャッシング](#アプリケーションキャッシング)
|
- [マスター・スレーブ と マスター・マスター](#マスタースレーブとマスターマスター)
|
||||||
* [データベースクエリレベルでキャッシングする](#データベースクエリレベルでのキャッシング)
|
- [ドメインネームシステム](#ドメインネームシステム)
|
||||||
* [オブジェクトレベルでキャッシングする](#オブジェクトレベルでのキャッシング)
|
- [欠点: DNS](#欠点-dns)
|
||||||
* [いつキャッシュを更新するのか](#いつキャッシュを更新するか)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-4)
|
||||||
* [キャッシュアサイド](#キャッシュアサイド)
|
- [コンテンツデリバリーネットワーク(Content delivery network)](#コンテンツデリバリーネットワークcontent-delivery-network)
|
||||||
* [ライトスルー](#ライトスルー)
|
- [プッシュCDN](#プッシュcdn)
|
||||||
* [ライトビハインド (ライトバック)](#ライトビハインド-ライトバック)
|
- [プルCDN](#プルcdn)
|
||||||
* [リフレッシュアヘッド](#リフレッシュアヘッド)
|
- [欠点: CDN](#欠点-cdn)
|
||||||
* [非同期処理](#非同期処理)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-5)
|
||||||
* [メッセージキュー](#メッセージキュー)
|
- [ロードバランサー](#ロードバランサー)
|
||||||
* [タスクキュー](#タスクキュー)
|
- [Layer 4 ロードバランシング](#layer-4-ロードバランシング)
|
||||||
* [バックプレッシャー](#バックプレッシャー)
|
- [Layer 7 ロードバランシング](#layer-7-ロードバランシング)
|
||||||
* [通信](#通信)
|
- [水平スケーリング](#水平スケーリング)
|
||||||
* [伝送制御プロトコル (TCP)](#伝送制御プロトコル-tcp)
|
- [欠点: 水平スケーリング](#欠点-水平スケーリング)
|
||||||
* [ユーザデータグラムプロトコル (UDP)](#ユーザデータグラムプロトコル-udp)
|
- [欠点: ロードバランサー](#欠点-ロードバランサー)
|
||||||
* [遠隔手続呼出 (RPC)](#遠隔手続呼出-rpc)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-6)
|
||||||
* [Representational state transfer (REST)](#representational-state-transfer-rest)
|
- [リバースプロキシ(webサーバー)](#リバースプロキシwebサーバー)
|
||||||
* [セキュリティ](#セキュリティ)
|
- [ロードバランサー vs リバースプロキシ](#ロードバランサー-vs-リバースプロキシ)
|
||||||
* [補遺](#補遺)
|
- [欠点: リバースプロキシ](#欠点-リバースプロキシ)
|
||||||
* [2の乗数表](#2の乗数表)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-7)
|
||||||
* [全てのプログラマーが知るべきレイテンシー値](#全てのプログラマーが知るべきレイテンシー値)
|
- [アプリケーション層](#アプリケーション層)
|
||||||
* [他のシステム設計面接例題](#他のシステム設計面接例題)
|
- [マイクロサービス](#マイクロサービス)
|
||||||
* [実世界でのアーキテクチャ](#実世界のアーキテクチャ)
|
- [サービスディスカバリー](#サービスディスカバリー)
|
||||||
* [各企業のアーキテクチャ](#各企業のアーキテクチャ)
|
- [欠点: アプリケーション層](#欠点-アプリケーション層)
|
||||||
* [企業のエンジニアブログ](#企業のエンジニアブログ)
|
- [その他の参考資料、ページ](#その他の参考資料ページ-8)
|
||||||
* [作業中](#進行中の作業)
|
- [データベース](#データベース)
|
||||||
* [クレジット](#クレジット)
|
- [リレーショナルデータベースマネジメントシステム (RDBMS)](#リレーショナルデータベースマネジメントシステム-rdbms)
|
||||||
* [連絡情報](#contact-info)
|
- [マスタースレーブ レプリケーション](#マスタースレーブ-レプリケーション)
|
||||||
* [ライセンス](#license)
|
- [欠点: マスタースレーブ レプリケーション](#欠点-マスタースレーブ-レプリケーション)
|
||||||
|
- [マスターマスター レプリケーション](#マスターマスター-レプリケーション)
|
||||||
|
- [欠点: マスターマスター レプリケーション](#欠点-マスターマスター-レプリケーション)
|
||||||
|
- [欠点: レプリケーション](#欠点-レプリケーション)
|
||||||
|
- [その他の参考資料、ページ: レプリケーション](#その他の参考資料ページ-レプリケーション)
|
||||||
|
- [Federation](#federation)
|
||||||
|
- [欠点: federation](#欠点-federation)
|
||||||
|
- [その他の参考資料、ページ: federation](#その他の参考資料ページ-federation)
|
||||||
|
- [シャーディング](#シャーディング)
|
||||||
|
- [欠点: シャーディング](#欠点-シャーディング)
|
||||||
|
- [その他の参考資料、ページ: シャーディング](#その他の参考資料ページ-シャーディング)
|
||||||
|
- [非正規化](#非正規化)
|
||||||
|
- [欠点: 非正規化](#欠点-非正規化)
|
||||||
|
- [その他の参考資料、ページ: 非正規化](#その他の参考資料ページ-非正規化)
|
||||||
|
- [SQLチューニング](#sqlチューニング)
|
||||||
|
- [スキーマを絞る](#スキーマを絞る)
|
||||||
|
- [インデックスを効果的に用いる](#インデックスを効果的に用いる)
|
||||||
|
- [高負荷なジョインを避ける](#高負荷なジョインを避ける)
|
||||||
|
- [テーブルのパーティション](#テーブルのパーティション)
|
||||||
|
- [クエリキャッシュを調整する](#クエリキャッシュを調整する)
|
||||||
|
- [その他の参考資料、ページ: SQLチューニング](#その他の参考資料ページ-sqlチューニング)
|
||||||
|
- [NoSQL](#nosql)
|
||||||
|
- [キーバリューストア](#キーバリューストア)
|
||||||
|
- [その他の参考資料、ページ: キーバリューストア](#その他の参考資料ページ-キーバリューストア)
|
||||||
|
- [ドキュメントストア](#ドキュメントストア)
|
||||||
|
- [その他の参考資料、ページ: ドキュメントストア](#その他の参考資料ページ--ドキュメントストア)
|
||||||
|
- [ワイドカラムストア](#ワイドカラムストア)
|
||||||
|
- [その他の参考資料、ページ: ワイドカラムストア](#その他の参考資料ページ--ワイドカラムストア)
|
||||||
|
- [グラフデータベース](#グラフデータベース)
|
||||||
|
- [その他の参考資料、ページ: グラフ](#その他の参考資料ページ--グラフ)
|
||||||
|
- [その他の参考資料、ページ: NoSQL](#その他の参考資料ページ--nosql)
|
||||||
|
- [SQLか?NoSQLか?](#sqlかnosqlか)
|
||||||
|
- [その他の参考資料、ページ: SQLもしくはNoSQL](#その他の参考資料ページ--sqlもしくはnosql)
|
||||||
|
- [キャッシュ](#キャッシュ)
|
||||||
|
- [クライアントキャッシング](#クライアントキャッシング)
|
||||||
|
- [CDNキャッシング](#cdnキャッシング)
|
||||||
|
- [Webサーバーキャッシング](#webサーバーキャッシング)
|
||||||
|
- [データベースキャッシング](#データベースキャッシング)
|
||||||
|
- [アプリケーションキャッシング](#アプリケーションキャッシング)
|
||||||
|
- [データベースクエリレベルでのキャッシング](#データベースクエリレベルでのキャッシング)
|
||||||
|
- [オブジェクトレベルでのキャッシング](#オブジェクトレベルでのキャッシング)
|
||||||
|
- [いつキャッシュを更新するか](#いつキャッシュを更新するか)
|
||||||
|
- [キャッシュアサイド](#キャッシュアサイド)
|
||||||
|
- [欠点: キャッシュアサイド](#欠点-キャッシュアサイド)
|
||||||
|
- [ライトスルー](#ライトスルー)
|
||||||
|
- [欠点: ライトスルー](#欠点-ライトスルー)
|
||||||
|
- [ライトビハインド (ライトバック)](#ライトビハインド-ライトバック)
|
||||||
|
- [欠点: ライトビハインド](#欠点-ライトビハインド)
|
||||||
|
- [リフレッシュアヘッド](#リフレッシュアヘッド)
|
||||||
|
- [欠点: リフレッシュアヘッド](#欠点-リフレッシュアヘッド)
|
||||||
|
- [欠点: キャッシュ](#欠点-キャッシュ)
|
||||||
|
- [その他の参考資料、ページ](#その他の参考資料ページ-9)
|
||||||
|
- [非同期処理](#非同期処理)
|
||||||
|
- [メッセージキュー](#メッセージキュー)
|
||||||
|
- [タスクキュー](#タスクキュー)
|
||||||
|
- [バックプレッシャー](#バックプレッシャー)
|
||||||
|
- [欠点: 非同期処理](#欠点-非同期処理)
|
||||||
|
- [その他の参考資料、ページ](#その他の参考資料ページ-10)
|
||||||
|
- [通信](#通信)
|
||||||
|
- [Hypertext transfer protocol (HTTP)](#hypertext-transfer-protocol-http)
|
||||||
|
- [その他の参考資料、ページ: HTTP](#その他の参考資料ページ-http)
|
||||||
|
- [伝送制御プロトコル (TCP)](#伝送制御プロトコル-tcp)
|
||||||
|
- [ユーザデータグラムプロトコル (UDP)](#ユーザデータグラムプロトコル-udp)
|
||||||
|
- [その他の参考資料、ページ: TCP と UDP](#その他の参考資料ページ-tcp-と-udp)
|
||||||
|
- [遠隔手続呼出 (RPC)](#遠隔手続呼出-rpc)
|
||||||
|
- [欠点: RPC](#欠点-rpc)
|
||||||
|
- [Representational state transfer (REST)](#representational-state-transfer-rest)
|
||||||
|
- [欠点: REST](#欠点-rest)
|
||||||
|
- [RPCとREST比較](#rpcとrest比較)
|
||||||
|
- [その他の参考資料、ページ: REST と RPC](#その他の参考資料ページ-rest-と-rpc)
|
||||||
|
- [セキュリティ](#セキュリティ)
|
||||||
|
- [その他の参考資料、ページ:](#その他の参考資料ページ-11)
|
||||||
|
- [補遺](#補遺)
|
||||||
|
- [2の乗数表](#2の乗数表)
|
||||||
|
- [その他の参考資料、ページ:](#その他の参考資料ページ-12)
|
||||||
|
- [全てのプログラマーが知るべきレイテンシー値](#全てのプログラマーが知るべきレイテンシー値)
|
||||||
|
- [レイテンシーの視覚的表](#レイテンシーの視覚的表)
|
||||||
|
- [その他の参考資料、ページ:](#その他の参考資料ページ-13)
|
||||||
|
- [他のシステム設計面接例題](#他のシステム設計面接例題)
|
||||||
|
- [実世界のアーキテクチャ](#実世界のアーキテクチャ)
|
||||||
|
- [各企業のアーキテクチャ](#各企業のアーキテクチャ)
|
||||||
|
- [企業のエンジニアブログ](#企業のエンジニアブログ)
|
||||||
|
- [その他の参考資料、ページ:](#その他の参考資料ページ-14)
|
||||||
|
- [進行中の作業](#進行中の作業)
|
||||||
|
- [クレジット](#クレジット)
|
||||||
|
- [Contact info](#contact-info)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
## 学習指針
|
## 学習指針
|
||||||
|
|
||||||
> 学習スパンに応じてみるべきトピックス (short, medium, long)
|
> 学習スパンに応じてみるべきトピックス (short, medium, long)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**Q: 面接のためには、ここにあるものすべてをやらないといけないのでしょうか?**
|
**Q: 面接のためには、ここにあるものすべてをやらないといけないのでしょうか?**
|
||||||
|
|
||||||
|
@ -302,49 +388,49 @@
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/pastebin/README.md)
|
[問題と解答を見る](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Twitterタイムライン&検索 (もしくはFacebookフィード&検索)の設計
|
### Twitterタイムライン&検索 (もしくはFacebookフィード&検索)の設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/twitter/README.md)
|
[問題と解答を見る](solutions/system_design/twitter/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### ウェブクローラーの設計
|
### ウェブクローラーの設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/web_crawler/README.md)
|
[問題と解答を見る](solutions/system_design/web_crawler/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Mint.comの設計
|
### Mint.comの設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/mint/README.md)
|
[問題と解答を見る](solutions/system_design/mint/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### SNSサービスのデータ構造の設計
|
### SNSサービスのデータ構造の設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/social_graph/README.md)
|
[問題と解答を見る](solutions/system_design/social_graph/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 検索エンジンのキー/バリュー構造の設計
|
### 検索エンジンのキー/バリュー構造の設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/query_cache/README.md)
|
[問題と解答を見る](solutions/system_design/query_cache/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Amazonのカテゴリ毎の売り上げランキングの設計
|
### Amazonのカテゴリ毎の売り上げランキングの設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/sales_rank/README.md)
|
[問題と解答を見る](solutions/system_design/sales_rank/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### AWS上で100万人規模のユーザーを捌くサービスの設計
|
### AWS上で100万人規模のユーザーを捌くサービスの設計
|
||||||
|
|
||||||
[問題と解答を見る](solutions/system_design/scaling_aws/README.md)
|
[問題と解答を見る](solutions/system_design/scaling_aws/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## オブジェクト指向設計問題と解答
|
## オブジェクト指向設計問題と解答
|
||||||
|
|
||||||
|
@ -436,7 +522,7 @@
|
||||||
### CAP 理論
|
### CAP 理論
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -531,7 +617,7 @@
|
||||||
## ドメインネームシステム
|
## ドメインネームシステム
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -569,7 +655,7 @@ DNSは少数のオーソライズされたサーバーが上位に位置する
|
||||||
## コンテンツデリバリーネットワーク(Content delivery network)
|
## コンテンツデリバリーネットワーク(Content delivery network)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -610,7 +696,7 @@ CDNを用いてコンテンツを配信することで以下の二つの理由
|
||||||
## ロードバランサー
|
## ロードバランサー
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -680,7 +766,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
|
||||||
## リバースプロキシ(webサーバー)
|
## リバースプロキシ(webサーバー)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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/>
|
||||||
|
@ -723,7 +809,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
|
||||||
## アプリケーション層
|
## アプリケーション層
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -760,7 +846,7 @@ Layer 7 ロードバランサーは [アプリケーションレイヤー](#通
|
||||||
## データベース
|
## データベース
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -783,7 +869,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
||||||
マスターデータベースが読み取りと書き込みを処理し、書き込みを一つ以上のスレーブデータベースに複製します。スレーブデータベースは読み取りのみを処理します。スレーブデータベースは木構造のように追加のスレーブにデータを複製することもできます。マスターデータベースがオフラインになった場合には、いずれかのスレーブがマスターに昇格するか、新しいマスターデータベースが追加されるまでは読み取り専用モードで稼働します。
|
マスターデータベースが読み取りと書き込みを処理し、書き込みを一つ以上のスレーブデータベースに複製します。スレーブデータベースは読み取りのみを処理します。スレーブデータベースは木構造のように追加のスレーブにデータを複製することもできます。マスターデータベースがオフラインになった場合には、いずれかのスレーブがマスターに昇格するか、新しいマスターデータベースが追加されるまでは読み取り専用モードで稼働します。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -798,7 +884,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
||||||
いずれのマスターも読み取り書き込みの両方に対応する。書き込みに関してはそれぞれ協調する。いずれかのマスターが落ちても、システム全体としては読み書き両方に対応したまま運用できる。
|
いずれのマスターも読み取り書き込みの両方に対応する。書き込みに関してはそれぞれ協調する。いずれかのマスターが落ちても、システム全体としては読み書き両方に対応したまま運用できる。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -826,7 +912,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
||||||
#### Federation
|
#### Federation
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -847,7 +933,7 @@ SQLなどのリレーショナルデータベースはテーブルに整理さ
|
||||||
#### シャーディング
|
#### シャーディング
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -991,7 +1077,7 @@ NoSQL は **key-value store**、 **document-store**、 **wide column store**、
|
||||||
#### ワイドカラムストア
|
#### ワイドカラムストア
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1014,7 +1100,7 @@ Googleは[Bigtable](http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/cha
|
||||||
#### グラフデータベース
|
#### グラフデータベース
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1042,7 +1128,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="images/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>
|
||||||
|
@ -1084,7 +1170,7 @@ NoSQLに適するサンプルデータ:
|
||||||
## キャッシュ
|
## キャッシュ
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1155,7 +1241,7 @@ Redisはさらに以下のような機能を備えています:
|
||||||
#### キャッシュアサイド
|
#### キャッシュアサイド
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1191,7 +1277,7 @@ def get_user(self, user_id):
|
||||||
#### ライトスルー
|
#### ライトスルー
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1226,7 +1312,7 @@ def set_user(user_id, values):
|
||||||
#### ライトビハインド (ライトバック)
|
#### ライトビハインド (ライトバック)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1244,7 +1330,7 @@ def set_user(user_id, values):
|
||||||
#### リフレッシュアヘッド
|
#### リフレッシュアヘッド
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1276,7 +1362,7 @@ def set_user(user_id, values):
|
||||||
## 非同期処理
|
## 非同期処理
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1322,7 +1408,7 @@ def set_user(user_id, values):
|
||||||
## 通信
|
## 通信
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1354,7 +1440,7 @@ HTTPは**TCP** や **UDP** などの低級プロトコルに依存している
|
||||||
### 伝送制御プロトコル (TCP)
|
### 伝送制御プロトコル (TCP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1378,7 +1464,7 @@ TCPは高い依存性を要し、時間制約が厳しくないものに適し
|
||||||
### ユーザデータグラムプロトコル (UDP)
|
### ユーザデータグラムプロトコル (UDP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1407,7 +1493,7 @@ TCPよりもUDPを使うのは:
|
||||||
### 遠隔手続呼出 (RPC)
|
### 遠隔手続呼出 (RPC)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
@ -1633,7 +1719,7 @@ Notes
|
||||||
> 世の中のシステムがどのように設計されているかについての記事
|
> 世の中のシステムがどのように設計されているかについての記事
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# Sistem Tasarım Rehberi
|
# Sistem Tasarım Rehberi
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jj3A5N8.png">
|
<img src="../../images/jj3A5N8.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ Mülakata hazırlık için diğer konular:
|
||||||
## Anki bilgi kartları
|
## Anki bilgi kartları
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/zdCAkB3.png">
|
<img src="../../images/zdCAkB3.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ Her zaman ve her yerde kullanılabilir.
|
||||||
[**Kodlama Mülakatları**](https://github.com/donnemartin/interactive-coding-challenges)na hazırlanmak için kaynak mı arıyorsunuz?
|
[**Kodlama Mülakatları**](https://github.com/donnemartin/interactive-coding-challenges)na hazırlanmak için kaynak mı arıyorsunuz?
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/b4YtAEN.png">
|
<img src="../../images/b4YtAEN.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -93,97 +93,188 @@ Lütfen [katkı kurallarını](CONTRIBUTING.md) inceleyin.
|
||||||
> Her bölüm, ek kaynaklara bağlantılar içerir.
|
> Her bölüm, ek kaynaklara bağlantılar içerir.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jrUBAF7.png">
|
<img src="../../images/jrUBAF7.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* [Sistem tasarımı konuları: buradan başlayın](#sistem-tasarımı-konuları-buradan-başlayın)
|
- [Sistem Tasarım Rehberi](#sistem-tasarım-rehberi)
|
||||||
* [1. Adım: Ölçeklenebilirlik video dersini inceleyin](#1-adım-ölçeklenebilirlik-video-dersini-inceleyin)
|
- [Amaç](#amaç)
|
||||||
* [2. Adım: Ölçeklenebilirlik makalesini inceleyin](#2-adım-ölçeklenebilirlik-makalesini-inceleyin)
|
- [Büyük sistemlerin nasıl tasarlacağını öğrenin](#büyük-sistemlerin-nasıl-tasarlacağını-öğrenin)
|
||||||
* [Sonraki adımlar](#sonraki-adımlar)
|
- [Açık kaynak topluluğundan bilgi edinin](#açık-kaynak-topluluğundan-bilgi-edinin)
|
||||||
* [Performans veya ölçeklenebilirlik](#performans-veya-ölçeklenebilirlik)
|
- [Sistem tasarımı görüşmelerine hazırlanın](#sistem-tasarımı-görüşmelerine-hazırlanın)
|
||||||
* [Gecikme veya verim](#gecikme-veya-verim)
|
- [Anki bilgi kartları](#anki-bilgi-kartları)
|
||||||
* [Kullanılabilirlik veya tutarlılık](#kullanılabilirlik-veya-tutarlılık)
|
- [Kod Kaynakları: Etkileşimli Kodlama Yarışmaları](#kod-kaynakları-etkileşimli-kodlama-yarışmaları)
|
||||||
* [CAP teoremi](#cap-teoremi)
|
- [Katkı](#katkı)
|
||||||
* [CP - Tutarlılık ve bölüm toleransı](#cp--tutarlılık-ve-bölüm-toleransı)
|
- [Sistem tasarımı konuları dizini](#sistem-tasarımı-konuları-dizini)
|
||||||
* [AP - Kullanılabilirlik ve bölüm toleransı](#ap--kullanılabilirlik-ve-bölüm-toleransı)
|
- [Çalışma rehberi](#çalışma-rehberi)
|
||||||
* [Tutarlılık modelleri](#tutarlılık-modelleri)
|
- [Sistem tasarımı mülakat sorusu nasıl ele alınır?](#sistem-tasarımı-mülakat-sorusu-nasıl-ele-alınır)
|
||||||
* [Zayıf tutarlılık](#zayıf-tutarlılık)
|
- [Adım 1: Kullanım senaryolarını, kısıtlamaları ve varsayımları açıklayın](#adım-1-kullanım-senaryolarını-kısıtlamaları-ve-varsayımları-açıklayın)
|
||||||
* [Nihai tutarlılık](#Nihai-tutarlılık)
|
- [Adım 2: Üst düzey bir tasarım oluşturun](#adım-2-üst-düzey-bir-tasarım-oluşturun)
|
||||||
* [Güçlü tutarlılık](#güçlü-tutarlılık)
|
- [Adım 3: Temel bileşenleri tasarlayın](#adım-3-temel-bileşenleri-tasarlayın)
|
||||||
* [Kullanılabilirlik modları](#kullanılabilirlik-modları)
|
- [Adım 4: Tasarımı genişletin](#adım-4-tasarımı-genişletin)
|
||||||
* [Yük devretme](#yük-devretme)
|
- [Tahmini hesaplama](#tahmini-hesaplama)
|
||||||
* [Çoğaltma](#çoğaltma)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma)
|
||||||
* [Sayılarla erişilebilirlik](#sayılarla-erişilebilirlik)
|
- [Sistem tasarımı mülakat soruları ve çözümleri](#sistem-tasarımı-mülakat-soruları-ve-çözümleri)
|
||||||
* [Alan adı sistemi (DNS)](#alan-adı-sistemi-dns)
|
- [Pastebin.com(veya Bit.ly) tasarlayın](#pastebincomveya-bitly-tasarlayın)
|
||||||
* [İçerik dağıtım ağı (CDN)](#içerik-dağıtım-ağı-cdn)
|
- [Twitter zaman çizelgesi ve arama(veya Facebook haber akışı ve arama) tasarlayın](#twitter-zaman-çizelgesi-ve-aramaveya-facebook-haber-akışı-ve-arama-tasarlayın)
|
||||||
* [Push CDN](#push-cdn)
|
- [Bir web tarayıcısı tasarlayın](#bir-web-tarayıcısı-tasarlayın)
|
||||||
* [Pull CDN](#pull-cdn)
|
- [Mint.com tasarlayın](#mintcom-tasarlayın)
|
||||||
* [Yük dengeleyici (Load balancer)](#yük-dengeleyici-load-balancer)
|
- [Sosyal ağ için veri yapılarını tasarlayın](#sosyal-ağ-için-veri-yapılarını-tasarlayın)
|
||||||
* [Aktif-pasif)](#aktif-pasif)
|
- [Arama motorları için bir anahtar/değer(key-value) deposu tasarlayın](#arama-motorları-için-bir-anahtardeğerkey-value-deposu-tasarlayın)
|
||||||
* [Aktif-aktif)](#aktif-aktif)
|
- [Amazon'un satış sıralamasını kategori özellikleri aracılığıyla tasarlayın](#amazonun-satış-sıralamasını-kategori-özellikleri-aracılığıyla-tasarlayın)
|
||||||
* [Katman 4 yük dengeleyicisi](#katman-4-yük-dengeleyicisi)
|
- [AWS'de milyon kullanıcılı bir sistem tasarlayın](#awsde-milyon-kullanıcılı-bir-sistem-tasarlayın)
|
||||||
* [Katman 7 yük dengeleyicisi](#katman-7-yük-dengeleyicisi)
|
- [Nesne yönelimli tasarım mülakat soruları ve çözümleri](#nesne-yönelimli-tasarım-mülakat-soruları-ve-çözümleri)
|
||||||
* [Yatay ölçekleme](#yatay-ölçekleme)
|
- [Sistem tasarımı konuları: buradan başlayın](#sistem-tasarımı-konuları-buradan-başlayın)
|
||||||
* [Ters proxy (web sunucusu)](#ters-proxy-web-sunucusu)
|
- [1. Adım: Ölçeklenebilirlik video dersini inceleyin](#1-adım-ölçeklenebilirlik-video-dersini-inceleyin)
|
||||||
* [Yük dengeleyici ve ters proxy](#yük-dengeleyici-ve-ters-proxy)
|
- [2. Adım: Ölçeklenebilirlik makalesini inceleyin](#2-adım-ölçeklenebilirlik-makalesini-inceleyin)
|
||||||
* [Uygulama katmanı](#uygulama-katmanı)
|
- [Sonraki adımlar](#sonraki-adımlar)
|
||||||
* [Mikroservisler](#mikroservisler)
|
- [Performans veya ölçeklenebilirlik](#performans-veya-ölçeklenebilirlik)
|
||||||
* [Servis keşfi](#servis-keşfi)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-1)
|
||||||
* [Veritabanı](#veritabanı)
|
- [Gecikme veya verim](#gecikme-veya-verim)
|
||||||
* [İlişkisel veritabanı yönetim sistemi (RDBMS)](#ilişkisel-veritabanı-yönetim-sistemi-rdbms)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-2)
|
||||||
* [Master-slave çoğaltma](#master-slave-çoğaltma)
|
- [Kullanılabilirlik veya tutarlılık](#kullanılabilirlik-veya-tutarlılık)
|
||||||
* [Master-master çoğaltma](#master-master-çoğaltma)
|
- [CAP Teoremi](#cap-teoremi)
|
||||||
* [Federasyon](#federasyon)
|
- [CP ─ Tutarlılık ve Bölüm Toleransı](#cp--tutarlılık-ve-bölüm-toleransı)
|
||||||
* [Parçalama](#parçalama)
|
- [AP ─ Kullanılabilirlik ve Bölüm Toleransı](#ap--kullanılabilirlik-ve-bölüm-toleransı)
|
||||||
* [Denormalizasyon](#denormalizasyon)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-3)
|
||||||
* [SQL ayarlama (SQL tuning)](#sql-ayarlama-sql-tuning)
|
- [Tutarlılık modelleri](#tutarlılık-modelleri)
|
||||||
* [NoSQL](#nosql)
|
- [Zayıf tutarlılık](#zayıf-tutarlılık)
|
||||||
* [Anahtar/değer deposu](#anahtar-değer-deposu)
|
- [Nihai tutarlılık](#nihai-tutarlılık)
|
||||||
* [Belge deposu](#belge-deposu)
|
- [Güçlü tutarlılık](#güçlü-tutarlılık)
|
||||||
* [Geniş sütun deposu](#geniş-sütun-deposu)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-4)
|
||||||
* [Grafik veritabanı](#grafik-veritabanı)
|
- [Kullanılabilirlik modları](#kullanılabilirlik-modları)
|
||||||
* [SQL veya NoSQL](#sql-veya-nosql)
|
- [Yük devretme](#yük-devretme)
|
||||||
* [Önbellek](#önbellek)
|
- [Aktif-pasif](#aktif-pasif)
|
||||||
* [İstemci önbelleği](#istemci-önbelleği)
|
- [Aktif-aktif](#aktif-aktif)
|
||||||
* [CDN önbelleği](#cdn-önbelleği)
|
- [Dezavantaj: Yük Devretme](#dezavantaj-yük-devretme)
|
||||||
* [Web sunucusu önbelleği](#web-sunucusu-önbelleği)
|
- [Çoğaltma](#çoğaltma)
|
||||||
* [Veritabanı önbelleği](#veritabanı-önbelleği)
|
- [Master-slave ve master-master](#master-slave-ve-master-master)
|
||||||
* [Uygulama Önbelleği](#uygulama-önbelleği)
|
- [Sayılarla erişilebilirlik](#sayılarla-erişilebilirlik)
|
||||||
* [Veritabanı sorgu düzeyinde önbellekleme](#veritabanı-sorgu-düzeyinde-önbellekleme)
|
- [99.9% erişilebilirlik - 3 tane 9'a sahip hizmet](#999-erişilebilirlik---3-tane-9a-sahip-hizmet)
|
||||||
* [Nesne düzeyinde önbellekleme](#nesne-düzeyinde-önbellekleme)
|
- [99.99% erişilebilirlik - 4 tane 9'a sahip hizmet](#9999-erişilebilirlik---4-tane-9a-sahip-hizmet)
|
||||||
* [Önbellek ne zaman güncellenmeli](#önbellek-ne-zaman-güncellenmeli)
|
- [Paralel ve sıralı erişilebilirlik](#paralel-ve-sıralı-erişilebilirlik)
|
||||||
* [Cache-aside](#cache-aside)
|
- [Sıralı](#sıralı)
|
||||||
* [Üzerine yazma (write-through)](#üzerine-yazma-write-through)
|
- [Paralel](#paralel)
|
||||||
* [Geri yazma (write-behind)](#geri-yazma-write-behind)
|
- [Alan Adı Sistemi (DNS)](#alan-adı-sistemi-dns)
|
||||||
* [Önbelleği önceden yenileme (refresh-ahead)](#önbelleği-önceden-yenileme-refresh-ahead)
|
- [Dezavantaj(lar): Alan adı sistemi(DNS)](#dezavantajlar-alan-adı-sistemidns)
|
||||||
* [Asenkronizm](#asenkronizm)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-5)
|
||||||
* [Mesaj kuyrukları](#mesaj-kuyrukları)
|
- [İçerik Dağıtım Ağı (CDN)](#i̇çerik-dağıtım-ağı-cdn)
|
||||||
* [Görev kuyrukları](#görev-kuyrukları)
|
- [Push CDN](#push-cdn)
|
||||||
* [Back pressure](#back-pressure)
|
- [Pull CDN](#pull-cdn)
|
||||||
* [İletişim](#iletişim)
|
- [Dezavantaj(lar): CDN](#dezavantajlar-cdn)
|
||||||
* [İletim kontrol protokolü (TCP)](#iletim-kontrol-protokolü-tcp)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-6)
|
||||||
* [Kullanıcı datagram protokolü (UDP)](#kullanıcı-datagram-protokolü-udp)
|
- [Yük dengeleyici (Load balancer)](#yük-dengeleyici-load-balancer)
|
||||||
* [Uzaktan yordam çağrısı (RPC)](#uzaktan-yordam-çağrısı-rpc)
|
- [Katman 4 yük dengeleyicisi](#katman-4-yük-dengeleyicisi)
|
||||||
* [Temsili durum transferi (REST)](#temsili-durum-transferi-rest)
|
- [Katman 7 yük dengeleyicisi](#katman-7-yük-dengeleyicisi)
|
||||||
* [Güvenlik](#güvenlik)
|
- [Yatay ölçekleme](#yatay-ölçekleme)
|
||||||
*[EK](#ek)
|
- [Dezavantaj(lar): yatay ölçekleme](#dezavantajlar-yatay-ölçekleme)
|
||||||
* [İkinin kuvveti tablosu](#ikinin-kuvveti-tablosu)
|
- [Dezavantaj(lar): Yük Dengeleyici](#dezavantajlar-yük-dengeleyici)
|
||||||
* [Her programcının bilmesi gereken gecikme sayıları](#her-programcının-bilmesi-gereken-gecikme-sayıları)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-7)
|
||||||
* [Diğer sistem tasarımı mülakat soruları](#diğer-sistem-tasarımı-mülakat-soruları)
|
- [Ters proxy (web sunucusu)](#ters-proxy-web-sunucusu)
|
||||||
* [Gerçek dünya mimarileri](#gerçek-dünya-mimarileri)
|
- [Yük dengeleyici ve ters proxy](#yük-dengeleyici-ve-ters-proxy)
|
||||||
* [Şirketlerin sistem mimarileri](#şirketlerin-sistem-mimarileri)
|
- [Dezavantaj(lar): Ters proxy](#dezavantajlar-ters-proxy)
|
||||||
*[Şirketlerin mühendislik blogları](#şirketlerin-mühendislik-blogları)
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-8)
|
||||||
*[Geliştirme aşamasında](#geliştirme-aşamasında)
|
- [Uygulama katmanı](#uygulama-katmanı)
|
||||||
* [Katkıda bulunanlar](#katkıda-bulunanlar)
|
- [Mikroservisler](#mikroservisler)
|
||||||
* [İletişim](#iletişim)
|
- [Servis keşfi](#servis-keşfi)
|
||||||
* [Lisans](#lisans)
|
- [Dezavantaj(lar): Uygulama katmanı](#dezavantajlar-uygulama-katmanı)
|
||||||
|
- [Kaynaklar ve ek okuma](#kaynaklar-ve-ek-okuma-9)
|
||||||
|
- [Veritabanı](#veritabanı)
|
||||||
|
- [İlişkisel veritabanı yönetim sistemi (RDBMS)](#i̇lişkisel-veritabanı-yönetim-sistemi-rdbms)
|
||||||
|
- [Master-slave çoğaltma](#master-slave-çoğaltma)
|
||||||
|
- [Dezavantaj(lar): master-slave çoğaltma](#dezavantajlar-master-slave-çoğaltma)
|
||||||
|
- [Master-master çoğaltma](#master-master-çoğaltma)
|
||||||
|
- [Dezavantaj(lar): master-master](#dezavantajlar-master-master)
|
||||||
|
- [Dezavantaj(lar): çoğaltma](#dezavantajlar-çoğaltma)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-10)
|
||||||
|
- [Federasyon](#federasyon)
|
||||||
|
- [Dezavantaj(lar): federasyon](#dezavantajlar-federasyon)
|
||||||
|
- [Kaynak(lar) ve ek okuma: federasyon](#kaynaklar-ve-ek-okuma-federasyon)
|
||||||
|
- [Parçalama](#parçalama)
|
||||||
|
- [Dezavantaj(lar): parçalama](#dezavantajlar-parçalama)
|
||||||
|
- [Kaynak(lar) ve ek okuma: parçalama](#kaynaklar-ve-ek-okuma-parçalama)
|
||||||
|
- [Denormalizasyon](#denormalizasyon)
|
||||||
|
- [Dezavantaj(lar): Denormalizasyon](#dezavantajlar-denormalizasyon)
|
||||||
|
- [Kaynak(lar) ve ek okuma: Denormalizasyon](#kaynaklar-ve-ek-okuma-denormalizasyon)
|
||||||
|
- [SQL ayarlama (SQL tuning)](#sql-ayarlama-sql-tuning)
|
||||||
|
- [Şemayı sınırlandırın](#şemayı-sınırlandırın)
|
||||||
|
- [Doğru dizini kullanın](#doğru-dizini-kullanın)
|
||||||
|
- [Pahalı birleştirme işlemlerinden kaçının](#pahalı-birleştirme-işlemlerinden-kaçının)
|
||||||
|
- [Veri tablosunu bölün](#veri-tablosunu-bölün)
|
||||||
|
- [Sorgu önbelleğini ayarlayın](#sorgu-önbelleğini-ayarlayın)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-11)
|
||||||
|
- [NoSQL](#nosql)
|
||||||
|
- [Anahtar-değer deposu](#anahtar-değer-deposu)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-12)
|
||||||
|
- [Belge deposu](#belge-deposu)
|
||||||
|
- [Kaynak(lar) ve ek okuma: belge deposu](#kaynaklar-ve-ek-okuma-belge-deposu)
|
||||||
|
- [Geniş sütun deposu](#geniş-sütun-deposu)
|
||||||
|
- [Kaynak(lar) ve ek okuma: geniş sütun depolama](#kaynaklar-ve-ek-okuma-geniş-sütun-depolama)
|
||||||
|
- [Grafik veritabanı](#grafik-veritabanı)
|
||||||
|
- [Kaynak(lar) ve ek okuma: grafik](#kaynaklar-ve-ek-okuma-grafik)
|
||||||
|
- [Kaynak(lar) ve ek okuma: NoSQL](#kaynaklar-ve-ek-okuma-nosql)
|
||||||
|
- [SQL veya NoSQL](#sql-veya-nosql)
|
||||||
|
- [Kaynak(lar) ve ek okuma: SQL veya NoSQL](#kaynaklar-ve-ek-okuma-sql-veya-nosql)
|
||||||
|
- [Önbellek](#önbellek)
|
||||||
|
- [İstemci önbelleği](#i̇stemci-önbelleği)
|
||||||
|
- [CDN önbelleği](#cdn-önbelleği)
|
||||||
|
- [Web sunucusu önbelleği](#web-sunucusu-önbelleği)
|
||||||
|
- [Veritabanı önbelleği](#veritabanı-önbelleği)
|
||||||
|
- [Uygulama önbelleği](#uygulama-önbelleği)
|
||||||
|
- [Veritabanı sorgu düzeyinde önbellekleme](#veritabanı-sorgu-düzeyinde-önbellekleme)
|
||||||
|
- [Nesne düzeyinde önbellekleme](#nesne-düzeyinde-önbellekleme)
|
||||||
|
- [Önbellek ne zaman güncellenmeli](#önbellek-ne-zaman-güncellenmeli)
|
||||||
|
- [Cache-aside](#cache-aside)
|
||||||
|
- [Dezavantaj(lar): cache-aside](#dezavantajlar-cache-aside)
|
||||||
|
- [Üzerine yazma (write-through)](#üzerine-yazma-write-through)
|
||||||
|
- [Dezavantaj(lar): üzerine yazma (write-through)](#dezavantajlar-üzerine-yazma-write-through)
|
||||||
|
- [Geri yazma (write-behind)](#geri-yazma-write-behind)
|
||||||
|
- [Dezavantaj(lar): geri yazma (write-behind)](#dezavantajlar-geri-yazma-write-behind)
|
||||||
|
- [Önbelleği önceden yenileme (refresh-ahead)](#önbelleği-önceden-yenileme-refresh-ahead)
|
||||||
|
- [Dezavantaj(lar): önbelleği önceden yenileme (refresh-ahead)](#dezavantajlar-önbelleği-önceden-yenileme-refresh-ahead)
|
||||||
|
- [Dezavantaj(lar): önbellek](#dezavantajlar-önbellek)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-13)
|
||||||
|
- [Asenkronizm](#asenkronizm)
|
||||||
|
- [Mesaj kuyrukları](#mesaj-kuyrukları)
|
||||||
|
- [Görev kuyrukları](#görev-kuyrukları)
|
||||||
|
- [Back pressure](#back-pressure)
|
||||||
|
- [Dezavantaj(lar): asenkronizm](#dezavantajlar-asenkronizm)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-14)
|
||||||
|
- [İletişim](#i̇letişim)
|
||||||
|
- [Köprü metni aktarım protokolü (HTTP)](#köprü-metni-aktarım-protokolü-http)
|
||||||
|
- [Kaynak(lar) ve ek okuma: HTTP](#kaynaklar-ve-ek-okuma-http)
|
||||||
|
- [İletim kontrol protokolü (TCP)](#i̇letim-kontrol-protokolü-tcp)
|
||||||
|
- [Kullanıcı datagram protokolü (UDP)](#kullanıcı-datagram-protokolü-udp)
|
||||||
|
- [Kaynak(lar) ve ek okuma: TCP ve UDP](#kaynaklar-ve-ek-okuma-tcp-ve-udp)
|
||||||
|
- [Uzaktan yordam çağrısı (RPC)](#uzaktan-yordam-çağrısı-rpc)
|
||||||
|
- [Dezavantajları: RPC](#dezavantajları-rpc)
|
||||||
|
- [Temsili Durum Transferi (REST)](#temsili-durum-transferi-rest)
|
||||||
|
- [Dezavantaj(lar): REST](#dezavantajlar-rest)
|
||||||
|
- [RPC ve REST karşılaştırması](#rpc-ve-rest-karşılaştırması)
|
||||||
|
- [Kaynak(lar) ve ek okuma: REST ve RPC](#kaynaklar-ve-ek-okuma-rest-ve-rpc)
|
||||||
|
- [Güvenlik](#güvenlik)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-15)
|
||||||
|
- [Ek](#ek)
|
||||||
|
- [İkinin kuvveti tablosu](#i̇kinin-kuvveti-tablosu)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-16)
|
||||||
|
- [Her programcının bilmesi gereken gecikme sayıları](#her-programcının-bilmesi-gereken-gecikme-sayıları)
|
||||||
|
- [Gecikme numarası görselleştirmesi](#gecikme-numarası-görselleştirmesi)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-17)
|
||||||
|
- [Diğer sistem tasarımı mülakat soruları](#diğer-sistem-tasarımı-mülakat-soruları)
|
||||||
|
- [Gerçek dünya mimarileri](#gerçek-dünya-mimarileri)
|
||||||
|
- [Şirketlerin sistem mimarileri](#şirketlerin-sistem-mimarileri)
|
||||||
|
- [Şirketlerin mühendislik blogları](#şirketlerin-mühendislik-blogları)
|
||||||
|
- [Kaynak(lar) ve ek okuma](#kaynaklar-ve-ek-okuma-18)
|
||||||
|
- [Geliştirme aşamasında](#geliştirme-aşamasında)
|
||||||
|
- [Katkıda bulunanlar](#katkıda-bulunanlar)
|
||||||
|
- [İletişim](#i̇letişim-1)
|
||||||
|
- [Lisans](#lisans)
|
||||||
|
|
||||||
## Çalışma rehberi
|
## Çalışma rehberi
|
||||||
|
|
||||||
> Mülakat zaman çizelgenize (kısa, orta, uzun) göre önerilen konuları gözden geçirin.
|
> Mülakat zaman çizelgenize (kısa, orta, uzun) göre önerilen konuları gözden geçirin.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**S: Mülakatlar için buradaki her şeyi bilmem gerekiyor mu? **
|
**S: Mülakatlar için buradaki her şeyi bilmem gerekiyor mu? **
|
||||||
|
|
||||||
|
@ -305,49 +396,49 @@ Daha iyi bir fikir edinmek için aşağıdaki bağlantılara göz atın:
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/pastebin/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Twitter zaman çizelgesi ve arama(veya Facebook haber akışı ve arama) tasarlayın
|
### Twitter zaman çizelgesi ve arama(veya Facebook haber akışı ve arama) tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/twitter/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/twitter/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Bir web tarayıcısı tasarlayın
|
### Bir web tarayıcısı tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/web_crawler/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/web_crawler/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Mint.com tasarlayın
|
### Mint.com tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/mint/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/mint/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Sosyal ağ için veri yapılarını tasarlayın
|
### Sosyal ağ için veri yapılarını tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/social_graph/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/social_graph/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Arama motorları için bir anahtar/değer(key-value) deposu tasarlayın
|
### Arama motorları için bir anahtar/değer(key-value) deposu tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/query_cache/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/query_cache/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Amazon'un satış sıralamasını kategori özellikleri aracılığıyla tasarlayın
|
### Amazon'un satış sıralamasını kategori özellikleri aracılığıyla tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/sales_rank/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/sales_rank/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### AWS'de milyon kullanıcılı bir sistem tasarlayın
|
### AWS'de milyon kullanıcılı bir sistem tasarlayın
|
||||||
|
|
||||||
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/scaling_aws/README.md)
|
[Alıştırma ve çözümü görüntüleyin](solutions/system_design/scaling_aws/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Nesne yönelimli tasarım mülakat soruları ve çözümleri
|
## Nesne yönelimli tasarım mülakat soruları ve çözümleri
|
||||||
|
|
||||||
|
@ -439,7 +530,7 @@ Genel olarak, kabul edilebilir gecikme süresiyle verimi en üst düzeye çıkar
|
||||||
### CAP Teoremi
|
### CAP Teoremi
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/bgLMI2u.png">
|
<img src="../../images/bgLMI2u.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>Kaynak: CAP theorem revisited</a></i>
|
<i><a href=http://robertgreiner.com/2014/08/cap-theorem-revisited>Kaynak: CAP theorem revisited</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -580,7 +671,7 @@ Eğer "Bileşen 1" ve "Bileşen 2" %99.9 erişilebilirliğe sahiplerse toplam er
|
||||||
## Alan Adı Sistemi (DNS)
|
## Alan Adı Sistemi (DNS)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/IOyLj4i.jpg">
|
<img src="../../images/IOyLj4i.jpg">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>Kaynak: DNS security presentation</a></i>
|
<i><a href=http://www.slideshare.net/srikrupa5/dns-security-presentation-issa>Kaynak: DNS security presentation</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -618,7 +709,7 @@ DNS hiyerarşik bir yapıya sahiptir ve en üst düzeyde birkaç yetkili sunucu
|
||||||
## İçerik Dağıtım Ağı (CDN)
|
## İçerik Dağıtım Ağı (CDN)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/h9TAuGI.jpg">
|
<img src="../../images/h9TAuGI.jpg">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>Kaynak: Why use a CDN</a></i>
|
<i><a href=https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/>Kaynak: Why use a CDN</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -659,7 +750,7 @@ Yüksek trafikli siteler, trafiği daha düzenli bir şekilde dağıttığı iç
|
||||||
## Yük dengeleyici (Load balancer)
|
## Yük dengeleyici (Load balancer)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/h81n9iK.png">
|
<img src="../../images/h81n9iK.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Kaynak: Scalable system design patterns</a></i>
|
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Kaynak: Scalable system design patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -729,7 +820,7 @@ Yük dengeleyicileri, yatay ölçeklendirmeye de yardımcı olabilir, performans
|
||||||
## Ters proxy (web sunucusu)
|
## Ters proxy (web sunucusu)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/n41Azff.png">
|
<img src="../../images/n41Azff.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>Kaynak: Wikipedia</a></i>
|
<i><a href=https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg>Kaynak: Wikipedia</a></i>
|
||||||
<br/>
|
<br/>
|
||||||
|
@ -772,7 +863,7 @@ Faydaları şunları içerir:
|
||||||
## Uygulama katmanı
|
## Uygulama katmanı
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/yB5SYwm.png">
|
<img src="../../images/yB5SYwm.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Kaynak: Intro to architecting systems for scale</a></i>
|
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Kaynak: Intro to architecting systems for scale</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -809,7 +900,7 @@ Bu tartışma ile ilgili olan [mikroservisler](https://en.wikipedia.org/wiki/Mic
|
||||||
## Veritabanı
|
## Veritabanı
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/Xkm5CXz.png">
|
<img src="../../images/Xkm5CXz.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>Kaynak: Scaling up to your first 10 million users</a></i>
|
<i><a href=https://www.youtube.com/watch?v=kKjm4ehYiMs>Kaynak: Scaling up to your first 10 million users</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -832,7 +923,7 @@ SQL gibi ilişkisel bir veritabanı, tablolar halinde düzenlenmiş veri öğele
|
||||||
Master sunucu, okuma ve yazma hizmeti sunar, yazma işlemlerini bir veya daha fazla slave sunucalara replike eder ve slave sunucular yalnızca okuma işlemleri sunar. Slave sunucular aynı zamanda daha fazla slave sunucuya ağaç benzeri bir şekilde replike edebilir. Master sunucu çevrimdışıysa; bir slave sunucu, ana bilgisayar olarak atanana veya yeni bir master sunucu tahsis edilene kadar; sistem okuma modunda çalışmaya devam edebilir.
|
Master sunucu, okuma ve yazma hizmeti sunar, yazma işlemlerini bir veya daha fazla slave sunucalara replike eder ve slave sunucular yalnızca okuma işlemleri sunar. Slave sunucular aynı zamanda daha fazla slave sunucuya ağaç benzeri bir şekilde replike edebilir. Master sunucu çevrimdışıysa; bir slave sunucu, ana bilgisayar olarak atanana veya yeni bir master sunucu tahsis edilene kadar; sistem okuma modunda çalışmaya devam edebilir.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/C9ioGtn.png">
|
<img src="../../images/C9ioGtn.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -847,7 +938,7 @@ Master sunucu, okuma ve yazma hizmeti sunar, yazma işlemlerini bir veya daha fa
|
||||||
Her iki ana sunucu da okuma ve yazma işlemlerinden sorumludur ve yazma işlemleri sırasında birbirleriyle koordineli çalışırlar. Ana sunuculardan biri kapanırsa sistem okumaya ve yazmaya devam edebilir.
|
Her iki ana sunucu da okuma ve yazma işlemlerinden sorumludur ve yazma işlemleri sırasında birbirleriyle koordineli çalışırlar. Ana sunuculardan biri kapanırsa sistem okumaya ve yazmaya devam edebilir.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/krAHLGg.png">
|
<img src="../../images/krAHLGg.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -875,7 +966,7 @@ Her iki ana sunucu da okuma ve yazma işlemlerinden sorumludur ve yazma işlemle
|
||||||
#### Federasyon
|
#### Federasyon
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/U3qV33e.png">
|
<img src="../../images/U3qV33e.png">
|
||||||
<br/>
|
<br/>
|
||||||
<strong><a href="https://www.youtube.com/watch?v=w95murBkYmU">Kaynak: Kullanıcılarınızı İlk On Milyona Kadar Ölçeklendirme</a></strong>
|
<strong><a href="https://www.youtube.com/watch?v=w95murBkYmU">Kaynak: Kullanıcılarınızı İlk On Milyona Kadar Ölçeklendirme</a></strong>
|
||||||
</p>
|
</p>
|
||||||
|
@ -896,7 +987,7 @@ Federasyon (veya fonksiyonel bölümleme), veritabanını ilgili işlevlere gör
|
||||||
#### Parçalama
|
#### Parçalama
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/wU8x5Id.png">
|
<img src="../../images/wU8x5Id.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1040,7 +1131,7 @@ Belge depoları yüksek esneklik sağlar ve genellikle zaman zaman değişen ver
|
||||||
#### Geniş sütun deposu
|
#### Geniş sütun deposu
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/n16iOGk.png">
|
<img src="../../images/n16iOGk.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>Kaynak: SQL & NoSQL, a brief history</a></i>
|
<i><a href=http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html>Kaynak: SQL & NoSQL, a brief history</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1063,7 +1154,7 @@ Geniş sütun depolamaları yüksek kullanılabilirlik ve ölçeklenebilirlik su
|
||||||
#### Grafik veritabanı
|
#### Grafik veritabanı
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/fNcl65g.png">
|
<img src="../../images/fNcl65g.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>Kaynak: Graph database</a></i>
|
<i><a href=https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png>Kaynak: Graph database</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1091,7 +1182,7 @@ Grafik veritabanları, sosyal ağ gibi karmaşık ilişkilere sahip veri modelle
|
||||||
### SQL veya NoSQL
|
### SQL veya NoSQL
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/wXGqG5f.png">
|
<img src="../../images/wXGqG5f.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Kaynak: Transitioning from RDBMS to NoSQL</a></i>
|
<i><a href=https://www.infoq.com/articles/Transition-RDBMS-NoSQL/>Kaynak: Transitioning from RDBMS to NoSQL</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1133,7 +1224,7 @@ NoSQL'e uygun örnek veriler:
|
||||||
## Önbellek
|
## Önbellek
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/Q6z24La.png">
|
<img src="../../images/Q6z24La.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Kaynak: Scalable system design patterns</a></i>
|
<i><a href=http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html>Kaynak: Scalable system design patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1204,7 +1295,7 @@ Verinizi, uygulama kodunuzdaki objeler gibi düşünün. Uygulamanın veritaban
|
||||||
#### Cache-aside
|
#### Cache-aside
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>Kaynak: 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>Kaynak: From cache to in-memory data grid</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1240,7 +1331,7 @@ def get_user(self, user_id):
|
||||||
#### Üzerine yazma (write-through)
|
#### Üzerine yazma (write-through)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/0vBc0hN.png">
|
<img src="../../images/0vBc0hN.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1275,7 +1366,7 @@ Depolama ve yazma işlemleri nedeniyle, üzerine yazma yöntemi genel olarak ço
|
||||||
#### Geri yazma (write-behind)
|
#### Geri yazma (write-behind)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/rgSrvjG.png">
|
<img src="../../images/rgSrvjG.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
<i><a href=http://www.slideshare.net/jboner/scalability-availability-stability-patterns/>Kaynak: Scalability, availability, stability, patterns</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1293,7 +1384,7 @@ Geri yazma yönteminde, uygulama aşağıdaki adımları gerçekleştirir:
|
||||||
#### Önbelleği önceden yenileme (refresh-ahead)
|
#### Önbelleği önceden yenileme (refresh-ahead)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>Kaynak: 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>Kaynak: From cache to in-memory data grid</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1325,7 +1416,7 @@ Refresh-ahead, önbelleğin gelecekte hangi öğelere ihtiyaç duyulma olasılı
|
||||||
## Asenkronizm
|
## Asenkronizm
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/54GYsSx.png">
|
<img src="../../images/54GYsSx.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Kaynak: Intro to architecting systems for scale</a></i>
|
<i><a href=http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer>Kaynak: Intro to architecting systems for scale</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1371,7 +1462,7 @@ Eğer kuyruk önemli ölçüde büyümeye başlarsa, sıra boyutu bellek boyutun
|
||||||
## İletişim
|
## İletişim
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/5KeocQs.jpg">
|
<img src="../../images/5KeocQs.jpg">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=http://www.escotal.com/osilayer.html>Kaynak: OSI 7 layer model</a></i>
|
<i><a href=http://www.escotal.com/osilayer.html>Kaynak: OSI 7 layer model</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1403,7 +1494,7 @@ HTTP, **TCP** ve **UDP** gibi alt düzey protokollere dayanan bir uygulama katma
|
||||||
### İletim kontrol protokolü (TCP)
|
### İletim kontrol protokolü (TCP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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/>Kaynak: 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/>Kaynak: How to make a multiplayer game</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1427,7 +1518,7 @@ Aşağıdaki durumlarda UDP yerine TCP tercih ediniz:
|
||||||
### Kullanıcı datagram protokolü (UDP)
|
### Kullanıcı datagram protokolü (UDP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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/>Kaynak: 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/>Kaynak: How to make a multiplayer game</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1456,7 +1547,7 @@ Aşağıdaki durumlarda TCP yerine UDP kullanın:
|
||||||
### Uzaktan yordam çağrısı (RPC)
|
### Uzaktan yordam çağrısı (RPC)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>Kaynak: Crack the system design interview</a></i>
|
<i><a href=http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview>Kaynak: Crack the system design interview</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1680,7 +1771,7 @@ Yukarıdaki sayılar temelinde kullanışlı ölçümler:
|
||||||
> Sistemlerin gerçekte nasıl tasarlandığına dair makaleler.
|
> Sistemlerin gerçekte nasıl tasarlandığına dair makaleler.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/TcUo2fw.png">
|
<img src="../../images/TcUo2fw.png">
|
||||||
<br/>
|
<br/>
|
||||||
<i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Kaynak: Twitter timelines at scale</a></i>
|
<i><a href=https://www.infoq.com/presentations/Twitter-Timeline-Scalability>Kaynak: Twitter timelines at scale</a></i>
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# 系統設計入門
|
# 系統設計入門
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jj3A5N8.png">
|
<img src="../../images/jj3A5N8.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
## 學習單字卡
|
## 學習單字卡
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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="images/b4YtAEN.png">
|
<img src="../../images/b4YtAEN.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -91,96 +91,182 @@
|
||||||
> 每一章節都包含更深入資源的連結。
|
> 每一章節都包含更深入資源的連結。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jrUBAF7.png">
|
<img src="../../images/jrUBAF7.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* [系統設計主題:從這裡開始](#系統設計主題從這裡開始)
|
- [系統設計入門](#系統設計入門)
|
||||||
* [第一步:複習關於可擴展性的影片講座](#第一步複習關於可擴展性的影片講座)
|
- [動機](#動機)
|
||||||
* [第二步:複習關於可擴展性的文章](#第二步複習關於可擴展性的文章)
|
- [學習如何設計大型系統](#學習如何設計大型系統)
|
||||||
* [下一步](#下一步)
|
- [從開放原始碼社群中學習](#從開放原始碼社群中學習)
|
||||||
* [效能與可擴展性](#效能與可擴展性)
|
- [準備系統設計的面試](#準備系統設計的面試)
|
||||||
* [延遲與吞吐量](#延遲與吞吐量)
|
- [學習單字卡](#學習單字卡)
|
||||||
* [可用性與一致性](#可用性與一致性)
|
- [程式設計學習資源:互動式程式學習設計](#程式設計學習資源互動式程式學習設計)
|
||||||
* [CAP 理論](#cap-理論)
|
- [如何貢獻](#如何貢獻)
|
||||||
* [CP-一致性與部分容錯性](#cp-一致性與部分容錯性)
|
- [系統設計主題的索引](#系統設計主題的索引)
|
||||||
* [AP-可用性與部分容錯性](#ap-可用性與部分容錯性)
|
- [學習指南](#學習指南)
|
||||||
* [一致性模式](#一致性模式)
|
- [如何解決一個系統設計的面試題目](#如何解決一個系統設計的面試題目)
|
||||||
* [弱一致性](#弱一致性)
|
- [第一步:描述使用的場景、限制及假設](#第一步描述使用的場景限制及假設)
|
||||||
* [最終一致性](#最終一致性)
|
- [第二步:建立一個高階的設計](#第二步建立一個高階的設計)
|
||||||
* [強一致性](#強一致性)
|
- [第三步: 設計核心的元件](#第三步-設計核心的元件)
|
||||||
* [可用性模式](#可用性模式)
|
- [第四步:評估你的設計](#第四步評估你的設計)
|
||||||
* [容錯轉移](#容錯轉移)
|
- [快速有效的進行估算](#快速有效的進行估算)
|
||||||
* [複寫機制](#複寫機制)
|
- [相關資源與延伸閱讀](#相關資源與延伸閱讀)
|
||||||
* [域名系統](#域名系統)
|
- [系統設計面試問題與解答](#系統設計面試問題與解答)
|
||||||
* [內容傳遞網路(CDN)](#內容傳遞網路cdn)
|
- [設計 Pastebin.com (或 Bit.ly)](#設計-pastebincom-或-bitly)
|
||||||
* [推送式 CDNs](#推送式-cdns)
|
- [設計一個像是 Twitter 的 timeline (或 Facebook feed)設計一個 Twitter 搜尋功能 (or Facebook 搜尋功能)](#設計一個像是-twitter-的-timeline-或-facebook-feed設計一個-twitter-搜尋功能-or-facebook-搜尋功能)
|
||||||
* [拉取式 CDNs](#拉取式-cdns)
|
- [設計一個爬蟲系統](#設計一個爬蟲系統)
|
||||||
* [負載平衡器](#負載平衡器)
|
- [設計 Mint.com 網站](#設計-mintcom-網站)
|
||||||
* [主動到備用切換模式(AP Mode)](#主動到備用切換模式ap-mode)
|
- [設計一個社交網站的資料結構](#設計一個社交網站的資料結構)
|
||||||
* [雙主動切換模式(AA Mode)](#雙主動切換模式aa-mode)
|
- [設計一個搜尋引擎使用的鍵值儲存資料結構](#設計一個搜尋引擎使用的鍵值儲存資料結構)
|
||||||
* [第四層負載平衡](#第四層負載平衡)
|
- [設計一個根據產品分類的亞馬遜銷售排名](#設計一個根據產品分類的亞馬遜銷售排名)
|
||||||
* [第七層負載平衡](#第七層負載平衡)
|
- [在 AWS 上設計一個百萬用戶等級的系統](#在-aws-上設計一個百萬用戶等級的系統)
|
||||||
* [水平擴展](#水平擴展)
|
- [物件導向設計面試問題與解答](#物件導向設計面試問題與解答)
|
||||||
* [反向代理(網頁伺服器)](#反向代理網頁伺服器)
|
- [系統設計主題:從這裡開始](#系統設計主題從這裡開始)
|
||||||
* [負載平衡器與反向代理伺服器](#負載平衡器與反向代理伺服器)
|
- [第一步:複習關於可擴展性的影片講座](#第一步複習關於可擴展性的影片講座)
|
||||||
* [應用層](#應用層)
|
- [第二步:複習關於可擴展性的文章](#第二步複習關於可擴展性的文章)
|
||||||
* [微服務](#微服務)
|
- [下一步](#下一步)
|
||||||
* [服務發現](#服務發現)
|
- [效能與可擴展性](#效能與可擴展性)
|
||||||
* [資料庫](#資料庫)
|
- [來源及延伸閱讀](#來源及延伸閱讀)
|
||||||
* [關連式資料庫管理系統(RDBMS)](#關連式資料庫管理系統rdbms)
|
- [延遲與吞吐量](#延遲與吞吐量)
|
||||||
* [主從複寫](#主從複寫)
|
- [來源及延伸閱讀](#來源及延伸閱讀-1)
|
||||||
* [主動模式複寫](#主動模式複寫)
|
- [可用性與一致性](#可用性與一致性)
|
||||||
* [聯邦式資料庫](#聯邦式資料庫)
|
- [CAP 理論](#cap-理論)
|
||||||
* [分片](#分片)
|
- [CP-一致性與部分容錯性](#cp-一致性與部分容錯性)
|
||||||
* [反正規化](#反正規化)
|
- [AP-可用性與部分容錯性](#ap-可用性與部分容錯性)
|
||||||
* [SQL 優化](#sql-優化)
|
- [來源及延伸閱讀](#來源及延伸閱讀-2)
|
||||||
* [NoSQL](#nosql)
|
- [一致性模式](#一致性模式)
|
||||||
* [鍵-值對的資料庫](#鍵-值對的資料庫)
|
- [弱一致性](#弱一致性)
|
||||||
* [文件類型資料庫](#文件類型資料庫)
|
- [最終一致性](#最終一致性)
|
||||||
* [列儲存型資料庫](#列儲存型資料庫)
|
- [強一致性](#強一致性)
|
||||||
* [圖形資料庫](#圖形資料庫)
|
- [來源及延伸閱讀](#來源及延伸閱讀-3)
|
||||||
* [SQL 或 NoSQL](#sql-或-nosql)
|
- [可用性模式](#可用性模式)
|
||||||
* [快取](#快取)
|
- [容錯轉移](#容錯轉移)
|
||||||
* [客戶端快取](#客戶端快取)
|
- [主動到備用切換模式(AP Mode)](#主動到備用切換模式ap-mode)
|
||||||
* [CDN 快取](#cdn-快取)
|
- [雙主動切換模式(AA Mode)](#雙主動切換模式aa-mode)
|
||||||
* [網站伺服器快取](#網站伺服器快取)
|
- [缺點:容錯轉移](#缺點容錯轉移)
|
||||||
* [資料庫快取](#資料庫快取)
|
- [複寫機制](#複寫機制)
|
||||||
* [應用程式快取](#應用程式快取)
|
- [主動到備用複寫與雙主動複寫](#主動到備用複寫與雙主動複寫)
|
||||||
* [資料庫查詢級別的快取](#資料庫查詢級別的快取)
|
- [域名系統](#域名系統)
|
||||||
* [物件級別的快取](#物件級別的快取)
|
- [DNS 的缺點](#dns-的缺點)
|
||||||
* [什麼時候要更新快取](#什麼時候要更新快取)
|
- [來源及延伸閱讀](#來源及延伸閱讀-4)
|
||||||
* [快取模式](#快取模式)
|
- [內容傳遞網路(CDN)](#內容傳遞網路cdn)
|
||||||
* [寫入模式](#寫入模式)
|
- [推送式 CDNs](#推送式-cdns)
|
||||||
* [事後寫入(回寫)](#事後寫入回寫)
|
- [拉取式 CDNs](#拉取式-cdns)
|
||||||
* [更新式快取](#更新式快取)
|
- [CDN 的缺點](#cdn-的缺點)
|
||||||
* [非同步機制](#非同步機制)
|
- [來源及延伸閱讀](#來源及延伸閱讀-5)
|
||||||
* [訊息佇列](#訊息佇列)
|
- [負載平衡器](#負載平衡器)
|
||||||
* [工作佇列](#工作佇列)
|
- [第四層負載平衡](#第四層負載平衡)
|
||||||
* [背壓機制](#背壓機制)
|
- [第七層負載平衡](#第七層負載平衡)
|
||||||
* [通訊](#通訊)
|
- [水平擴展](#水平擴展)
|
||||||
* [傳輸控制通訊協定(TCP)](#傳輸控制通訊協定tcp)
|
- [水平擴展的缺點](#水平擴展的缺點)
|
||||||
* [使用者資料流通訊協定 (UDP)](#使用者資料流通訊協定-udp)
|
- [負載平衡器的缺點](#負載平衡器的缺點)
|
||||||
* [遠端程式呼叫 (RPC)](#遠端程式呼叫-rpc)
|
- [來源及延伸閱讀](#來源及延伸閱讀-6)
|
||||||
* [具象狀態轉移 (REST)](#具象狀態轉移-rest)
|
- [反向代理(網頁伺服器)](#反向代理網頁伺服器)
|
||||||
* [資訊安全](#資訊安全)
|
- [負載平衡器與反向代理伺服器](#負載平衡器與反向代理伺服器)
|
||||||
* [附錄](#附錄)
|
- [反向代理伺服器的缺點](#反向代理伺服器的缺點)
|
||||||
* [2 的次方表](#2-的次方表)
|
- [來源與延伸閱讀](#來源與延伸閱讀)
|
||||||
* [每個開發者都應該知道的延遲數量級](#每個開發者都應該知道的延遲數量級)
|
- [應用層](#應用層)
|
||||||
* [其他的系統設計面試問題](#其他的系統設計面試問題)
|
- [微服務](#微服務)
|
||||||
* [真實世界的架構](#真實世界的架構)
|
- [服務發現](#服務發現)
|
||||||
* [公司的系統架構](#公司的系統架構)
|
- [應用層的缺點](#應用層的缺點)
|
||||||
* [公司的工程部落格](#公司的工程部落格)
|
- [來源與延伸閱讀](#來源與延伸閱讀-1)
|
||||||
* [仍在進行中](#仍在進行中)
|
- [資料庫](#資料庫)
|
||||||
* [致謝](#致謝)
|
- [關連式資料庫管理系統(RDBMS)](#關連式資料庫管理系統rdbms)
|
||||||
* [聯絡資訊](#聯絡資訊)
|
- [主從複寫](#主從複寫)
|
||||||
* [授權](#授權)
|
- [主從複寫的缺點](#主從複寫的缺點)
|
||||||
|
- [主動模式複寫](#主動模式複寫)
|
||||||
|
- [主動模式的缺點](#主動模式的缺點)
|
||||||
|
- [複寫的缺點](#複寫的缺點)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-7)
|
||||||
|
- [聯邦式資料庫](#聯邦式資料庫)
|
||||||
|
- [聯邦式資料庫的缺點](#聯邦式資料庫的缺點)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-8)
|
||||||
|
- [分片](#分片)
|
||||||
|
- [分片的缺點](#分片的缺點)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-9)
|
||||||
|
- [反正規化](#反正規化)
|
||||||
|
- [反正規化的缺點](#反正規化的缺點)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-10)
|
||||||
|
- [SQL 優化](#sql-優化)
|
||||||
|
- [使用較為精準的 schema](#使用較為精準的-schema)
|
||||||
|
- [使用正確的索引](#使用正確的索引)
|
||||||
|
- [避免高成本的 Join 操作](#避免高成本的-join-操作)
|
||||||
|
- [分割資料表](#分割資料表)
|
||||||
|
- [調整查詢的快取](#調整查詢的快取)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-11)
|
||||||
|
- [NoSQL](#nosql)
|
||||||
|
- [鍵-值對的資料庫](#鍵-值對的資料庫)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-12)
|
||||||
|
- [文件類型資料庫](#文件類型資料庫)
|
||||||
|
- [延伸閱讀](#延伸閱讀)
|
||||||
|
- [列儲存型資料庫](#列儲存型資料庫)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-13)
|
||||||
|
- [圖形資料庫](#圖形資料庫)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-14)
|
||||||
|
- [來源及延伸閱讀:NoSQL](#來源及延伸閱讀nosql)
|
||||||
|
- [SQL 或 NoSQL](#sql-或-nosql)
|
||||||
|
- [來源及延伸閱讀: SQL 或 NoSQL](#來源及延伸閱讀-sql-或-nosql)
|
||||||
|
- [快取](#快取)
|
||||||
|
- [客戶端快取](#客戶端快取)
|
||||||
|
- [CDN 快取](#cdn-快取)
|
||||||
|
- [網站伺服器快取](#網站伺服器快取)
|
||||||
|
- [資料庫快取](#資料庫快取)
|
||||||
|
- [應用程式快取](#應用程式快取)
|
||||||
|
- [資料庫查詢級別的快取](#資料庫查詢級別的快取)
|
||||||
|
- [物件級別的快取](#物件級別的快取)
|
||||||
|
- [什麼時候要更新快取](#什麼時候要更新快取)
|
||||||
|
- [快取模式](#快取模式)
|
||||||
|
- [快取的缺點](#快取的缺點)
|
||||||
|
- [寫入模式](#寫入模式)
|
||||||
|
- [寫入模式的缺點](#寫入模式的缺點)
|
||||||
|
- [事後寫入(回寫)](#事後寫入回寫)
|
||||||
|
- [事後寫入的缺點](#事後寫入的缺點)
|
||||||
|
- [更新式快取](#更新式快取)
|
||||||
|
- [更新式快取的缺點](#更新式快取的缺點)
|
||||||
|
- [快取的缺點](#快取的缺點-1)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-15)
|
||||||
|
- [非同步機制](#非同步機制)
|
||||||
|
- [訊息佇列](#訊息佇列)
|
||||||
|
- [工作佇列](#工作佇列)
|
||||||
|
- [背壓機制](#背壓機制)
|
||||||
|
- [非同步的缺點](#非同步的缺點)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-16)
|
||||||
|
- [通訊](#通訊)
|
||||||
|
- [超文件通訊協定 (HTTP)](#超文件通訊協定-http)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-17)
|
||||||
|
- [傳輸控制通訊協定(TCP)](#傳輸控制通訊協定tcp)
|
||||||
|
- [使用者資料流通訊協定 (UDP)](#使用者資料流通訊協定-udp)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-18)
|
||||||
|
- [遠端程式呼叫 (RPC)](#遠端程式呼叫-rpc)
|
||||||
|
- [RPC 的缺點](#rpc-的缺點)
|
||||||
|
- [具象狀態轉移 (REST)](#具象狀態轉移-rest)
|
||||||
|
- [REST 的缺點](#rest-的缺點)
|
||||||
|
- [RPC 和 REST 呼叫的比較](#rpc-和-rest-呼叫的比較)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-19)
|
||||||
|
- [資訊安全](#資訊安全)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-20)
|
||||||
|
- [附錄](#附錄)
|
||||||
|
- [2 的次方表](#2-的次方表)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-21)
|
||||||
|
- [每個開發者都應該知道的延遲數量級](#每個開發者都應該知道的延遲數量級)
|
||||||
|
- [視覺化延遲數](#視覺化延遲數)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-22)
|
||||||
|
- [其他的系統設計面試問題](#其他的系統設計面試問題)
|
||||||
|
- [真實世界的架構](#真實世界的架構)
|
||||||
|
- [公司的系統架構](#公司的系統架構)
|
||||||
|
- [公司的工程部落格](#公司的工程部落格)
|
||||||
|
- [來源及延伸閱讀](#來源及延伸閱讀-23)
|
||||||
|
- [仍在進行中](#仍在進行中)
|
||||||
|
- [致謝](#致謝)
|
||||||
|
- [聯絡資訊](#聯絡資訊)
|
||||||
|
- [授權](#授權)
|
||||||
|
|
||||||
## 學習指南
|
## 學習指南
|
||||||
|
|
||||||
> 基於你面試的時間 (短、中、長) 來複習這些建議的主題。
|
> 基於你面試的時間 (短、中、長) 來複習這些建議的主題。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**Q: 對於面試者來說,我需要知道這裡所有的知識嗎?**
|
**Q: 對於面試者來說,我需要知道這裡所有的知識嗎?**
|
||||||
|
|
||||||
|
@ -302,49 +388,49 @@
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/pastebin/README.md)
|
[閱讀練習與解答](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 設計一個像是 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)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 設計一個爬蟲系統
|
### 設計一個爬蟲系統
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/web_crawler/README.md)
|
[閱讀練習與解答](solutions/system_design/web_crawler/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 設計 Mint.com 網站
|
### 設計 Mint.com 網站
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/mint/README.md)
|
[閱讀練習與解答](solutions/system_design/mint/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 設計一個社交網站的資料結構
|
### 設計一個社交網站的資料結構
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/social_graph/README.md)
|
[閱讀練習與解答](solutions/system_design/social_graph/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 設計一個搜尋引擎使用的鍵值儲存資料結構
|
### 設計一個搜尋引擎使用的鍵值儲存資料結構
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/query_cache/README.md)
|
[閱讀練習與解答](solutions/system_design/query_cache/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 設計一個根據產品分類的亞馬遜銷售排名
|
### 設計一個根據產品分類的亞馬遜銷售排名
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/sales_rank/README.md)
|
[閱讀練習與解答](solutions/system_design/sales_rank/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 在 AWS 上設計一個百萬用戶等級的系統
|
### 在 AWS 上設計一個百萬用戶等級的系統
|
||||||
|
|
||||||
[閱讀練習與解答](solutions/system_design/scaling_aws/README.md)
|
[閱讀練習與解答](solutions/system_design/scaling_aws/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 物件導向設計面試問題與解答
|
## 物件導向設計面試問題與解答
|
||||||
|
|
||||||
|
@ -435,7 +521,7 @@
|
||||||
### CAP 理論
|
### CAP 理論
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +615,7 @@ DNS 或是電子郵件系統使用的就是這種方式,最終一致性在高
|
||||||
## 域名系統
|
## 域名系統
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +653,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
## 內容傳遞網路(CDN)
|
## 內容傳遞網路(CDN)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +694,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
## 負載平衡器
|
## 負載平衡器
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +764,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
## 反向代理(網頁伺服器)
|
## 反向代理(網頁伺服器)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +807,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
## 應用層
|
## 應用層
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +844,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
## 資料庫
|
## 資料庫
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +867,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
主資料庫負責讀和寫,並且將寫入的資料複寫至一或多個從屬資料庫中,從屬資料庫只負責讀取。而從屬資料庫可以再將寫入複製到更多以樹狀結構的其他資料庫中。如果主資料庫離線了,系統可以以只讀模式運行,直到某個從屬資料庫被提升為主資料庫,或有新的主資料庫出現。
|
主資料庫負責讀和寫,並且將寫入的資料複寫至一或多個從屬資料庫中,從屬資料庫只負責讀取。而從屬資料庫可以再將寫入複製到更多以樹狀結構的其他資料庫中。如果主資料庫離線了,系統可以以只讀模式運行,直到某個從屬資料庫被提升為主資料庫,或有新的主資料庫出現。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +882,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
兩個主要的資料庫都負責讀取和寫入,並且兩者互相協調。如果其中一個主要資料庫離線,系統可以繼續運作。
|
兩個主要的資料庫都負責讀取和寫入,並且兩者互相協調。如果其中一個主要資料庫離線,系統可以繼續運作。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +910,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
#### 聯邦式資料庫
|
#### 聯邦式資料庫
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +931,7 @@ DNS 是階層式的架構,一部分的 DNS 伺服器位於頂層,當查詢
|
||||||
#### 分片
|
#### 分片
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1077,7 @@ NoSQL 指的是 **鍵-值對的資料庫**、**文件類型資料庫**、**列
|
||||||
#### 列儲存型資料庫
|
#### 列儲存型資料庫
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1100,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h
|
||||||
#### 圖形資料庫
|
#### 圖形資料庫
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1128,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h
|
||||||
### SQL 或 NoSQL
|
### SQL 或 NoSQL
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1170,7 @@ Google 發表了第一個列儲存型資料庫 [Bigtable](http://www.read.seas.h
|
||||||
## 快取
|
## 快取
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1241,7 @@ Redis 還有以下額外的功能:
|
||||||
#### 快取模式
|
#### 快取模式
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1277,7 @@ def get_user(self, user_id):
|
||||||
#### 寫入模式
|
#### 寫入模式
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1312,7 @@ def set_user(user_id, values):
|
||||||
#### 事後寫入(回寫)
|
#### 事後寫入(回寫)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1330,7 @@ def set_user(user_id, values):
|
||||||
#### 更新式快取
|
#### 更新式快取
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1362,7 @@ def set_user(user_id, values):
|
||||||
## 非同步機制
|
## 非同步機制
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1408,7 @@ def set_user(user_id, values):
|
||||||
## 通訊
|
## 通訊
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1440,7 @@ HTTP 是依賴於較底層的協議(例如:**TCP** 和 **UDP**) 的應用層
|
||||||
### 傳輸控制通訊協定(TCP)
|
### 傳輸控制通訊協定(TCP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1464,7 @@ TCP 對於需要高可靠、低時間急迫性的應用來說很有用,比如
|
||||||
### 使用者資料流通訊協定 (UDP)
|
### 使用者資料流通訊協定 (UDP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1493,7 @@ UDP 的可靠性較低,但適合用在像是網路電話、視訊聊天、串
|
||||||
### 遠端程式呼叫 (RPC)
|
### 遠端程式呼叫 (RPC)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1716,7 @@ Notes
|
||||||
> 底下是關於真實世界的系統架構是如何設計的文章
|
> 底下是關於真實世界的系統架構是如何設計的文章
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
# 系统设计入门
|
# 系统设计入门
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jj3A5N8.png">
|
<img src="../../images/jj3A5N8.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
## 抽认卡
|
## 抽认卡
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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="images/b4YtAEN.png">
|
<img src="../../images/b4YtAEN.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -97,96 +97,182 @@
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/jrUBAF7.png">
|
<img src="../../images/jrUBAF7.png">
|
||||||
<br/>
|
<br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* [系统设计主题:从这里开始](#系统设计主题从这里开始)
|
- [系统设计入门](#系统设计入门)
|
||||||
* [第一步:回顾可扩展性的视频讲座](#第一步回顾可扩展性scalability的视频讲座)
|
- [目的](#目的)
|
||||||
* [第二步:回顾可扩展性的文章](#第二步回顾可扩展性文章)
|
- [学习如何设计大型系统](#学习如何设计大型系统)
|
||||||
* [接下来的步骤](#接下来的步骤)
|
- [从开源社区学习](#从开源社区学习)
|
||||||
* [性能与拓展性](#性能与可扩展性)
|
- [为系统设计的面试做准备](#为系统设计的面试做准备)
|
||||||
* [延迟与吞吐量](#延迟与吞吐量)
|
- [抽认卡](#抽认卡)
|
||||||
* [可用性与一致性](#可用性与一致性)
|
- [代码资源:互动式编程挑战](#代码资源互动式编程挑战)
|
||||||
* [CAP 理论](#cap-理论)
|
- [贡献](#贡献)
|
||||||
* [CP - 一致性和分区容错性](#cp--一致性和分区容错性)
|
- [系统设计主题的索引](#系统设计主题的索引)
|
||||||
* [AP - 可用性和分区容错性](#ap--可用性与分区容错性)
|
- [学习指引](#学习指引)
|
||||||
* [一致模式](#一致性模式)
|
- [如何处理一个系统设计的面试题](#如何处理一个系统设计的面试题)
|
||||||
* [弱一致性](#弱一致性)
|
- [第一步:描述使用场景,约束和假设](#第一步描述使用场景约束和假设)
|
||||||
* [最终一致性](#最终一致性)
|
- [第二步:创造一个高层级的设计](#第二步创造一个高层级的设计)
|
||||||
* [强一致性](#强一致性)
|
- [第三步:设计核心组件](#第三步设计核心组件)
|
||||||
* [可用模式](#可用性模式)
|
- [第四步:扩展设计](#第四步扩展设计)
|
||||||
* [故障切换](#故障切换)
|
- [预估计算量](#预估计算量)
|
||||||
* [复制](#复制)
|
- [相关资源和延伸阅读](#相关资源和延伸阅读)
|
||||||
* [域名系统](#域名系统)
|
- [系统设计的面试题和解答](#系统设计的面试题和解答)
|
||||||
* [CDN](#内容分发网络cdn)
|
- [设计 Pastebin.com (或者 Bit.ly)](#设计-pastebincom-或者-bitly)
|
||||||
* [CDN 推送](#cdn-推送push)
|
- [设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)](#设计-twitter-时间线和搜索-或者-facebook-feed-和搜索)
|
||||||
* [CDN 拉取](#cdn-拉取pull)
|
- [设计一个网页爬虫](#设计一个网页爬虫)
|
||||||
* [负载均衡器](#负载均衡器)
|
- [设计 Mint.com](#设计-mintcom)
|
||||||
* [工作到备用切换(Active-passive)](#工作到备用切换active-passive)
|
- [为一个社交网络设计数据结构](#为一个社交网络设计数据结构)
|
||||||
* [双工作切换(Active-active)](#双工作切换active-active)
|
- [为搜索引擎设计一个 key-value 储存](#为搜索引擎设计一个-key-value-储存)
|
||||||
* [四层负载均衡](#四层负载均衡)
|
- [设计按类别分类的 Amazon 销售排名](#设计按类别分类的-amazon-销售排名)
|
||||||
* [七层负载均衡](#七层负载均衡器)
|
- [在 AWS 上设计一个百万用户级别的系统](#在-aws-上设计一个百万用户级别的系统)
|
||||||
* [水平扩展](#水平扩展)
|
- [面向对象设计的面试问题及解答](#面向对象设计的面试问题及解答)
|
||||||
* [反向代理(web 服务器)](#反向代理web-服务器)
|
- [系统设计主题:从这里开始](#系统设计主题从这里开始)
|
||||||
* [负载均衡与反向代理](#负载均衡器与反向代理)
|
- [第一步:回顾可扩展性(scalability)的视频讲座](#第一步回顾可扩展性scalability的视频讲座)
|
||||||
* [应用层](#应用层)
|
- [第二步:回顾可扩展性文章](#第二步回顾可扩展性文章)
|
||||||
* [微服务](#微服务)
|
- [接下来的步骤](#接下来的步骤)
|
||||||
* [服务发现](#服务发现)
|
- [性能与可扩展性](#性能与可扩展性)
|
||||||
* [数据库](#数据库)
|
- [来源及延伸阅读](#来源及延伸阅读)
|
||||||
* [关系型数据库管理系统(RDBMS)](#关系型数据库管理系统rdbms)
|
- [延迟与吞吐量](#延迟与吞吐量)
|
||||||
* [Master-slave 复制集](#主从复制)
|
- [来源及延伸阅读](#来源及延伸阅读-1)
|
||||||
* [Master-master 复制集](#主主复制)
|
- [可用性与一致性](#可用性与一致性)
|
||||||
* [联合](#联合)
|
- [CAP 理论](#cap-理论)
|
||||||
* [分片](#分片)
|
- [CP ─ 一致性和分区容错性](#cp--一致性和分区容错性)
|
||||||
* [非规范化](#非规范化)
|
- [AP ─ 可用性与分区容错性](#ap--可用性与分区容错性)
|
||||||
* [SQL 调优](#sql-调优)
|
- [来源及延伸阅读](#来源及延伸阅读-2)
|
||||||
* [NoSQL](#nosql)
|
- [一致性模式](#一致性模式)
|
||||||
* [Key-value 存储](#键-值存储)
|
- [弱一致性](#弱一致性)
|
||||||
* [文档存储](#文档类型存储)
|
- [最终一致性](#最终一致性)
|
||||||
* [宽列存储](#列型存储)
|
- [强一致性](#强一致性)
|
||||||
* [图数据库](#图数据库)
|
- [来源及延伸阅读](#来源及延伸阅读-3)
|
||||||
* [SQL 还是 NoSQL](#sql-还是-nosql)
|
- [可用性模式](#可用性模式)
|
||||||
* [缓存](#缓存)
|
- [故障切换](#故障切换)
|
||||||
* [客户端缓存](#客户端缓存)
|
- [工作到备用切换(Active-passive)](#工作到备用切换active-passive)
|
||||||
* [CDN 缓存](#cdn-缓存)
|
- [双工作切换(Active-active)](#双工作切换active-active)
|
||||||
* [Web 服务器缓存](#web-服务器缓存)
|
- [缺陷:故障切换](#缺陷故障切换)
|
||||||
* [数据库缓存](#数据库缓存)
|
- [复制](#复制)
|
||||||
* [应用缓存](#应用缓存)
|
- [主─从复制和主─主复制](#主从复制和主主复制)
|
||||||
* [数据库查询级别的缓存](#数据库查询级别的缓存)
|
- [域名系统](#域名系统)
|
||||||
* [对象级别的缓存](#对象级别的缓存)
|
- [缺陷:DNS](#缺陷dns)
|
||||||
* [何时更新缓存](#何时更新缓存)
|
- [来源及延伸阅读](#来源及延伸阅读-4)
|
||||||
* [缓存模式](#缓存模式)
|
- [内容分发网络(CDN)](#内容分发网络cdn)
|
||||||
* [直写模式](#直写模式)
|
- [CDN 推送(push)](#cdn-推送push)
|
||||||
* [回写模式](#回写模式)
|
- [CDN 拉取(pull)](#cdn-拉取pull)
|
||||||
* [刷新](#刷新)
|
- [缺陷:CDN](#缺陷cdn)
|
||||||
* [异步](#异步)
|
- [来源及延伸阅读](#来源及延伸阅读-5)
|
||||||
* [消息队列](#消息队列)
|
- [负载均衡器](#负载均衡器)
|
||||||
* [任务队列](#任务队列)
|
- [四层负载均衡](#四层负载均衡)
|
||||||
* [背压机制](#背压)
|
- [七层负载均衡器](#七层负载均衡器)
|
||||||
* [通讯](#通讯)
|
- [水平扩展](#水平扩展)
|
||||||
* [传输控制协议(TCP)](#传输控制协议tcp)
|
- [缺陷:水平扩展](#缺陷水平扩展)
|
||||||
* [用户数据报协议(UDP)](#用户数据报协议udp)
|
- [缺陷:负载均衡器](#缺陷负载均衡器)
|
||||||
* [远程控制调用协议(RPC)](#远程过程调用协议rpc)
|
- [来源及延伸阅读](#来源及延伸阅读-6)
|
||||||
* [表述性状态转移(REST)](#表述性状态转移rest)
|
- [反向代理(web 服务器)](#反向代理web-服务器)
|
||||||
* [安全](#安全)
|
- [负载均衡器与反向代理](#负载均衡器与反向代理)
|
||||||
* [附录](#附录)
|
- [不利之处:反向代理](#不利之处反向代理)
|
||||||
* [2 的次方表](#2-的次方表)
|
- [来源及延伸阅读](#来源及延伸阅读-7)
|
||||||
* [每个程序员都应该知道的延迟数](#每个程序员都应该知道的延迟数)
|
- [应用层](#应用层)
|
||||||
* [其它的系统设计面试题](#其它的系统设计面试题)
|
- [微服务](#微服务)
|
||||||
* [真实架构](#真实架构)
|
- [服务发现](#服务发现)
|
||||||
* [公司的系统架构](#公司的系统架构)
|
- [不利之处:应用层](#不利之处应用层)
|
||||||
* [公司工程博客](#公司工程博客)
|
- [来源及延伸阅读](#来源及延伸阅读-8)
|
||||||
* [正在完善中](#正在完善中)
|
- [数据库](#数据库)
|
||||||
* [致谢](#致谢)
|
- [关系型数据库管理系统(RDBMS)](#关系型数据库管理系统rdbms)
|
||||||
* [联系方式](#联系方式)
|
- [主从复制](#主从复制)
|
||||||
* [许可](#许可)
|
- [不利之处:主从复制](#不利之处主从复制)
|
||||||
|
- [主主复制](#主主复制)
|
||||||
|
- [不利之处: 主主复制](#不利之处-主主复制)
|
||||||
|
- [不利之处:复制](#不利之处复制)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-9)
|
||||||
|
- [联合](#联合)
|
||||||
|
- [不利之处:联合](#不利之处联合)
|
||||||
|
- [来源及延伸阅读:联合](#来源及延伸阅读联合)
|
||||||
|
- [分片](#分片)
|
||||||
|
- [不利之处:分片](#不利之处分片)
|
||||||
|
- [来源及延伸阅读:分片](#来源及延伸阅读分片)
|
||||||
|
- [非规范化](#非规范化)
|
||||||
|
- [不利之处:非规范化](#不利之处非规范化)
|
||||||
|
- [来源及延伸阅读:非规范化](#来源及延伸阅读非规范化)
|
||||||
|
- [SQL 调优](#sql-调优)
|
||||||
|
- [改进模式](#改进模式)
|
||||||
|
- [使用正确的索引](#使用正确的索引)
|
||||||
|
- [避免高成本的联结操作](#避免高成本的联结操作)
|
||||||
|
- [分割数据表](#分割数据表)
|
||||||
|
- [调优查询缓存](#调优查询缓存)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-10)
|
||||||
|
- [NoSQL](#nosql)
|
||||||
|
- [键-值存储](#键-值存储)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-11)
|
||||||
|
- [文档类型存储](#文档类型存储)
|
||||||
|
- [来源及延伸阅读:文档类型存储](#来源及延伸阅读文档类型存储)
|
||||||
|
- [列型存储](#列型存储)
|
||||||
|
- [来源及延伸阅读:列型存储](#来源及延伸阅读列型存储)
|
||||||
|
- [图数据库](#图数据库)
|
||||||
|
- [相关资源和延伸阅读:图](#相关资源和延伸阅读图)
|
||||||
|
- [来源及延伸阅读:NoSQL](#来源及延伸阅读nosql)
|
||||||
|
- [SQL 还是 NoSQL](#sql-还是-nosql)
|
||||||
|
- [来源及延伸阅读:SQL 或 NoSQL](#来源及延伸阅读sql-或-nosql)
|
||||||
|
- [缓存](#缓存)
|
||||||
|
- [客户端缓存](#客户端缓存)
|
||||||
|
- [CDN 缓存](#cdn-缓存)
|
||||||
|
- [Web 服务器缓存](#web-服务器缓存)
|
||||||
|
- [数据库缓存](#数据库缓存)
|
||||||
|
- [应用缓存](#应用缓存)
|
||||||
|
- [数据库查询级别的缓存](#数据库查询级别的缓存)
|
||||||
|
- [对象级别的缓存](#对象级别的缓存)
|
||||||
|
- [何时更新缓存](#何时更新缓存)
|
||||||
|
- [缓存模式](#缓存模式)
|
||||||
|
- [缓存的缺点:](#缓存的缺点)
|
||||||
|
- [直写模式](#直写模式)
|
||||||
|
- [直写模式的缺点:](#直写模式的缺点)
|
||||||
|
- [回写模式](#回写模式)
|
||||||
|
- [回写模式的缺点:](#回写模式的缺点)
|
||||||
|
- [刷新](#刷新)
|
||||||
|
- [刷新的缺点:](#刷新的缺点)
|
||||||
|
- [缓存的缺点:](#缓存的缺点-1)
|
||||||
|
- [相关资源和延伸阅读](#相关资源和延伸阅读-1)
|
||||||
|
- [异步](#异步)
|
||||||
|
- [消息队列](#消息队列)
|
||||||
|
- [任务队列](#任务队列)
|
||||||
|
- [背压](#背压)
|
||||||
|
- [异步的缺点:](#异步的缺点)
|
||||||
|
- [相关资源和延伸阅读](#相关资源和延伸阅读-2)
|
||||||
|
- [通讯](#通讯)
|
||||||
|
- [超文本传输协议(HTTP)](#超文本传输协议http)
|
||||||
|
- [来源及延伸阅读:HTTP](#来源及延伸阅读http)
|
||||||
|
- [传输控制协议(TCP)](#传输控制协议tcp)
|
||||||
|
- [用户数据报协议(UDP)](#用户数据报协议udp)
|
||||||
|
- [来源及延伸阅读:TCP 与 UDP](#来源及延伸阅读tcp-与-udp)
|
||||||
|
- [远程过程调用协议(RPC)](#远程过程调用协议rpc)
|
||||||
|
- [缺点:RPC](#缺点rpc)
|
||||||
|
- [表述性状态转移(REST)](#表述性状态转移rest)
|
||||||
|
- [缺点:REST](#缺点rest)
|
||||||
|
- [RPC 与 REST 比较](#rpc-与-rest-比较)
|
||||||
|
- [来源及延伸阅读:REST 与 RPC](#来源及延伸阅读rest-与-rpc)
|
||||||
|
- [安全](#安全)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-12)
|
||||||
|
- [附录](#附录)
|
||||||
|
- [2 的次方表](#2-的次方表)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-13)
|
||||||
|
- [每个程序员都应该知道的延迟数](#每个程序员都应该知道的延迟数)
|
||||||
|
- [延迟数可视化](#延迟数可视化)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-14)
|
||||||
|
- [其它的系统设计面试题](#其它的系统设计面试题)
|
||||||
|
- [真实架构](#真实架构)
|
||||||
|
- [公司的系统架构](#公司的系统架构)
|
||||||
|
- [公司工程博客](#公司工程博客)
|
||||||
|
- [来源及延伸阅读](#来源及延伸阅读-15)
|
||||||
|
- [正在完善中](#正在完善中)
|
||||||
|
- [致谢](#致谢)
|
||||||
|
- [联系方式](#联系方式)
|
||||||
|
- [许可](#许可)
|
||||||
|
|
||||||
## 学习指引
|
## 学习指引
|
||||||
|
|
||||||
> 基于你面试的时间线(短、中、长)去复习那些推荐的主题。
|
> 基于你面试的时间线(短、中、长)去复习那些推荐的主题。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**问:对于面试来说,我需要知道这里的所有知识点吗?**
|
**问:对于面试来说,我需要知道这里的所有知识点吗?**
|
||||||
|
|
||||||
|
@ -307,49 +393,49 @@
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/pastebin/README.md)
|
[查看实践与解答](solutions/system_design/pastebin/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)
|
### 设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/twitter/README.md)
|
[查看实践与解答](solutions/system_design/twitter/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 设计一个网页爬虫
|
### 设计一个网页爬虫
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/web_crawler/README.md)
|
[查看实践与解答](solutions/system_design/web_crawler/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 设计 Mint.com
|
### 设计 Mint.com
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/mint/README.md)
|
[查看实践与解答](solutions/system_design/mint/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 为一个社交网络设计数据结构
|
### 为一个社交网络设计数据结构
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/social_graph/README.md)
|
[查看实践与解答](solutions/system_design/social_graph/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 为搜索引擎设计一个 key-value 储存
|
### 为搜索引擎设计一个 key-value 储存
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/query_cache/README.md)
|
[查看实践与解答](solutions/system_design/query_cache/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 设计按类别分类的 Amazon 销售排名
|
### 设计按类别分类的 Amazon 销售排名
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/sales_rank/README.md)
|
[查看实践与解答](solutions/system_design/sales_rank/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 在 AWS 上设计一个百万用户级别的系统
|
### 在 AWS 上设计一个百万用户级别的系统
|
||||||
|
|
||||||
[查看实践与解答](solutions/system_design/scaling_aws/README.md)
|
[查看实践与解答](solutions/system_design/scaling_aws/README.md)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 面向对象设计的面试问题及解答
|
## 面向对象设计的面试问题及解答
|
||||||
|
|
||||||
|
@ -441,7 +527,7 @@
|
||||||
### CAP 理论
|
### CAP 理论
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +622,7 @@ DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性
|
||||||
## 域名系统
|
## 域名系统
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +660,7 @@ DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性
|
||||||
## 内容分发网络(CDN)
|
## 内容分发网络(CDN)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +699,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
## 负载均衡器
|
## 负载均衡器
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +768,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
## 反向代理(web 服务器)
|
## 反向代理(web 服务器)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +812,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
## 应用层
|
## 应用层
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +850,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
## 数据库
|
## 数据库
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +871,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
关系型数据库扩展包括许多技术:**主从复制**、**主主复制**、**联合**、**分片**、**非规范化**和 **SQL调优**。
|
关系型数据库扩展包括许多技术:**主从复制**、**主主复制**、**联合**、**分片**、**非规范化**和 **SQL调优**。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +886,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
- 参考[不利之处:复制](#不利之处复制)中,主从复制和主主复制**共同**的问题。
|
- 参考[不利之处:复制](#不利之处复制)中,主从复制和主主复制**共同**的问题。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +921,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
#### 联合
|
#### 联合
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +943,7 @@ CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源
|
||||||
#### 分片
|
#### 分片
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1087,7 @@ MongoDB 和 CouchDB 等一些文档类型存储还提供了类似 SQL 语言的
|
||||||
#### 列型存储
|
#### 列型存储
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1110,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h
|
||||||
#### 图数据库
|
#### 图数据库
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1137,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h
|
||||||
### SQL 还是 NoSQL
|
### SQL 还是 NoSQL
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1178,7 @@ Google 发布了第一个列型存储数据库 [Bigtable](http://www.read.seas.h
|
||||||
## 缓存
|
## 缓存
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1249,7 @@ Redis 有下列附加功能:
|
||||||
#### 缓存模式
|
#### 缓存模式
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1285,7 @@ def get_user(self, user_id):
|
||||||
#### 直写模式
|
#### 直写模式
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1320,7 @@ def set_user(user_id, values):
|
||||||
#### 回写模式
|
#### 回写模式
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1338,7 @@ def set_user(user_id, values):
|
||||||
#### 刷新
|
#### 刷新
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1370,7 @@ def set_user(user_id, values):
|
||||||
## 异步
|
## 异步
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1416,7 @@ def set_user(user_id, values):
|
||||||
## 通讯
|
## 通讯
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1451,7 @@ HTTP 是依赖于较低级协议(如 **TCP** 和 **UDP**)的应用层协议
|
||||||
### 传输控制协议(TCP)
|
### 传输控制协议(TCP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1475,7 @@ TCP 对于需要高可靠性但时间紧迫的应用程序很有用。比如包
|
||||||
### 用户数据报协议(UDP)
|
### 用户数据报协议(UDP)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1504,7 @@ UDP 可靠性更低但适合用在网络电话、视频聊天,流媒体和实
|
||||||
### 远程过程调用协议(RPC)
|
### 远程过程调用协议(RPC)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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 +1726,7 @@ Notes
|
||||||
> 关于现实中真实的系统是怎么设计的文章。
|
> 关于现实中真实的系统是怎么设计的文章。
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="images/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>
|
||||||
|
|
24
mkdocs.yml
24
mkdocs.yml
|
@ -45,20 +45,22 @@ nav:
|
||||||
|
|
||||||
- English:
|
- English:
|
||||||
- Overview: en/index.md
|
- Overview: en/index.md
|
||||||
- Start Here: en/study_guide.md
|
- Study Guide Start Here: en/study_guide.md
|
||||||
|
- System Design Interview Questions: en/solutions.md
|
||||||
- System Design at a Glance: en/design-glance.md
|
- System Design at a Glance: en/design-glance.md
|
||||||
|
|
||||||
- 简体中文 (Simplified Chinese):
|
- Translations (Not up to date):
|
||||||
- 简体中文主页: zh/design-glance.md
|
- 简体中文 (Simplified Chinese):
|
||||||
|
- 简体中文主页: zh/design-glance.md
|
||||||
|
|
||||||
- 繁體中文 (Traditional Chinese):
|
- 繁體中文 (Traditional Chinese):
|
||||||
- 繁體中文首頁: zh-Hant/design-glance.md
|
- 繁體中文首頁: zh-Hant/design-glance.md
|
||||||
|
|
||||||
- العربية (Arabic):
|
- العربية (Arabic):
|
||||||
- الصفحة الرئيسية: ar/design-glance.md
|
- الصفحة الرئيسية: ar/design-glance.md
|
||||||
|
|
||||||
- 日本語 (Japanese):
|
- 日本語 (Japanese):
|
||||||
- 日本語のホーム: ja/design-glance.md
|
- 日本語のホーム: ja/design-glance.md
|
||||||
|
|
||||||
- Türkçe (Turkish):
|
- Türkçe (Turkish):
|
||||||
- Türkçe Anasayfa: tr/design-glance.md
|
- Türkçe Anasayfa: tr/design-glance.md
|
||||||
|
|
Loading…
Reference in New Issue