يمتد من العميل إلى الـAPI
Client ↔ Authorization Server ↔ APIONE-DAY COMMAND CENTER
ابدأ بالمحاضرات بعمق، مرّ سريعاً على عروض الطلاب، ثم راجع نقاط الخلط واختبر نفسك بنسبة الامتحان الحقيقية.
FULL SYSTEM LANDSCAPE
اتبع المسار الرئيسي من المتصفح إلى البيانات، ثم اقرأ الشرائط السفلية كطبقات تعبر أكثر من مرحلة.
يعمل offline، وينفذ compute محلياً، أو يعمل بلا واجهة
ينقل request/response أو streams أو peer-to-peer
يعرّف sync API أو async contract أو hub push
يحرّك NiFi البيانات؛ ويحفظها Kafka لإعادة التشغيل
يعالج Flink الـstateful stream؛ وينفذ Spark الـbatch وSQL
يوفر Hadoop الـfoundation؛ ويقدم Hive الـcatalog وSQL
Client ↔ Authorization Server ↔ APIEvents ↔ Compute ↔ DataImage → Container → Workload → Clusterاقرأها كخريطة أدوار، لا كسلسلة إلزامية: ليس كل تطبيق يمر بكل صندوق؛ Docker / Kubernetes يشغّلان المكوّنات، وOAuth يحمي حدود الثقة، بينما تحدد الأنماط كيف تتعاون طبقات الأحداث والحساب والبيانات.
CANONICAL STUDY ROUTE
0 من 20 محوراً تمت مراجعتها
60% · Multiple-answer — افهم الآلية والفروق والفخاخ.
افهم الاتجاه، الاتصال، والـlatency قبل حفظ أسماء البروتوكولات.
ميّز الحساب داخل المتصفح عن الاستخراج وعن أتمتة workflow.
ثبّت الفرق بين authorization، identity، والtoken validation.
40% · Single-choice — ثبّت الوظيفة والمصطلحات العامة.
أعطِ كل أداة وظيفة واحدة واضحة داخل pipeline.
لا تخلط packaging على host مع orchestration على cluster.
اختر contract أوdelivery pattern من شكل التواصل المطلوب.
المحاضرات للفهم متعدد الإجابات؛ العروض لخلاصة عامة سريعة. ابحث بالمفهوم أوالأداة أوالمقارنة أوحتى اسم الملف.
افهم الآلية، ثبّت الفروق، وانتبه للفخ؛ قد يحمل السؤال أكثر من إجابة صحيحة.
اختيار protocol يغيّر latency وbandwidth وطريقة التوسع؛ والامتحان مرشح جداً لأسئلة المقارنة بين الإصدارات وبين REST وgRPC.

packet، من يتوقّف؟الميزة ليست “سرعة” مجردة؛ الفرق هو مكان حدوث head-of-line blocking.
كل اتصال يتسلسل داخلياً؛ استخدمت المتصفحات عدة اتصالات للتعويض.
multiplexing في HTTP، لكن فقد TCP قد يحبس كل streams.
يعيد QUIC إرسال المفقود داخل stream المتأثر فقط.
الخلاصة: HTTP/2 حل تزاحم الطلبات، وHTTP/3 عزل أثر فقد الحزم بين المسارات.
gRPC فرع فوق HTTP/2Protobuf → gRPC → HTTP/2 → TCP، وليس خطوة بعد HTTP/3.
Public / Browser / CacheREST
Internal / Typed / StreaminggRPC
HTTP/2 يحل multiplexing على مستوى التطبيق
لكن TCP head-of-line blocking يبقى عند packet loss
REST: JSON مقروء وbrowser-native
gRPC: Protobuf أصغر وأسرع لكنه يحتاج gRPC-Web للمتصفح
الـreal-time ingestion لا يكفيه request/response متكرر؛ يجب حماية النظام من slow consumers وتوزيع الاتصالات stateful أفقياً.
اختر التقنية لترى اتجاه البيانات، عمر الاتصال، وكلفة الاستمرار.
أفضل اختيار عندماDashboard / logs / alerts
10,000 msg/s تدخل، و1,000 msg/s فقط تخرج.
Bounded: أبطئ المنتج أو استخدم buffer / drop / coalesce وفق سياسة معلنة.
SSE: Server → Client، text، auto-reconnect
WebSocket: طرفان، text/binary، reconnect يدوي
SSE مناسب dashboards/logs/alerts
WebSocket مناسب IoT/games/collaboration
يقلل server bandwidth وlatency في edge-to-edge transfer، لكنه لا يلغي servers تماماً ولا يناسب mesh ضخمة.

