
تخيل إنك بتطلب اوردر اونلاين .. علشان الاوردر يوصل لازم يمشي في خطوات:
- أولاً بيتم تغليفه (ده الـ **Presentation Layer**)
- بيتحط فيه معلومات توضح هو الاوردر لمين (ده الـ **Application Layer**)
- العنوان بيتكتب على الكرتونة (ده الـ **Network Layer**)
- الاوردر بيتسلم لشركة الشحن (ده الـ **Transport Layer**)
- السواق ياخدها (ده الـ **Data Link Layer**)
- العربية تمشي على الطريق لحد ما توصل (ده الـ **Physical Layer**)
وفي النهاية، بنستقبل الاوردر وبنفتحه بنفس الترتيب العكسي ، ده بالضبط اللي بيحصل لما البيانات تمشي في الشبكة.
تخيل إنك بتكلم حد في مكالمة صوتية وبتأكد معاه كل جملة
“سمعتني؟ آه سمعتك.”
ده هو **TCP**، بيهتم إن كل رسالة توصل بالترتيب الصح، ولو في حاجة وقعت يعيد إرسالها مرة تانية.
أما **UDP** فهو زي البث المباشر
مش مهم لو ثانية راحت أو صوت قطع لحظة، المهم الاستمرار.
يعني لو المباراة تقطعت لحظة مش كارثة، مش هتطلب إعادة الإرسال زي TCP، فأهم حاجة بتكون السرعة.
تخيل تخيل إنك وصاحبك عايزين تتبادلوا كلام سري جدًا من خلال جوابات سرية بس خايف حد في السكة يفتحها أو يبدلها. فنعمل إيه؟
صاحبك (السيرفر) عنده **قفل ذكي** معمول بطريقة خاصة:
- أي حد في العالم يقدر **يقفله**
- بس **مافيش غيره هو اللي يقدر يفتحه** بمفتاح سري عنده (private key).
فهو بيقولك: "خُد القفل ده (public key)، استخدمه زي ما تحب، بس محدش يقدر يفتحه غيري."
بعد كده إنت بتكتب الرسالة السرية بتاعتك وتحطها في صندوق، وبدل ما تقفلها بقفل عادي، بتحط عليها **القفل الذكي اللي صاحبك ادهولك** ، يعني إنت قفلته بالـ **public key**
لما الصندوق يوصل له، هو بس اللي عنده **المفتاح اللي بيفتح القفل ده (private key)**، فيفتح الصندوق ويقرا الرسالة السريعة اللي جواه.
طب أي حد هيحاول يفتح الصندوق في الطريق؟ القفل مش هيتفتح. وأي حد هيحاول يبدل الصندوق؟ الاختام هتتكشف.
- القفل = Public Key
- المفتاح اللي بيفتح = Private Key
- السر اللي جواه = البيانات اللي إنت عايز تبعتها
- الطريق اللي مش آمن = الإنترنت
تخيل نفسك زمان قبل الموبايلات الذكية وعايز تكلم “مطعم أبو طارق”،
بس إنت مش حافظ رقمه. فبتعمل إيه؟
بتفتح **دليل التليفونات أو تسأل **السنترال**: “ممكن رقم مطعم أبو طارق؟”
فيرد عليك: “آه، رقمه كذا 0120999999” فدلوقتي تعرف الرقم، فتقدر تتصل بيه مباشرة.
ونفس الفكرة بالظبط في الإنترنت:
- لما تكتب `www.google.com` جهازك يقول: “أنا مش عارف الـ (IP address) بتاع جوجل.”
- فيروح يسأل الـ **DNS**: “ممكن رقم السيرفر بتاع الموقع ده؟”
- الـ DNS يرد عليه: “آه، عنوانه 142.250.190.14”
- فيقوم الجهاز يستخدم الرقم ده عشان يوصله فعلاً.
This is the slides of the Communication & Network Basics part.
These are the slides of the Coordination & Failure Detection part.
These are the slides of the Distributed Transactions part.
These are the slides of the Scalability part.
These are the slides of the Resiliency & Fault Tolerance part.
These are the slides of the Maintainability part.
السلام عليكم ورحمة الله وبركاته ,,
اللهم اجعله عملًا متقبلًا , واللهم اجعله علمًا ينتفع به وعلمنا ما ينفعنا واستعملنا ولا تستبدلنا
If you’ve been reading about distributed systems, watching talks, or hearing buzzwords like replication, partitioning, or consistency — but still feel there’s a missing link between the theory and how real systems actually work… this course is for you, Insha’Allah.
Whether you’re a backend developer who wants to understand scalability, a software engineer preparing for system design interviews, or someone who simply wants to know how Netflix, Amazon, and Google keep their systems running reliably at scale — this course will guide you step-by-step through the core building blocks of distributed systems.
There are no abstract “theoretical” lectures here — no equations, no complicated math. Just clear, real-world explanations with visual diagrams, analogies, and patterns that you can apply directly in your work.
So get ready for a new kind of adventure — one that will make you see systems differently and able to design and build large scale distributed systems!
Course Overview
This course aims not just to help you understand distributed systems, but to help you learn how to design and build large scale distributed systems.
You’ll learn to reason about failure, latency, availability, and data consistency — the same way large-scale systems do.
By the end, you’ll be able to look at any architecture and understand:
How it scales.
How it stays consistent.
And how it survives failure.
More importantly, you’ll learn the mindset behind designing robust, fault-tolerant, and resilient systems.
Course Structure
The course is structured to be hands-on and story-driven — we’ll go from small to big, from simple to complex:
Foundations: Understand what makes a system distributed, and why we need one.
Communication: Learn how services talk to each other reliably with TCP , TLS/SSL , HTTP/s, DNS and APIs.
Coordination: Learn how services coordinate their tasks reliably with each other and how heartbeats, leader election, and gossip protocols keep systems alive.
Data Partitioning & Replication: Dive into the heart of scalability — with real examples of how data is distributed across nodes.
Consistency Models: Strong, eventual, causal — all explained simply and practically.
Resiliency Patterns: Explore retries, circuit breakers, timeouts, rate limiting, bulkhead to isolate failure, and how real systems stay alive during failure.
Load Management: Learn about load shedding, backpressure, and autoscaling to protect your systems under pressure.
Observability: Understand how logs, metrics, and traces help teams detect and fix issues in distributed environments.
Every concept connects to real-world systems — from AWS S3 and Kafka to Netflix’s microservices and Amazon’s DynamoDB.
What You’ll Get
Visual diagrams and animations to understand system interactions.
Real-world examples from popular distributed systems.
Code snippets and conceptual demos to make things concrete.
Lifetime access and future updates as new topics are added.
PDF summaries for quick revision of each major topic.