لماذا يجب على كل Backend Engineer فهم 12-Factor App؟

في عالم البرمجة، أغلب المطورين يقضون وقتًا كبيرًا في كتابة الكود،
لكن المشاكل الحقيقية غالبًا لا تظهر أثناء التطوير…
بل تظهر بعد النشر في بيئة الإنتاج (Production).

مشاكل مثل:

  • التطبيق شغال عندك ومش شغال على السيرفر
  • إعدادات مختلفة بين dev و prod
  • صعوبة في التوسّع (scaling)
  • أعطال مفاجئة وقت الضغط

هنا بالضبط يظهر دور 12-Factor App.


ما هو 12-Factor App؟

12-Factor App هو مجموعة مبادئ (Best Practices) تم وضعها لبناء تطبيقات حديثة:

  • قابلة للتشغيل على السحابة
  • سهلة النشر
  • سهلة التوسّع
  • وأسهل في الصيانة

المفهوم ظهر من فريق Heroku،
لكن مع الوقت بقى Standard تفكير لأي تطبيق Backend حديث.

المهم هنا:
12-Factor App مش Framework
ومش مرتبط بلغة معينة
لكن طريقة تفكير في بناء التطبيقات.


لماذا 12-Factor App مهم لأي Backend Engineer؟

لأن Backend Engineer مش بس بيكتب API
هو مسؤول عن:

  • استقرار التطبيق
  • سهولة النشر
  • التعامل مع البيئات المختلفة
  • مشاكل الإنتاج

فهم 12-Factor App بيخليك:

  • تفكر من البداية بعقلية Production
  • تقلل المشاكل بعد النشر
  • تكتب كود يعيش ويكبر

شرح أهم مبادئ 12-Factor App (بأسلوب عملي)

1️⃣ Codebase – قاعدة كود واحدة

التطبيق لازم يكون له Repository واحد
ونفس الكود يشتغل في:

  • development
  • staging
  • production

الاختلاف يكون في الإعدادات فقط، مش في الكود.


2️⃣ Dependencies – الاعتماديات واضحة

كل المكتبات اللي التطبيق محتاجها لازم تكون:

  • مذكورة بوضوح
  • Managed عن طريق أداة رسمية

في Java مثلًا:

  • Maven
  • Gradle

ده يمنع مشاكل “شغال عندي بس”.


3️⃣ Config – الإعدادات خارج الكود

أي حاجة بتختلف من بيئة للتانية:

  • DB URL
  • Username / Password
  • API Keys

لازم تكون:

  • Environment Variables
  • أو Config Server

مش مكتوبة داخل الكود.


4️⃣ Backing Services – الخدمات الخارجية موارد قابلة للتبديل

قاعدة البيانات، الكاش، الرسائل…
كلها لازم تتعامل معاها كخدمات خارجية.

يعني تقدر تغيّر:

  • Database
  • Cache Provider

من غير ما تغيّر منطق التطبيق.


5️⃣ Build / Release / Run – مراحل واضحة

التطبيق يمر بثلاث مراحل:

  1. Build → تجميع الكود
  2. Release → ربط الإعدادات
  3. Run → التشغيل

ده أساس أي CI/CD Pipeline محترم.


6️⃣ Processes – التطبيق Stateless

التطبيق ما يعتمدش على:

  • Session محفوظة على السيرفر
  • ملفات محلية

أي حالة (state) تتحفظ في:

  • Database
  • Cache (Redis مثلًا)

وده شرط أساسي للتوسّع الأفقي.


7️⃣ Port Binding – التطبيق يشغّل نفسه

التطبيق لازم:

  • يشغّل السيرفر بنفسه
  • ويستمع على Port

زي Spring Boot أو Node.js
مش محتاج Web Server خارجي.


8️⃣ Concurrency – قابلية التوسّع

التطبيق يتوسّع عن طريق:

  • زيادة عدد النسخ
  • أو زيادة عدد الـ processes

مش عن طريق كود معقّد.


9️⃣ Disposability – إقلاع وإيقاف سريع

التطبيق لازم:

  • يبدأ بسرعة
  • يقفل بسرعة وبشكل آمن

ده مهم جدًا في:

  • Docker
  • Kubernetes
  • Auto-scaling

🔟 Dev / Prod Parity – تقارب البيئات

كل ما الفرق بين dev و prod يقل:

  • المشاكل تقل
  • المفاجآت تقل

استخدم نفس:

  • Database type
  • Config style
  • أدوات التشغيل

1️⃣1️⃣ Logs – السجلات كتدفّق بيانات

التطبيق يطبع logs على:

  • stdout

وتسيب:

  • ELK
  • CloudWatch
  • أي log system

تتعامل مع التخزين والتحليل.


1️⃣2️⃣ Admin Processes – مهام الإدارة منفصلة

زي:

  • Database migrations
  • Cleanup jobs

تتشغّل بنفس الكود ونفس الإعدادات
لكن كأوامر مستقلة.


12-Factor App و Spring Boot

Spring Boot بطبيعته قريب جدًا من 12-Factor App:

  • Externalized Configuration
  • Embedded Server
  • Stateless APIs
  • Easy CI/CD

لكن مش تلقائي
المطور هو اللي لازم يلتزم بالمبادئ.


الخلاصة

12-Factor App:

  • مش ترند
  • مش رفاهية
  • مش حاجة اختيارية

هو أساس تفكير لأي Backend Engineer عايز:

  • تطبيق مستقر
  • نشر سهل
  • مشاكل أقل في الإنتاج

📌 الكود الجيد مهم…
لكن التطبيق اللي يعيش في Production أهم.


Read more

ليه الناس بتستخدم الجافا

☕ أولًا: ما الذي يميّز جافا عن لغات البرمجة الأخرى؟ 🧱 1. الاستقرار والاعتمادية (Stability) * جافا معمولة للمؤسسات الكبيرة (Enterprise Systems) — زي البنوك، شركات الاتصالات، والحكومات. * الشركات دي بتحب استقرار الكود أكتر من أي شيء تاني. * أنظمة بتشتغل 10 و15 سنة على نفس الكود بدون مشاكل. 🎯 عشان كده معظم: * أنظمة

By mahmoud hassan

ايه هو ال spring batch واهم مميزاته

Spring Batch من الأدوات اللي بتبان “متخصصة” لكنها مهمة جدًا في عالم المؤسسات والبنوك والأنظمة الكبيرة اللي بتتعامل مع كميات ضخمة من البيانات. خلينا نبدأ من الأساس ونمشي خطوة بخطوة 👇 ⚙️ ما هو Spring Batch؟ Spring Batch هو إطار عمل (Framework) من Spring مصمم لمعالجة البيانات الدفعيّة (Batch Processing)

By mahmoud hassan