Your Journey to DevOps Mastery 💯
Follow this comprehensive roadmap to become a skilled DevOps engineer.
Each stage includes interactive skills with curated resources and hands-on learning paths.
https://devops-daily.com/roadmap
❤3👍1
دردشة سريعة عن الـ API Gateway ⚡️
.
.
لو بتشتغل على مشروع كبير أو على بيئة Microservices معقدة، أكيد هتحتاج تتعامل مع الـ API Gateway، لأنه ببساطة بيعمل كـ "بوابة" أو وسيط بين المستخدمين (أو الـ Clients) وبين مجموعة الخدمات اللي بيقدمها التطبيق.
———
📌 يعني إيه API Gateway؟
خلينا نقول إنك بتشتغل على مشروع كبير زي موقع بيع منتجات، وفيه خدمات كتير مستقلة، زي خدمة للمشتريات، خدمة للدفع، خدمة للمخزون، وخدمة للملف الشخصي.
الـ API Gateway هو الجزء اللي بيستلم الطلبات من الـ Clients (زي تطبيق الموبايل أو الويب) ويوجهها للـ Microservice الصحيحة.
يعني بدل ما التطبيق يبعت طلب مباشر لكل خدمة ويضيع وقت في فهم مسارات كتير، الـ API Gateway بيستقبل الطلب وينفذه ويبعت البيانات للي عاوزها.
———
📌 وظائف الـ API Gateway؟
✅ توجيه الطلبات: لما ييجي طلب من العميل، الـ API Gateway بيختار الخدمة المناسبة اللي هتقدر تستجيب للطلب ده ويبعته لها.
✅ توحيد البيانات: لو عندك خدمات مختلفة والعميل محتاج بيانات من أكتر من خدمة، الـ API Gateway بيجمع البيانات دي كلها ويرجعها للعميل في رد واحد.
✅ التحكم في الأمان: بيسمح لك تعمل قواعد الأمان زي التحقق من الهويات (Authentication) والترخيص (Authorization)، عشان تضمن إن الطلبات اللي جايه كلها من مصادر موثوق فيها.
✅ التحكم في المعدل (Rate Limiting): تقدر من خلاله تحدد عدد الطلبات اللي ممكن يجريها العميل في وقت معين، بحيث تحمي خدماتك من أي ضغط غير طبيعي أو هجمات زي DDoS.
✅ التوجيه الديناميكي (Dynamic Routing): لو عندك إصدارات مختلفة من نفس الخدمة، تقدر تحدد أي إصدار يستخدمه الـ Client أو تغير التوجيه حسب الوقت أو حسب الـ Load.
✅ التحسين والأداء (Caching): ممكن كمان يقوم بعمل Cache للطلبات اللي بيتكرر استخدامها، وده بيساعد في تخفيف الحمل على الخدمات.
———
📌 ليه مهم نستخدم الـ API Gateway؟
لما بيكون عندك تطبيق بيدير أكتر من خدمة، التعامل المباشر بين العميل وكل خدمة على حدة ممكن يبقى معقد ويتطلب وقت طويل، وده بيأثر على أداء التطبيق.
هنا بقى بييجي دور الـ API Gateway اللي بيسهل التعامل ويوفر طريقة منظمة وبسيطة للتفاعل مع الخدمات.
كمان، لو محتاج تطبق سياسات الأمان بشكل موحد، أو محتاج تعمل Analytics للطلبات اللي بتيجي، يبقى الـ API Gateway هو المكان الصح اللي تعمل فيه كل ده، لأنه نقطة التحكم الرئيسية اللي بتشوف وتتحكم في كل الطلبات اللي جاية ورايحة بين العميل والخدمات.
———
فيه أدوات كتير تقدر تستخدمها كـ API Gateway، زي:
⚙️ Kong
⚙️ NGINX
⚙️ AWS API Gateway
⚙️ Zuul
كل أداة من دول بتقدم مزايا مختلفة حسب احتياجات المشروع، وعادةً بنختار حسب حجم المشروع، الأمان المطلوب، وسرعة الاستجابة اللي محتاجينها.
———
وفقكم الله لكل خير 🌿
.
.
لو بتشتغل على مشروع كبير أو على بيئة Microservices معقدة، أكيد هتحتاج تتعامل مع الـ API Gateway، لأنه ببساطة بيعمل كـ "بوابة" أو وسيط بين المستخدمين (أو الـ Clients) وبين مجموعة الخدمات اللي بيقدمها التطبيق.
———
📌 يعني إيه API Gateway؟
خلينا نقول إنك بتشتغل على مشروع كبير زي موقع بيع منتجات، وفيه خدمات كتير مستقلة، زي خدمة للمشتريات، خدمة للدفع، خدمة للمخزون، وخدمة للملف الشخصي.
الـ API Gateway هو الجزء اللي بيستلم الطلبات من الـ Clients (زي تطبيق الموبايل أو الويب) ويوجهها للـ Microservice الصحيحة.
يعني بدل ما التطبيق يبعت طلب مباشر لكل خدمة ويضيع وقت في فهم مسارات كتير، الـ API Gateway بيستقبل الطلب وينفذه ويبعت البيانات للي عاوزها.
———
📌 وظائف الـ API Gateway؟
✅ توجيه الطلبات: لما ييجي طلب من العميل، الـ API Gateway بيختار الخدمة المناسبة اللي هتقدر تستجيب للطلب ده ويبعته لها.
✅ توحيد البيانات: لو عندك خدمات مختلفة والعميل محتاج بيانات من أكتر من خدمة، الـ API Gateway بيجمع البيانات دي كلها ويرجعها للعميل في رد واحد.
✅ التحكم في الأمان: بيسمح لك تعمل قواعد الأمان زي التحقق من الهويات (Authentication) والترخيص (Authorization)، عشان تضمن إن الطلبات اللي جايه كلها من مصادر موثوق فيها.
✅ التحكم في المعدل (Rate Limiting): تقدر من خلاله تحدد عدد الطلبات اللي ممكن يجريها العميل في وقت معين، بحيث تحمي خدماتك من أي ضغط غير طبيعي أو هجمات زي DDoS.
✅ التوجيه الديناميكي (Dynamic Routing): لو عندك إصدارات مختلفة من نفس الخدمة، تقدر تحدد أي إصدار يستخدمه الـ Client أو تغير التوجيه حسب الوقت أو حسب الـ Load.
✅ التحسين والأداء (Caching): ممكن كمان يقوم بعمل Cache للطلبات اللي بيتكرر استخدامها، وده بيساعد في تخفيف الحمل على الخدمات.
———
📌 ليه مهم نستخدم الـ API Gateway؟
لما بيكون عندك تطبيق بيدير أكتر من خدمة، التعامل المباشر بين العميل وكل خدمة على حدة ممكن يبقى معقد ويتطلب وقت طويل، وده بيأثر على أداء التطبيق.
هنا بقى بييجي دور الـ API Gateway اللي بيسهل التعامل ويوفر طريقة منظمة وبسيطة للتفاعل مع الخدمات.
كمان، لو محتاج تطبق سياسات الأمان بشكل موحد، أو محتاج تعمل Analytics للطلبات اللي بتيجي، يبقى الـ API Gateway هو المكان الصح اللي تعمل فيه كل ده، لأنه نقطة التحكم الرئيسية اللي بتشوف وتتحكم في كل الطلبات اللي جاية ورايحة بين العميل والخدمات.
———
فيه أدوات كتير تقدر تستخدمها كـ API Gateway، زي:
⚙️ Kong
⚙️ NGINX
⚙️ AWS API Gateway
⚙️ Zuul
كل أداة من دول بتقدم مزايا مختلفة حسب احتياجات المشروع، وعادةً بنختار حسب حجم المشروع، الأمان المطلوب، وسرعة الاستجابة اللي محتاجينها.
———
وفقكم الله لكل خير 🌿
❤7
دردشة سريعة عن مفهوم الـ ACID في الـ Database ⚡️
.
.
تخيل إنك شغال على system ضخم زي تطبيق بنكي أو موقع بيع أونلاين…
في اللحظة اللي المستخدم بيحوّل فيها فلوس أو بيأكد عملية شراء، لازم تكون متأكد إن البيانات دي محفوظة صح، ومفيش أي احتمال يحصل فيها خلل أو تضارب، حتى لو السيرفر وقع أو الكهرباء قطعت. ⚠️
وهنا ييجي دور الـ ACID وهو ده العمود الفقري اللي بيخلي الـ Database تكون ثابتة، موثوقة، ومتوقعة السلوك في كل الحالات، سواء كان عندك عملية واحدة بسيطة أو آلاف الـ transactions في نفس الثانية.
الـ ACID بيحط أربع قواعد أساسية بتخلي أي Database system يعرف يتصرف وقت المشاكل ويحافظ على البيانات من غير ما يحصل chaos أو data corruption.
———
يعني لو عندك transaction بتنقل فلوس من حساب لحساب:
- تسحب 1000 جنيه من حساب A
- وتضيف 1000 لحساب B
لو أول خطوة نجحت والتانية فشلت لأي سبب (مثلًا السيرفر وقع)، المفروض الـ Database ترجع كل حاجة زي الأول، كأن العملية محصلتش.
———
الـ Consistency معناها إن الـ Database تفضل دايمًا في state صحيحة ومظبوطة.
يعني كل القواعد (constraints, rules, triggers) اللي أنت محددها لازم تفضل متطبقة بعد أي عملية.
مثلًا: لو عندك rule بيقول إن الرصيد مينفعش يكون بالسالب، فـ بعد أي transaction لازم الـ DB تفضل محافظة على القاعدة دي.
لو حصل violation للقواعد دي، العملية كلها تتلغي.
———
تخيل معايا كذا transaction شغالين في نفس الوقت...
واحد بيضيف بيانات، والتاني بيعدّل، والتالت بيقرأ.
لو مفيش Isolation، الدنيا هتبقى فوضى، وكل transaction هيشوف الـ data وهي لسه بتتغير!
لكن مع وجود الـ Isolation، كل transaction بتتعامل كأنها العملية الوحيدة اللي بتتنفذ.
يعني حتى لو كذا transaction شغالين في نفس اللحظة، النتائج اللي بيشوفوها مضمونة ومفيهاش تداخل أو corruption.
وطبعًا فيه مستويات مختلفة للـ Isolation (زي Read Uncommitted, Read Committed, Repeatable Read, Serializable)، وكل واحدة لها trade-offs بين الأداء والدقة.
———
الـ Durability معناها إن بمجرد ما الـ Database تقولك "تمت العملية بنجاح"، يبقى خلاص الـ data دي محفوظة ومش هتضيع حتى لو السيرفر وقع أو الكهرباء قطعت.
إزاي؟
لأن الـ DB بتكتب التغييرات على الـ disk (أو الـ log files) قبل ما تقولك العملية نجحت، علشان تقدر تسترجعها لو حصل أي failure.
———
وفقكم الله لكل خير 🌿
.
.
تخيل إنك شغال على system ضخم زي تطبيق بنكي أو موقع بيع أونلاين…
في اللحظة اللي المستخدم بيحوّل فيها فلوس أو بيأكد عملية شراء، لازم تكون متأكد إن البيانات دي محفوظة صح، ومفيش أي احتمال يحصل فيها خلل أو تضارب، حتى لو السيرفر وقع أو الكهرباء قطعت. ⚠️
وهنا ييجي دور الـ ACID وهو ده العمود الفقري اللي بيخلي الـ Database تكون ثابتة، موثوقة، ومتوقعة السلوك في كل الحالات، سواء كان عندك عملية واحدة بسيطة أو آلاف الـ transactions في نفس الثانية.
الـ ACID بيحط أربع قواعد أساسية بتخلي أي Database system يعرف يتصرف وقت المشاكل ويحافظ على البيانات من غير ما يحصل chaos أو data corruption.
———
📌 أولًا: Atomicity
يعني لو عندك transaction بتنقل فلوس من حساب لحساب:
- تسحب 1000 جنيه من حساب A
- وتضيف 1000 لحساب B
لو أول خطوة نجحت والتانية فشلت لأي سبب (مثلًا السيرفر وقع)، المفروض الـ Database ترجع كل حاجة زي الأول، كأن العملية محصلتش.
———
📌 ثانيًا: Consistency
الـ Consistency معناها إن الـ Database تفضل دايمًا في state صحيحة ومظبوطة.
يعني كل القواعد (constraints, rules, triggers) اللي أنت محددها لازم تفضل متطبقة بعد أي عملية.
مثلًا: لو عندك rule بيقول إن الرصيد مينفعش يكون بالسالب، فـ بعد أي transaction لازم الـ DB تفضل محافظة على القاعدة دي.
لو حصل violation للقواعد دي، العملية كلها تتلغي.
———
ثالثًا: Isolation
تخيل معايا كذا transaction شغالين في نفس الوقت...
واحد بيضيف بيانات، والتاني بيعدّل، والتالت بيقرأ.
لو مفيش Isolation، الدنيا هتبقى فوضى، وكل transaction هيشوف الـ data وهي لسه بتتغير!
لكن مع وجود الـ Isolation، كل transaction بتتعامل كأنها العملية الوحيدة اللي بتتنفذ.
يعني حتى لو كذا transaction شغالين في نفس اللحظة، النتائج اللي بيشوفوها مضمونة ومفيهاش تداخل أو corruption.
وطبعًا فيه مستويات مختلفة للـ Isolation (زي Read Uncommitted, Read Committed, Repeatable Read, Serializable)، وكل واحدة لها trade-offs بين الأداء والدقة.
———
رابعًا: Durability
الـ Durability معناها إن بمجرد ما الـ Database تقولك "تمت العملية بنجاح"، يبقى خلاص الـ data دي محفوظة ومش هتضيع حتى لو السيرفر وقع أو الكهرباء قطعت.
إزاي؟
لأن الـ DB بتكتب التغييرات على الـ disk (أو الـ log files) قبل ما تقولك العملية نجحت، علشان تقدر تسترجعها لو حصل أي failure.
———
وفقكم الله لكل خير 🌿
❤5
Stop React apps from crashing with Error Boundaries. 💯
Catch errors like a pro and show friendly fallbacks instead of broken screens.
Catch errors like a pro and show friendly fallbacks instead of broken screens.
❤3
الفرق بين الـ Monorepo والـ Multirepo 🔻
.
.
تخيل أنك شغال على مشروع ضخم، عندك أكتر من فريق، وكل فريق بيشتغل على جزء مختلف. فجأة، تبدأ المشاكل تظهر: كود مكرر، صعوبة في التعديلات، تعارض بين الفرق، وأوقات ضايعة على الـ builds والـ pipelines.
المشكلة هنا ممكن تكون في الطريقة اللي بتنظم بها الكود بتاعك. 💡
هنا تبدأ تسأل نفسك: تختار Monorepo ولا Multirepo؟
تعال نوضح الفرق بينهم وإمتى تختار الطريقة المناسبة...
———
📌 أولًا: يعني إيه Monorepo؟
الـ Monorepo ببساطة هي إنك تحط كل الكود الخاص بالمشروع بتاعك، بكل الـ components أو الـ modules اللي فيه، داخل Repository واحد.
يعني حتى لو عندك أكتر من خدمة (microservices) أو أكتر من مكتبة أو أكتر من تطبيق مرتبطين ببعض، كله بيكون في مكان واحد.
———
📍 مميزات الـ Monorepo:
- سهولة إدارة الكود:
كل حاجة في مكان واحد، فلو عايز تعمل تغييرات على أكتر من جزء، هتبقى شايف الصورة الكبيرة بسهولة.
- إعادة استخدام الكود (Code Reusability):
لو فيه مكتبة أو جزء معين من الكود محتاج تستخدمه في أكتر من module، تقدر تعمله بسهولة من غير duplication.
- تنسيق أفضل بين الفرق:
كل فريق شايف الكود بتاع باقي الفرق، فده بيسهل التعاون بينهم وبيقلل تعارض التعديلات (conflicts).
- تكامل أفضل بين الأدوات:
زي الـ CI/CD (Continuous Integration/Continuous Deployment) اللي بيشتغل بسهولة على مشروع واحد بدل ما يتقسم على أكتر من repository.
———
📍 عيوب الـ Monorepo:
- الحجم الكبير للـ repo:
مع مرور الوقت وعدد المساهمين الكبير، حجم الـ repo بيكبر وده ممكن يبطّأ العمليات زي cloning أو حتى الـ builds.
- التعقيد في إدارة الصلاحيات:
صعب تقول إن فلان يقدر يشتغل على جزء معين بس من غير ما يشوف الباقي.
- مشاكل مع الـ Tools:
لو مش عندك أدوات قوية لإدارة الـ monorepo، ممكن تواجه مشاكل في التنظيم وعملية الـ build.
———
📌 ثانيًا: يعني إيه Multirepo؟
على العكس تمامًا، الـ Multirepo معناها إن كل جزء أو module من المشروع يكون في Repository خاص به. يعني كل module بيبقى مستقل بذاته وكأنه مشروع لوحده.
———
📍 مميزات الـ Multirepo:
- كل module له حياته الخاصة، وده بيخلي إدارة كل جزء مستقلة وأسهل لبعض الفرق.
- تقدر تحدد مين يشتغل على إيه بناءً على الـ repo اللي عندهم أكسس عليه.
- لو فيه module أو خدمة مش مرتبط بشكل مباشر، مش محتاج تبني كل المشروع، بس تبني الجزء اللي محتاجه.
- كل جزء بيكون صغير ومستقل، فده بيخلي العمليات زي cloning أسرع وأسهل.
———
📍 عيوب الـ Multirepo:
- تكرار الكود:
لو فيه أكتر من module بيحتاج نفس الكود، ممكن تضطر تكرره أو تحط مكتبة منفصلة ليه.
- تعقيد في التنسيق بين الفرق:
التعاون بين الفرق بيبقى أصعب، وخصوصًا لما يكون فيه dependencies كتير بين الـ modules
- تكامل معقد للـ CI/CD:
عشان كل جزء في Repository مختلف، هتحتاج إعدادات أكتر للـ pipelines عشان كل حاجة تشتغل مع بعض.
- لو عندك تغيير ضخم بيأثر على أكتر من module، هتحتاج تدخل على كذا repo وتعدل في كل واحد لوحده.
.
.
تخيل أنك شغال على مشروع ضخم، عندك أكتر من فريق، وكل فريق بيشتغل على جزء مختلف. فجأة، تبدأ المشاكل تظهر: كود مكرر، صعوبة في التعديلات، تعارض بين الفرق، وأوقات ضايعة على الـ builds والـ pipelines.
المشكلة هنا ممكن تكون في الطريقة اللي بتنظم بها الكود بتاعك. 💡
هنا تبدأ تسأل نفسك: تختار Monorepo ولا Multirepo؟
تعال نوضح الفرق بينهم وإمتى تختار الطريقة المناسبة...
———
📌 أولًا: يعني إيه Monorepo؟
الـ Monorepo ببساطة هي إنك تحط كل الكود الخاص بالمشروع بتاعك، بكل الـ components أو الـ modules اللي فيه، داخل Repository واحد.
يعني حتى لو عندك أكتر من خدمة (microservices) أو أكتر من مكتبة أو أكتر من تطبيق مرتبطين ببعض، كله بيكون في مكان واحد.
———
📍 مميزات الـ Monorepo:
- سهولة إدارة الكود:
كل حاجة في مكان واحد، فلو عايز تعمل تغييرات على أكتر من جزء، هتبقى شايف الصورة الكبيرة بسهولة.
- إعادة استخدام الكود (Code Reusability):
لو فيه مكتبة أو جزء معين من الكود محتاج تستخدمه في أكتر من module، تقدر تعمله بسهولة من غير duplication.
- تنسيق أفضل بين الفرق:
كل فريق شايف الكود بتاع باقي الفرق، فده بيسهل التعاون بينهم وبيقلل تعارض التعديلات (conflicts).
- تكامل أفضل بين الأدوات:
زي الـ CI/CD (Continuous Integration/Continuous Deployment) اللي بيشتغل بسهولة على مشروع واحد بدل ما يتقسم على أكتر من repository.
———
📍 عيوب الـ Monorepo:
- الحجم الكبير للـ repo:
مع مرور الوقت وعدد المساهمين الكبير، حجم الـ repo بيكبر وده ممكن يبطّأ العمليات زي cloning أو حتى الـ builds.
- التعقيد في إدارة الصلاحيات:
صعب تقول إن فلان يقدر يشتغل على جزء معين بس من غير ما يشوف الباقي.
- مشاكل مع الـ Tools:
لو مش عندك أدوات قوية لإدارة الـ monorepo، ممكن تواجه مشاكل في التنظيم وعملية الـ build.
———
📌 ثانيًا: يعني إيه Multirepo؟
على العكس تمامًا، الـ Multirepo معناها إن كل جزء أو module من المشروع يكون في Repository خاص به. يعني كل module بيبقى مستقل بذاته وكأنه مشروع لوحده.
———
📍 مميزات الـ Multirepo:
- كل module له حياته الخاصة، وده بيخلي إدارة كل جزء مستقلة وأسهل لبعض الفرق.
- تقدر تحدد مين يشتغل على إيه بناءً على الـ repo اللي عندهم أكسس عليه.
- لو فيه module أو خدمة مش مرتبط بشكل مباشر، مش محتاج تبني كل المشروع، بس تبني الجزء اللي محتاجه.
- كل جزء بيكون صغير ومستقل، فده بيخلي العمليات زي cloning أسرع وأسهل.
———
📍 عيوب الـ Multirepo:
- تكرار الكود:
لو فيه أكتر من module بيحتاج نفس الكود، ممكن تضطر تكرره أو تحط مكتبة منفصلة ليه.
- تعقيد في التنسيق بين الفرق:
التعاون بين الفرق بيبقى أصعب، وخصوصًا لما يكون فيه dependencies كتير بين الـ modules
- تكامل معقد للـ CI/CD:
عشان كل جزء في Repository مختلف، هتحتاج إعدادات أكتر للـ pipelines عشان كل حاجة تشتغل مع بعض.
- لو عندك تغيير ضخم بيأثر على أكتر من module، هتحتاج تدخل على كذا repo وتعدل في كل واحد لوحده.
❤4
Optimizing Streams in JavaScript 💯
Streams improve performance for large data processing, but require careful optimization.
❤2