دردشة سريعة عن الـ 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
فيه أدوات كتير تقدر تستخدمها كـ 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
فيه أدوات كتير تقدر تستخدمها كـ API Gateway، زي:
⚙️ Kong
⚙️ NGINX
⚙️ AWS API Gateway
⚙️ Zuul
كل أداة من دول بتقدم مزايا مختلفة حسب احتياجات المشروع، وعادةً بنختار حسب حجم المشروع، الأمان المطلوب، وسرعة الاستجابة اللي محتاجينها.
الموقع ده هيساعدك تقوي مهاراتك في عالم الـ System Design 💯
.
.
Practice High-Level Design (HLD) with our interactive whiteboard and get AI-powered feedback.
———
https://www.scalemock.com/hld
.
.
System Design Problems 💯
Practice High-Level Design (HLD) with our interactive whiteboard and get AI-powered feedback.
———
https://www.scalemock.com/hld
البرمجة الوظيفية (Functional Programming)
.
.
البرمجة الوظيفية (Functional Programming) هي واحدة من الأنماط البرمجية اللي بتختلف عن النمط التقليدي اللي بنسميه الـ Imperative Programming.
الفكرة الأساسية في البرمجة الوظيفية إنها بتركز على استخدام الدوال (functions) كعنصر أساسي في كتابة الكود، وبتعتمد على فكرة إن الكود يكون واضح وسهل التتبع، بدون ما نغير الـ state أو البيانات بشكل مباشر.
———
📌 إيه اللي بيميز البرمجة الوظيفية؟
في البرمجة الوظيفية، بنستخدم حاجة اسمها pure functions، ودي دوال بتستقبل مدخلات (inputs) وتطلع مخرجات (outputs) من غير ما تأثر على أي حاجة خارج الدالة نفسها.
يعني الدالة اللي بتشتغل بالطريقة دي، كل مرة تستخدمها بنفس المدخلات، هتطلع نفس النتيجة. ده بيسهل جدًا اختبار الكود والتأكد إنه شغال صح.
كمان في البرمجة الوظيفية بنبعد تمامًا عن فكرة side effects، اللي هي تغيير في البيانات أو الـ state خارج الدالة. وده بيدي الكود ميزة إنه يبقى قابل للتوقع (predictable) وسهل الصيانة.
———
📌 الـ Higher-Order Functions
البرمجة الوظيفية بتعتمد بشكل كبير على نوع خاص من الدوال اسمه Higher-Order Functions. الدوال دي بتستقبل دوال تانية كمدخلات أو بتطلع دوال كمخرجات.
مثلًا في JavaScript عندنا دوال زي map, filter, reduce، ودي أمثلة ممتازة على الـ Higher-Order Functions.
الدوال دي بتخليك تقدر تعمل عمليات معقدة على البيانات بطريقة مختصرة ومنظمة، وبدون ما تكتب كود كتير. مثلًا لو عاوز تعدل قيم معينة في Array، بدل ما تستخدم for loop، ممكن تستخدم map واللي بتخليك تقدر تعيد بناء الـ Array بطريقة أسرع وأسهل.
———
📌 الـ Immutable Data
واحدة من المفاهيم الأساسية كمان في البرمجة الوظيفية هي immutable data، يعني البيانات مبتتغيرش. بدل ما نعدل على نفس الـ Array أو الـ Object، بنرجع نسخة جديدة من البيانات بعد التعديل.
ده بيدي الكود أمان أكتر، وبيمنع الأخطاء اللي ممكن تحصل لما البيانات تتغير بطريقة غير متوقعة.
البرمجة الوظيفية بتتطبق في لغات زي Haskell وElm بشكل كبير، لكن الأفكار دي كمان ممكن تتطبق في لغات زي JavaScript, Python وحتى Java و#C.
———
📌 ليه تستخدم البرمجة الوظيفية؟
- الكود بيكون واضح جدًا وسهل التتبع.
- التقليل من الأخطاء بفضل استخدام الـ pure functions.
- سهولة اختبار الكود.
- دعم الـ parallelism والـ concurrency بشكل أفضل.
———
وفقكم الله لكل خير ☘️
.
.
البرمجة الوظيفية (Functional Programming) هي واحدة من الأنماط البرمجية اللي بتختلف عن النمط التقليدي اللي بنسميه الـ Imperative Programming.
الفكرة الأساسية في البرمجة الوظيفية إنها بتركز على استخدام الدوال (functions) كعنصر أساسي في كتابة الكود، وبتعتمد على فكرة إن الكود يكون واضح وسهل التتبع، بدون ما نغير الـ state أو البيانات بشكل مباشر.
———
📌 إيه اللي بيميز البرمجة الوظيفية؟
في البرمجة الوظيفية، بنستخدم حاجة اسمها pure functions، ودي دوال بتستقبل مدخلات (inputs) وتطلع مخرجات (outputs) من غير ما تأثر على أي حاجة خارج الدالة نفسها.
يعني الدالة اللي بتشتغل بالطريقة دي، كل مرة تستخدمها بنفس المدخلات، هتطلع نفس النتيجة. ده بيسهل جدًا اختبار الكود والتأكد إنه شغال صح.
كمان في البرمجة الوظيفية بنبعد تمامًا عن فكرة side effects، اللي هي تغيير في البيانات أو الـ state خارج الدالة. وده بيدي الكود ميزة إنه يبقى قابل للتوقع (predictable) وسهل الصيانة.
———
📌 الـ Higher-Order Functions
البرمجة الوظيفية بتعتمد بشكل كبير على نوع خاص من الدوال اسمه Higher-Order Functions. الدوال دي بتستقبل دوال تانية كمدخلات أو بتطلع دوال كمخرجات.
مثلًا في JavaScript عندنا دوال زي map, filter, reduce، ودي أمثلة ممتازة على الـ Higher-Order Functions.
الدوال دي بتخليك تقدر تعمل عمليات معقدة على البيانات بطريقة مختصرة ومنظمة، وبدون ما تكتب كود كتير. مثلًا لو عاوز تعدل قيم معينة في Array، بدل ما تستخدم for loop، ممكن تستخدم map واللي بتخليك تقدر تعيد بناء الـ Array بطريقة أسرع وأسهل.
———
📌 الـ Immutable Data
واحدة من المفاهيم الأساسية كمان في البرمجة الوظيفية هي immutable data، يعني البيانات مبتتغيرش. بدل ما نعدل على نفس الـ Array أو الـ Object، بنرجع نسخة جديدة من البيانات بعد التعديل.
ده بيدي الكود أمان أكتر، وبيمنع الأخطاء اللي ممكن تحصل لما البيانات تتغير بطريقة غير متوقعة.
البرمجة الوظيفية بتتطبق في لغات زي Haskell وElm بشكل كبير، لكن الأفكار دي كمان ممكن تتطبق في لغات زي JavaScript, Python وحتى Java و#C.
———
📌 ليه تستخدم البرمجة الوظيفية؟
- الكود بيكون واضح جدًا وسهل التتبع.
- التقليل من الأخطاء بفضل استخدام الـ pure functions.
- سهولة اختبار الكود.
- دعم الـ parallelism والـ concurrency بشكل أفضل.
———
وفقكم الله لكل خير ☘️
👍2
أدوات_الذكاء_الإصطناعي_مرتبة_حسب_الإستخدام.pdf
9.6 MB
ملف رائع .. كل أدوات الذكاء الإصطناعي مرتبة حسب الإستخدام باللغة العربية 💯
🔥1
هل تعلم:
يوجد محرر أكواد باسم VSCodium ... وهو نفسه محرر VsCode، الفرق الوحيد أن خدمات مايكروسوفت منزوعة من هذا الأخير.
كما يتوفر على بعض الإضافات مفتوحة المصدر التي قد لا تكون موجودة على متجر VsCode العادي.
رابط المحرر: https://vscodium.com/
يوجد محرر أكواد باسم VSCodium ... وهو نفسه محرر VsCode، الفرق الوحيد أن خدمات مايكروسوفت منزوعة من هذا الأخير.
كما يتوفر على بعض الإضافات مفتوحة المصدر التي قد لا تكون موجودة على متجر VsCode العادي.
رابط المحرر: https://vscodium.com/
👏2
دردشة سريعة عن Docker 💯
.
.
تعال ندردش شوية عن Docker بطريقة بسيطة ونفهم هو ليه شيء أساسي في تطوير التطبيقات...
———
📌 إيه هو Docker؟
ببساطة، Docker هو منصة بتسمح لك تبني، تختبر، وتشغل تطبيقاتك في حاجة اسمها Container.
طيب يعني إيه Container؟
فكر فيها زي علبة بتحط فيها التطبيق بتاعك بكل المكونات اللي محتاجها عشان يشتغل: الـ Code، الـ Libraries، والـ Dependencies اللي مستخدمها، والـ System Configurations.
الفكرة الأساسية إن الـ Container ده بيشتغل زي ما هو على أي جهاز أو سيرفر، بغض النظر عن الـ Operating System أو الـ Environment اللي عليه. يعني لو التطبيق شغال عندك على جهازك الشخصي، هيشتغل بالضبط بنفس الطريقة على أي سيرفر تاني من غير مشاكل.
———
📌 ليه Docker مهم في مجال السوفتوير؟
⚡️ التوافق بين البيئات المختلفة:
من أكتر المشاكل اللي معظمنا بيقابلها إنك تشتغل على مشروع على جهازك وكل حاجة تبقى تمام، لكن أول ما تيجي ترفعه على السيرفر، تبدأ المشاكل...
ممكن الـ Libraries أو الـ Environment اللي على السيرفر تكون مختلفة عن جهازك، وده يخلي حاجات كتير تبطل تشتغل.
وهنا بييجي دور Docker، من خلال الـ Container اللي بيبنيها، كل حاجة بتكون جاهزة ومتوافقة مع بعضها، فالتطبيق بتاعك هيشتغل بنفس الكفاءة على أي بيئة تانية من غير تعديلات.
———
⚡️ سرعة الانتقال من مرحلة التطوير للإنتاج:
العادي في أي مشروع إنك بتبدأ بـ Development Environment، وبعد كده تنقل المشروع لـ Production Environment.
نقل المشروع ده ممكن ياخد وقت ومجهود كبير، خصوصًا لو بتحتاج تعيد تهيئة البيئة الجديدة كل مرة. Docker بيحل المشكلة دي عن طريق إنك بتجهز كل حاجة في Container واحد، وبتقدر تنقله مباشرة لأي مكان، وبالتالي بتقلل الوقت اللي بياخده المشروع عشان يبقى جاهز للنشر.
———
تقدر تعمل نسخ متعددة من الـ Containers وتشغلهم على أي عدد من السيرفرات بسهولة وفي وقت قليل، وبالتالي تقدر تتعامل مع زيادة الأحمال بدون مشاكل.
———
⚡️ سهولة التجربة والاختبار:
ميزة Docker إنه بيوفر لك بيئة معزولة لتجربة أفكار جديدة أو تعديل كود معين بدون التأثير على التطبيق الرئيسي. يعني، لو عايز تجرب Framework جديد أو تضيف Feature للتطبيق، تقدر تعمل Container جديد وتجرب براحتك من غير ما تأثر على البيئة اللي شغال عليها باقي الفريق أو المشروع الأساسي.
———
⚡️ الحفاظ على استمرارية العمل:
من خلال Docker تقدر تتأكد إن نفس الـ Setup شغال عندك، عند باقي الفريق، وعلى السيرفرات اللي بتشغل التطبيق. ده معناه إن مفيش مشاكل هتحصل بسبب فرق في الـ Configuration أو الـ Environment.
.
.
تعال ندردش شوية عن Docker بطريقة بسيطة ونفهم هو ليه شيء أساسي في تطوير التطبيقات...
———
📌 إيه هو Docker؟
ببساطة، Docker هو منصة بتسمح لك تبني، تختبر، وتشغل تطبيقاتك في حاجة اسمها Container.
طيب يعني إيه Container؟
فكر فيها زي علبة بتحط فيها التطبيق بتاعك بكل المكونات اللي محتاجها عشان يشتغل: الـ Code، الـ Libraries، والـ Dependencies اللي مستخدمها، والـ System Configurations.
الفكرة الأساسية إن الـ Container ده بيشتغل زي ما هو على أي جهاز أو سيرفر، بغض النظر عن الـ Operating System أو الـ Environment اللي عليه. يعني لو التطبيق شغال عندك على جهازك الشخصي، هيشتغل بالضبط بنفس الطريقة على أي سيرفر تاني من غير مشاكل.
———
📌 ليه Docker مهم في مجال السوفتوير؟
⚡️ التوافق بين البيئات المختلفة:
من أكتر المشاكل اللي معظمنا بيقابلها إنك تشتغل على مشروع على جهازك وكل حاجة تبقى تمام، لكن أول ما تيجي ترفعه على السيرفر، تبدأ المشاكل...
ممكن الـ Libraries أو الـ Environment اللي على السيرفر تكون مختلفة عن جهازك، وده يخلي حاجات كتير تبطل تشتغل.
وهنا بييجي دور Docker، من خلال الـ Container اللي بيبنيها، كل حاجة بتكون جاهزة ومتوافقة مع بعضها، فالتطبيق بتاعك هيشتغل بنفس الكفاءة على أي بيئة تانية من غير تعديلات.
———
⚡️ سرعة الانتقال من مرحلة التطوير للإنتاج:
العادي في أي مشروع إنك بتبدأ بـ Development Environment، وبعد كده تنقل المشروع لـ Production Environment.
نقل المشروع ده ممكن ياخد وقت ومجهود كبير، خصوصًا لو بتحتاج تعيد تهيئة البيئة الجديدة كل مرة. Docker بيحل المشكلة دي عن طريق إنك بتجهز كل حاجة في Container واحد، وبتقدر تنقله مباشرة لأي مكان، وبالتالي بتقلل الوقت اللي بياخده المشروع عشان يبقى جاهز للنشر.
———
تقدر تعمل نسخ متعددة من الـ Containers وتشغلهم على أي عدد من السيرفرات بسهولة وفي وقت قليل، وبالتالي تقدر تتعامل مع زيادة الأحمال بدون مشاكل.
———
⚡️ سهولة التجربة والاختبار:
ميزة Docker إنه بيوفر لك بيئة معزولة لتجربة أفكار جديدة أو تعديل كود معين بدون التأثير على التطبيق الرئيسي. يعني، لو عايز تجرب Framework جديد أو تضيف Feature للتطبيق، تقدر تعمل Container جديد وتجرب براحتك من غير ما تأثر على البيئة اللي شغال عليها باقي الفريق أو المشروع الأساسي.
———
⚡️ الحفاظ على استمرارية العمل:
من خلال Docker تقدر تتأكد إن نفس الـ Setup شغال عندك، عند باقي الفريق، وعلى السيرفرات اللي بتشغل التطبيق. ده معناه إن مفيش مشاكل هتحصل بسبب فرق في الـ Configuration أو الـ Environment.
❤3
ليه الـ Caching مهم؟ وإزاي تختار الطريقة الأفضل؟ 🤔
.
.
خليني أسألك سؤال: عمرك دخلت على تطبيق ولقيته سريع جدًا في تحميل البيانات؟ ولو فكرت ليه سريع كده، غالبًا الإجابة هتكون إنه بيستخدم الـ Caching.
التخزين المؤقت (Cache) مش بس بيساعد في تحسين الأداء، بل ممكن يكون الفرق بين تجربة مستخدم ممتازة وتطبيق الناس بتكرهه بسبب البطء (وأكيد مر عليك تطبيقات بالشكل ده).
لما بتطلب داتا، بدل ما ترجع للسيرفر في كل مرة، بتحفظ نسخة منها في الـ Cache، وده بيقلل الـ Latency، ويخفف الحمل على قواعد البيانات (Database)، ويوفر في التكلفة.
لكن السؤال المهم: إيه أفضل طريقة تستخدم بها الـ Caching؟ 🤔 مش كل الـ Caching Strategy بتنفع في كل السيناريوهات.
فيه Strategies مختلفة، وكل واحدة لها استخداماتها، مميزاتها وعيوبها. وعلشان كده، لازم تفهمهم كويس علشان تختار اللي يناسب حالتك.
———
1- الـ Cache Aside (Lazy Loading)
الـ Cache هنا شغال زي مساعد مش أساسي. لما التطبيق يحتاج داتا، بيشوف الأول هل موجودة في الـ Cache؟ لو موجودة (Cache Hit)، بيستخدمها، لو مش موجودة (Cache Miss)، بيروح للـ Database، يسحب الداتا، ويخزنها في الـ Cache علشان لو اتطلبت تاني تكون موجودة.
🔹 المميزات:
- بسيط وسهل التطبيق.
- الداتا مش بتتحمل في الـ Cache إلا لما يكون فيه طلب فعلي ليها، فمفيش تحميل غير ضروري.
🔹 العيوب:
- أول طلب دايمًا هيكون بطيء لأنه هيروح للـ Database.
- لو حصل تحديث في الداتا في الـ Database، الـ Cache مش هيعرف غير لما يتطلب تاني.
📌 إمتى تستخدمه؟
لما يكون عندك بيانات بتتغير بشكل غير متكرر، وعايز تقلل الـ Load على الـ Database بدون ما تستهلك مساحة كبيرة في الـ Cache.
———
2- الـ Write Through
هنا أي داتا جديدة بتتكتب في الـ Cache وفي نفس اللحظة بتتكتب في الـ Database. يعني مش هتلاقي حاجة في الـ Cache غير اللي متسجلة في الـ Database فعلًا.
🔹 المميزات:
- الـ Cache دايمًا متزامن مع الـ Database.
- البيانات مش هتضيع لو الـ Cache حصل له Restart، لأنها محفوظة في الـ Database.
🔹 العيوب:
- الأداء ممكن يكون أبطأ لأن أي Write هيتنفذ مرتين (في الـ Cache وفي الـ Database).
- مش دايمًا هتستفيد من الـ Cache، لأن البيانات الجديدة مش بيتم طلبها بنفس سرعة البيانات القديمة.
📌 إمتى تستخدمه؟
لو عندك نظام Critical لازم يكون دايمًا متزامن ومفيش أي احتمالية لفقد البيانات، زي الأنظمة المالية أو الطلبات في الـ E-commerce.
———
3- الـ Write Back (Write Behind)
عكس الـ Write Through، هنا أي داتا جديدة بتتكتب في الـ Cache الأول، وبعد كده بيتم إرسالها للـ Database بشكل غير متزامن (Asynchronously) بعد فترة معينة أو عند الوصول لحجم معين من البيانات.
🔹 المميزات:
- أسرع في الكتابة لأنه مش بيعمل Load على الـ Database مع كل عملية Write.
- بيساعد في تحسين الأداء لما يكون فيه عدد كبير من عمليات الكتابة.
🔹 العيوب:
- لو الـ Cache حصل له Failure قبل ما يرسل البيانات للـ Database، البيانات هتضيع.
- محتاج Mechanism قوية لإدارة الـ Synchronization بين الـ Cache والـ Database.
📌 إمتى تستخدمه؟
لما يكون عندك تطبيق بيحتاج سرعة عالية جدًا في الكتابة، بس ممكن يتحمل تأخير بسيط في تحديث البيانات في الـ Database، زي التطبيقات اللي فيها Logging أو Analytics.
———
إن شاء الله التكملة في الجزء الثاني...
.
.
خليني أسألك سؤال: عمرك دخلت على تطبيق ولقيته سريع جدًا في تحميل البيانات؟ ولو فكرت ليه سريع كده، غالبًا الإجابة هتكون إنه بيستخدم الـ Caching.
التخزين المؤقت (Cache) مش بس بيساعد في تحسين الأداء، بل ممكن يكون الفرق بين تجربة مستخدم ممتازة وتطبيق الناس بتكرهه بسبب البطء (وأكيد مر عليك تطبيقات بالشكل ده).
لما بتطلب داتا، بدل ما ترجع للسيرفر في كل مرة، بتحفظ نسخة منها في الـ Cache، وده بيقلل الـ Latency، ويخفف الحمل على قواعد البيانات (Database)، ويوفر في التكلفة.
لكن السؤال المهم: إيه أفضل طريقة تستخدم بها الـ Caching؟ 🤔 مش كل الـ Caching Strategy بتنفع في كل السيناريوهات.
فيه Strategies مختلفة، وكل واحدة لها استخداماتها، مميزاتها وعيوبها. وعلشان كده، لازم تفهمهم كويس علشان تختار اللي يناسب حالتك.
———
1- الـ Cache Aside (Lazy Loading)
الـ Cache هنا شغال زي مساعد مش أساسي. لما التطبيق يحتاج داتا، بيشوف الأول هل موجودة في الـ Cache؟ لو موجودة (Cache Hit)، بيستخدمها، لو مش موجودة (Cache Miss)، بيروح للـ Database، يسحب الداتا، ويخزنها في الـ Cache علشان لو اتطلبت تاني تكون موجودة.
🔹 المميزات:
- بسيط وسهل التطبيق.
- الداتا مش بتتحمل في الـ Cache إلا لما يكون فيه طلب فعلي ليها، فمفيش تحميل غير ضروري.
🔹 العيوب:
- أول طلب دايمًا هيكون بطيء لأنه هيروح للـ Database.
- لو حصل تحديث في الداتا في الـ Database، الـ Cache مش هيعرف غير لما يتطلب تاني.
📌 إمتى تستخدمه؟
لما يكون عندك بيانات بتتغير بشكل غير متكرر، وعايز تقلل الـ Load على الـ Database بدون ما تستهلك مساحة كبيرة في الـ Cache.
———
2- الـ Write Through
هنا أي داتا جديدة بتتكتب في الـ Cache وفي نفس اللحظة بتتكتب في الـ Database. يعني مش هتلاقي حاجة في الـ Cache غير اللي متسجلة في الـ Database فعلًا.
🔹 المميزات:
- الـ Cache دايمًا متزامن مع الـ Database.
- البيانات مش هتضيع لو الـ Cache حصل له Restart، لأنها محفوظة في الـ Database.
🔹 العيوب:
- الأداء ممكن يكون أبطأ لأن أي Write هيتنفذ مرتين (في الـ Cache وفي الـ Database).
- مش دايمًا هتستفيد من الـ Cache، لأن البيانات الجديدة مش بيتم طلبها بنفس سرعة البيانات القديمة.
📌 إمتى تستخدمه؟
لو عندك نظام Critical لازم يكون دايمًا متزامن ومفيش أي احتمالية لفقد البيانات، زي الأنظمة المالية أو الطلبات في الـ E-commerce.
———
3- الـ Write Back (Write Behind)
عكس الـ Write Through، هنا أي داتا جديدة بتتكتب في الـ Cache الأول، وبعد كده بيتم إرسالها للـ Database بشكل غير متزامن (Asynchronously) بعد فترة معينة أو عند الوصول لحجم معين من البيانات.
🔹 المميزات:
- أسرع في الكتابة لأنه مش بيعمل Load على الـ Database مع كل عملية Write.
- بيساعد في تحسين الأداء لما يكون فيه عدد كبير من عمليات الكتابة.
🔹 العيوب:
- لو الـ Cache حصل له Failure قبل ما يرسل البيانات للـ Database، البيانات هتضيع.
- محتاج Mechanism قوية لإدارة الـ Synchronization بين الـ Cache والـ Database.
📌 إمتى تستخدمه؟
لما يكون عندك تطبيق بيحتاج سرعة عالية جدًا في الكتابة، بس ممكن يتحمل تأخير بسيط في تحديث البيانات في الـ Database، زي التطبيقات اللي فيها Logging أو Analytics.
———
إن شاء الله التكملة في الجزء الثاني...
👏3
𝗡𝗼𝗱𝗲.𝗷𝘀 𝗜𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗤𝘂𝗲𝘀𝘁𝗶𝗼𝗻𝘀 – 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 𝘁𝗼 𝗘𝘅𝗽𝗲𝗿𝘁 🚀
🟢 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 / 𝗝𝘂𝗻𝗶𝗼𝗿 𝗟𝗲𝘃𝗲𝗹
1. What is Node.js?
2. Why is Node.js single-threaded?
3. What is the V8 engine?
4. What is the Event Loop?
5. Difference between Node.js and JavaScript in the browser.
6. What are global objects in Node.js?
7. What is npm?
8. What is package.json?
9. What is module.exports?
10. Difference between require and import.
11. What is callback?
12. What is asynchronous programming?
13. What is Promise?
14. Difference between Promise and callback.
15. What is async/await?
16. What is REPL?
17. What is middleware?
18. What is Express.js?
19. What is REST API?
20. How do you handle errors in Node.js?
———
🟡 𝗠𝗶𝗱-𝗟𝗲𝘃𝗲𝗹 (𝟮–𝟱 𝗬𝗲𝗮𝗿𝘀 𝗘𝘅𝗽𝗲𝗿𝗶𝗲𝗻𝗰𝗲)
21. What is non-blocking I/O?
22. How does the Event Loop work internally?
23. Difference between process.nextTick and setImmediate.
24. What are streams in Node.js?
25. Types of streams.
26. What is Buffer?
27. What is clustering?
28. How do you handle multiple requests?
29. How do you manage environment variables?
30. What is CORS?
31. How do you secure Node.js APIs?
32. What is JWT authentication?
33. How do you connect Node.js with databases?
34. Difference between SQL and NoSQL in Node.js apps.
35. What is Mongoose?
36. How do you handle file uploads?
37. What is rate limiting?
38. How do you implement pagination?
39. How do you handle logging?
40. How do you test Node.js applications?
———
🔵 𝗦𝗲𝗻𝗶𝗼𝗿 / 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁 𝗟𝗲𝘃𝗲𝗹
41. Explain Node.js architecture.
42. How do you scale Node.js applications?
43. What is horizontal vs vertical scaling?
44. How do you handle CPU-intensive tasks?
45. How do you design microservices in Node.js?
46. How do you handle inter-service communication?
47. What is message queue usage in Node.js?
48. How do you implement caching?
49. What is Redis used for?
50. How do you handle memory leaks?
51. How do you monitor Node.js applications?
52. How do you implement CI/CD for Node.js?
53. How do you secure APIs at enterprise level?
54. How do you handle API versioning?
55. How do you manage secrets?
56. What are Node.js performance bottlenecks?
57. How do you implement graceful shutdown?
58. What are common Node.js anti-patterns?
59. How do you design fault-tolerant systems?
60. When should you NOT use Node.js?
🟢 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 / 𝗝𝘂𝗻𝗶𝗼𝗿 𝗟𝗲𝘃𝗲𝗹
1. What is Node.js?
2. Why is Node.js single-threaded?
3. What is the V8 engine?
4. What is the Event Loop?
5. Difference between Node.js and JavaScript in the browser.
6. What are global objects in Node.js?
7. What is npm?
8. What is package.json?
9. What is module.exports?
10. Difference between require and import.
11. What is callback?
12. What is asynchronous programming?
13. What is Promise?
14. Difference between Promise and callback.
15. What is async/await?
16. What is REPL?
17. What is middleware?
18. What is Express.js?
19. What is REST API?
20. How do you handle errors in Node.js?
———
🟡 𝗠𝗶𝗱-𝗟𝗲𝘃𝗲𝗹 (𝟮–𝟱 𝗬𝗲𝗮𝗿𝘀 𝗘𝘅𝗽𝗲𝗿𝗶𝗲𝗻𝗰𝗲)
21. What is non-blocking I/O?
22. How does the Event Loop work internally?
23. Difference between process.nextTick and setImmediate.
24. What are streams in Node.js?
25. Types of streams.
26. What is Buffer?
27. What is clustering?
28. How do you handle multiple requests?
29. How do you manage environment variables?
30. What is CORS?
31. How do you secure Node.js APIs?
32. What is JWT authentication?
33. How do you connect Node.js with databases?
34. Difference between SQL and NoSQL in Node.js apps.
35. What is Mongoose?
36. How do you handle file uploads?
37. What is rate limiting?
38. How do you implement pagination?
39. How do you handle logging?
40. How do you test Node.js applications?
———
🔵 𝗦𝗲𝗻𝗶𝗼𝗿 / 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁 𝗟𝗲𝘃𝗲𝗹
41. Explain Node.js architecture.
42. How do you scale Node.js applications?
43. What is horizontal vs vertical scaling?
44. How do you handle CPU-intensive tasks?
45. How do you design microservices in Node.js?
46. How do you handle inter-service communication?
47. What is message queue usage in Node.js?
48. How do you implement caching?
49. What is Redis used for?
50. How do you handle memory leaks?
51. How do you monitor Node.js applications?
52. How do you implement CI/CD for Node.js?
53. How do you secure APIs at enterprise level?
54. How do you handle API versioning?
55. How do you manage secrets?
56. What are Node.js performance bottlenecks?
57. How do you implement graceful shutdown?
58. What are common Node.js anti-patterns?
59. How do you design fault-tolerant systems?
60. When should you NOT use Node.js?
❤3