NAT؛ التسلسل التفاعلي التالي يحدّد دور كل مسار.Signaling ينشئ الطريق؛ DataChannel يحمل البياناتOffer من A إلى B عبر signalingAnswer من B إلى A عبر signalingICE candidates في الاتجاهين، ثم اختبارات اتصاليكشف public IP/port؛ البيانات تبقى مباشرة بين الـpeers.
Peer A ↔ Peer B · direct after STUN discoverySTUNاكتشاف فقط؛ لا يمرر payload.
TURNRelay فعلي؛ payload يبقى مشفراً أثناء النقل.
mesh بسهولة؟كل peer يتصل بكل الآخرين ويرفع لهم بصورة مستقلة.
القانون: n(n−1)/2 اتصال؛ لذلك يناسب mesh المجموعات الصغيرة فقط.
STUN يكشف public IP/port
TURN يمرر payload فعلياً كـrelay
Signaling ينشئ الاتصال
DataChannel يحمل البيانات بعد الإنشاء
تصفية أوanonymization أوcompression على client تقلل upload bandwidth وcloud CPU قبل وصول البيانات إلى server.
مرّر العمل الحسابي الكبير كدفعة واحدة، واترك DOM والشبكة وقيادة التطبيق لـJavaScript.
JavaScript: DOM، I/O،strings،orchestration
Wasm: loops رقمية وbinary processing
CPU-bound → مرشح جيد
I/O-bound أوDOM-heavy → ابقَ في JavaScript
curl أوRequests قد يرى div فارغاً؛ نجاح crawler يعتمد على انتظار الإشارة الصحيحة وإدارة تكلفة Chrome والالتزام القانوني.
HTTP client يرى المصدر الخام؛ headless browser يشغّل JavaScript ويراقب الشبكة وDOM الناتج.
GET /products<div id="root"></div> <script src="bundle.js"></script>
لا توجد product cards في المصدر بعد.
GET /api/products → 200 JSON.product-card × 24 جاهزة للاستخراج.
اختر signal مبنياً على الحالة، لا مدة زمنية عمياء.
waitForResponse — دقيق عندما نعرف endpoint الحاسم؛ وصول JSON لا يضمن وحده اكتمال تحديث DOM.
HTTP scraper: أخف وأسرع
Headless browser: أثقل لكنه ينفذ SPA
waitForSelector بسيط
waitForResponse أدق عندما نعرف API
Legacy وenterprise portals مبنية للبشر. automation تقلل latency والأخطاء، لكن reliability تعتمد على sessions وtimeouts وselectors ومراقبة workflow.
Playwright يعبر واجهة صُممت للبشر؛ Airflow يغلّف المسار بالجدولة والاعتمادية والمراقبة.
لا يوجد أوانتهت الصلاحية → secret store → login / MFA → حفظ state محمية.
Scraping يقرأ content
Automation ينفذ workflow ويغيّر state أيضاً
Browser task للواجهة
Airflow للجدولة والاعتمادية بين tasks
Password مشترك لا يتوسع مع rotation وMFA وrevocation؛ flows وscopes تمنح automated clients أقل صلاحية ولوقت محدود.
OAuth يفوّض الوصول؛ OIDC يضيف هوية المستخدم؛ JWT مجرد format يحتاج تحققاً كاملاً قبل الثقة.
اختر السيناريو، لا تحفظ أسماء flows منفصلة عن السبب.
Client Credentials · confidential client · access token فقط عادةً؛ عند الانتهاء يعيد client المصادقة.
لا تعامله كبطاقة هوية للواجهة.
Select Decode, Verify, or Tamper
ابدأ بـDecode للفحص أوVerify للثقة.
OAuth: ماذا يسمح للتطبيق؟
OIDC: من هو المستخدم؟
Access token قصير للـAPI
Refresh token طويل للحصول على access جديد
ابدأ بالخلاصة والخريطة العامة، وافتح التفاصيل فقط عندما تحتاج تثبيت المصطلحات.
نفس event يمكن أن تقرأه alerts وanalytics وstorage كل بسرعتها، ويمكن model جديد أن يعيد قراءة history ضمن retention.
A·e0A·e1A·e2A·e3A·e4A·e5A·e6B·e0B·e1B·e2B·e3B·e4C·e0C·e1C·e2C·e3C·e4C·e5Queue: deliver ثم delete
Kafka log: retain ثم consumers يختارون offset
Partition = parallelism + local order
Consumer group = workload sharing
المشكلة ليست حجم disk فقط بل زمن نقل/قراءة petabytes؛ parallelism وreplication يجعلان التخزين والمعالجة قابلين للتوسع والتحمل.
/weather.csv → B1:A,B · B2:B,C · B3:C,AB1B3′B2B1′B3B2′(2024, 32)(2023, 28)(2024, 35)2024 → [32, 35]2023 → [28]2024 → 352023 → 28NameNode = metadata
DataNode = actual blocks
MapReduce = processing
YARN = resource scheduling
جعل batch analytics وETL متاحاً لمستخدمي SQL بدلاً من كتابة MapReduce Java لكل query.
SELECT city, AVG(fare)
FROM trips
WHERE country = 'SY'
GROUP BY city;✓ /trips/country=SY/*.orc · scanned× /trips/country=DE/*.orc · prunedHive يخزن metadata
HDFS/Object Storage يخزن bytes
Partitioning حسب قيمة column
Bucketing حسب hash إلى عدد buckets
يجمع SQL وstreaming وML وgraphs في engine واحدة ويدعم Python/Scala/R/Java/SQL.
df.filter(...) .groupBy(...) .select(...)Transformation لا تنفذ فوراً
Action تشغل الـDAG
Driver ينسق
Executors تنفذ وتcache
مناسب لـfraud detection وdynamic pricing وtelemetry حيث milliseconds وstateful windows والدقة بعد failures مهمة.
Keyed State · rider-42 → count = 2Flink: event-at-a-time true streaming
Spark Streaming تقليدياً micro-batches
Watermark يعالج lateness
Checkpoint يعالج failure recovery
يوصل مصادر وبروتوكولات متنوعة بسرعة مع backpressure وrouting وretry دون كتابة pipeline كاملة يدوياً.
severity=ERROR · source=web-01actual log bytesRECEIVE → ROUTE → ATTRIBUTES_MODIFIED → SENDPutHDFS failure → retry queueNiFi = flow management وتحويل/route
Kafka = durable log وconsumer decoupling
Attributes = metadata
Content = bytes الفعلية
الـpattern يقرر عدد paths، source of truth، طريقة replay، وكلفة إبقاء logic متطابقة.
يفوز بالـlatency، لكن ordering وstate وexactly-once أصعب.
Lambda = مساران batch + speed
Kappa = stream path واحد + replay
Time architecture: Lambda/Kappa
Lake organization: Medallion
يحل اختلاف البيئات: Build مرة، push إلى registry، run بنفس السلوك على أي host متوافق.
افصل بين تعليمات البناء، القالب الثابت، مكان التخزين، والعملية التي تعمل فعلياً.
Image → Container
على الجهاز نفسه يمكن التشغيل مباشرة؛ الـRegistry ليست شرطاً.Image = template ثابت
Container = instance تعمل
Volume يديره Docker
Bind mount path مباشر من host
Docker وحده يدير host واحدة؛ cluster تحتاج scheduling وself-healing وrolling updates وstable networking عبر machines.
أنت تصرّح بالحالة المطلوبة، والمكوّنات تعيد الواقع إليها باستمرار.
kubectl applyالـDeployment يصرّح بالنسخ والتحديث؛ لا ننشئ Pods يدوياً عادةً.
الـService عنوان ثابت أمام Pods تتبدل عناوينها.
Deployment يدير replicas/rollout
Service يعطي endpoint ثابتاً للPods المتغيرة
Docker يشغّل container
Kubernetes ينسق containers كcluster
يمنح offline-first loading وcache policies وpush notifications حتى عندما لا تكون الصفحة مفتوحة.
افصل دورة الحياة عن اشتراك Push الذي يحدث مرة، وعن تسليم كل رسالة لاحقاً.
register('/sw.js')fetch · push · sync · clickPushManager.subscribe()→endpoint + p256dh + auth→POST /api/subscribe→App Server stores itpush event→showNotification()→notificationclickFCM / Mozilla Autopush / APNs تمرر bytes مشفّرة؛ لا تحتاج قراءة المحتوى.
Service Worker لا DOM
Page JS يتعامل مع DOM ويتواصل عبر postMessage
HTTP Cache browser-controlled
Cache API developer-controlled
يستبدل pull المتكرر والمتأخر بـpush لحظي، ويجعل Hub نقطة fan-out مشتركة لمصادر وsubscribers كثيرين.
الـHub هو الوسيط: يتحقق من callback أولاً، ثم يجلب التحديث ويوزّعه.
✓ Hub registers a verified subscription
✓ One update, immediate fan-out
PollingGET · GET · GET · maybe nothingdelayed + repeated load
VSWebSubsubscribe once · POST on changeinstant + work only on updates
Polling: client يسأل مراراً
WebSub: Hub يدفع عند تغير topic
Publisher يخطر فقط
Hub يجلب ويوزع content
Design-first contract يتيح frontend/backend أوproducer/consumer العمل بالتوازي مع docs وvalidation وcode generation.
العقد يوثّق الاتصال ولا ينقل الرسالة؛ النظام الواحد قد يحتاج العقدين.
ride.requestedpaths + HTTP operationschannels + messages + operationsOpenAPI: paths + request/response
AsyncAPI: channels + messages/events
Synchronous caller ينتظر
Asynchronous consumers تتفاعل لاحقاً
لا يوجد فائز مطلق: openness وbrowser/cacheability ترجح REST، بينما performance وstrict contracts وstreaming ترجح gRPC داخل النظام.
ابدأ بمن يستدعيك وبشكل الاتصال؛ لا يوجد فائز مطلق.
Open · browser-native · cacheable · CRUD
Typed · codegen · streaming · hot paths
Async event log · decoupled consumers
GetUser(id) → UserSubscribePrices() → stream QuoteUploadLogs(stream LogEntry) → AckChat(stream Msg) ↔ stream MsgREST: nouns/resources + HTTP verbs
gRPC: service methods/actions
OpenAPI optional contract
Proto mandatory schema-first contract
لا تحفظ أسماء الأدوات منفصلة. اربط كل أداة باتجاه البيانات، نوع النقل، ودورها الوحيد داخل النظام.
| التقنية | الاتجاه | النقل | الميزة الحاسمة | أفضل استخدام |
|---|---|---|---|---|
| HTTP/1.1 | Request/response | TCP | Persistent + عدة connections | Web APIs التقليدية |
| HTTP/2 | Request/response + streams | TCP | Multiplexing + HPACK | Modern web/gRPC transport |
| HTTP/3 | Request/response + streams | QUIC/UDP | Independent streams + migration | Mobile/lossy networks |
| SSE | Server → Client | HTTP | Text + auto-reconnect | Feeds/logs/dashboards |
| WebSocket | Bidirectional | TCP بعد Upgrade | Text/binary + low overhead | IoT/games/collaboration |
| WebRTC DataChannel | Peer ↔ Peer | ICE/DTLS/SCTP | Direct encrypted binary | Edge/P2P transfer |
| gRPC | Typed RPC + 4 streaming modes | HTTP/2 | Protobuf + codegen | Internal services |
| WebSub | Publisher → Hub → Subscriber | HTTP callbacks | Topic push + verification | Feed updates |
| الأداة | وظيفتها | الفكرة المميزة | ليست |
|---|---|---|---|
| NiFi | تحريك وربط وتحويل dataflows | FlowFile + visual processors | ليس durable event log |
| Kafka | Backbone للأحداث | Retention + offsets + fan-out | ليس ETL visual tool |
| Flink | Low-latency stateful streaming | Event Time + state + checkpoints | أعقد من batch بسيط |
| Spark | Unified batch/SQL/ML | Lazy DAG + executors + caching | ليس sub-ms serving |
| Hadoop | Distributed storage/batch foundation | HDFS + MapReduce + YARN | Disk-heavy latency |
| Hive | SQL/metadata فوق lake | Metastore + optimizer + ORC | ليس مخزن bytes بنفسه |
| Docker | Packaging على host | Image → Container | لا ينسق cluster وحده |
| Kubernetes | Cluster orchestration | Desired state + reconciliation | لا يبني image |
جاوب في ذهنك أولاً، ثم افتح البطاقة للتحقق.
الأسئلة موزّعة كما أعلن المدرّس: 60% للمحاضرات و40% للعروض.
يظهر شرح كل جزء فور تصحيحه، ويمكنك إعادته منفرداً.
قد توجد عدة إجابات صحيحة. كل اختيار خاطئ يلغي اختياراً صحيحاً داخل السؤال نفسه فقط.
إجابة صحيحة واحدة فقط لكل سؤال، كما وصف المدرّس.