مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
لو الـ Redis cache بتاعك بيخلص فجأة ولقيت 4,200 طلب يضربوا PostgreSQL في ثانيتين، الـ DB مش غلطانة. الظاهرة اسمها Cache Stampede، وحلها مش زيادة الذاكرة ولا scaling. مقال للمتوسط بمثال شباك التذاكر للمبتدئ، تعريف علمي من ورقة Vattani 2015، 3 حلول بكود Python شغّال على redis-py 5.0 و PostgreSQL 16، أرقام مقاسة من إنتاج e-commerce بـ 4,200 طلب/ثانية (P99 من 6,200ms لـ 18ms)، 4 trade-offs، ومتى الحلول دي تكون مبالغة هندسية.
لو السيرفر بيرد 4 ثواني على endpoint بسيط و CPU بيقول 30%، Node.js مش بطيء — فيه عملية واحدة بتقفل event loop. مقال للمتوسط بمثال المخبز للمبتدئ، تعريف علمي من توثيق Node.js الرسمي و libuv، كود قياس delay بـ perf_hooks وحل بـ Worker Threads على Node.js 22، أرقام مقاسة على endpoint توقيع PDF (P95 من 4,180ms لـ 92ms)، 4 trade-offs، ومتى Worker Threads بتزود تعقيد بدون فايدة.
لو dashboard المنتجات بيرد في 6 ثواني وفاتورة DB قفزت 3x من غير ما traffic يزيد، الاحتمال الأكبر إن الـ ORM بيعمل 1,247 استعلام على كل request بدل واحد. مقال للمتوسط بمثال البيتزا للمبتدئ، تعريف علمي من توثيق Django و Hibernate، كود Prisma 5.18 شغّال على PostgreSQL 16 يقيس الفرق بين 4,200ms و 38ms، طريقة كشف المشكلة بـ pg_stat_statements، 3 trade-offs خفية في eager loading، ومتى include بيكلّف أكتر ما بيوفّر.
لو dashboard المبيعات بيحسب JOIN على 18 مليون صف كل ما المدير يفتح الصفحة، إنت بتدفع 4 دقائق انتظار + ضغط على الـ DB في كل زيارة. Materialized View بيحفظ نتيجة الاستعلام على القرص، فالـ dashboard بيرد في 30 مللي ثانية بدل 240 ثانية. مقال للمتوسط بمثال محل العصير للمبتدئ، تعريف علمي من توثيق PostgreSQL، كود قابل للنسخ على PostgreSQL 16، REFRESH CONCURRENTLY بدون قفل، أرقام مقاسة من إنتاج، 4 trade-offs حقيقية، ومتى لا تستخدمه أصلاً.
لو سيرفرك لسه شغّال على Gzip ومقتنع إنه أفضل ضغط ممكن، بتدفع 21% bandwidth زيادة من غير سبب. Brotli على نفس الـ JS bundle بينزّل الحجم من 142KB لـ 112KB بسطرين في NGINX. مقال للمستوى المتوسط بمثال شنطة السفر للمبتدئ، تعريف علمي من RFC 7932، إعداد NGINX 1.25 شغّال، أرقام مقاسة من Cloudflare على 100 ألف موقع، 4 trade-offs حقيقية، ومتى لا تستخدم Brotli أصلاً.
لو NGINX بتاعك لسه شغّال gzip بس، JavaScript bundle بحجم 1.1MB بيتحوّل لزائر مصري على 4G في 1.42 ثانية. Brotli بسطر تكوين بيخلّيه ينزل في 1.08 ثانية ويوفّر 110GB bandwidth شهريًا. مقال للمتوسط بمثال شنط السفر للمبتدئ، تعريف علمي من RFC 7932، إعداد NGINX 1.25 شغّال مع ngx_brotli، أرقام مقاسة على bundle React 2.8MB من زوار الخليج، 4 trade-offs حقيقية، ومتى Gzip لسه أنسب.
لو السيرفر فيه 64GB RAM والتطبيق بيرمي "too many connections" عند 100 connection، المشكلة مش في حجم الـ DB. كل connection في PostgreSQL بياكل 9-12 ميجا. PgBouncer بيخلّي 1000 طلب من التطبيق يمشوا على 25 connection فعلي، يوفّر 86% من ذاكرة DB، وينزّل P95 من 142ms لـ 38ms. مقال للمتوسط بمثال شبّاك التذاكر للمبتدئ، تعريف دقيق للـ process-per-connection، إعداد PgBouncer 1.22 شغّال، أرقام مقاسة من إنتاج، 4 trade-offs حقيقية، ومتى لا تستخدمه أصلاً.
لو PostgreSQL بتاعك بياكل 8GB RAM مع 200 connection فقط، المشكلة مش في حجم البيانات. كل connection بيفتح process كامل بيستهلك 10MB ذاكرة. pgbouncer بيخدم 1000 client متزامن بـ 50MB ذاكرة بدلاً من 10GB. مقال للمتوسط بمثال موظف البنك للمبتدئ، تعريف علمي لـ process-per-connection model من توثيق PostgreSQL، إعداد pgbouncer 1.22 شغّال، أرقام مقاسة على PostgreSQL 16، 4 trade-offs حقيقية، ومتى لا تستخدمه أصلاً.
صورة LCP candidate لو ما اتحطّش عليها fetchpriority=high بتنزل في الموجة الثانية مع باقي الصور غير المهمة. سطر HTML واحد بيخلّي LCP ينزل من 2.4 ثانية لـ 1.6 ثانية. مقال للمتوسط بمثال طابور الكاشير، تعريف علمي من HTML Living Standard، كود img و link rel=preload شغّال، أرقام مقاسة من Etsy وShopify، 4 trade-offs حقيقية، وحالات لا تستخدم فيها.