المقدمة

كتاب Designing Data-Intensive Applications بيشرح إزاي نصمّم أنظمة بتتعامل مع داتا كبيرة بكفاءة، واعتمادية، وقابلية للتوسع. الكتاب موجّه للـ Backend و الـ Software Engineers اللي بيبنوا قواعد بيانات وبرمجيات معتمدة على الداتا، وبيساعدهم يختاروا الحل الصح حسب المشكلة اللي قدامهم.

السلسلة دي هتكون ملخص عملي للكتاب ومرجع لأهم النقاط والمفاهيم اللي بيناقشها، من غير تعقيد ولا تنظير زيادة. في الجزء الأول من السلسلة، هتبقى مقدمة عن الجزء الأول من الكتاب، وهنفهم يعني إيه مصطلح data-intensive application و data system.

كتير من التطبيقات النهارده بقت تعتمد على البيانات أكتر ما تعتمد على قوة الكمبيوتر نفسها. والتحدي الحقيقي بقى في تخزين داتا ضخمة، وسرعة الوصول ليها، ومعالجتها بكفاءة وفي أقل وقت ممكن.


ما هو الـ Data-Intensive Application؟

لو انت بتبني تطبيق بتخزّن فيه بيانات (database)، وفي العادة فيه داتا دايمًا بتتجاب باستمرار (caching)، وتحتاج تدوّر على حاجات معيّنة (search indexes)، وممكن تبعت داتا أو ملفات كبيرة بشكل غير متزامن (stream processing).

من وجهة نظر المستخدم، كل الحاجات دي بتبان كأنها تطبيق واحد بيعمل كل ده. ولكن الحقيقة إن التطبيق ده متكوّن من مجموعة أدوات وأنظمة مختلفة، كل واحدة ليها دور محدد، وبتشتغل مع غيرها علشان في الآخر تقدّم تجربة واحدة متكاملة.


ما هو الـ Data System؟

لما تجمع أكتر من أداة مع بعض علشان تقدّم خدمة معيّنة، زي:

  • قاعدة بيانات أساسية
  • طبقة من الـ caching منفصلة
  • أدوات بحث زي full-text search

وفي نفس الوقت انت مسؤول إن كل الأجزاء دي:

  • شغالة مع بعض بشكل صحيح
  • والبيانات فيها دقيقة ومتناسقة

وتقدّمها كلها تحت مظلة واحدة (مثلاً من خلال API)،كده إنت بالفعل بنيت data system خاص بيك، مستخدم أدوات عامة، لكن موظّفها بشكل يخدم احتياجك.

لكن النوع ده من الأنظمة بييجي معاه تحديات، زي:

  • إزاي تحافظ على الداتا وتبقا دائما متحدثه وسليمة؟
  • لو layer من السيستم وقعت، هل باقي النظام هيكمّل يشتغل؟
  • لو حصل traffic عالي فجأة، هل النظام هيستحمل؟
  • قد إيه النظام قابل للتطوير والتعديل مستقبلاً؟

كل دي أسئلة أساسية لازم تكون في بالك وإنت بتصمّم data system للتطبيق بتاعك.


في الختام

الجزء ده كان مقدمة عن الصورة الكبيرة، واللي جاي هيبقى دخول أعمق في المفاهيم الأساسية اللي الجزء دا من الكتاب بيركّز عليها وهيكون فيه كلام عن كل مفهوم فيهم بإستفاضة:

  • الاعتمادية (Reliability):إزاي نخلي التطبيق يفضل شغال بشكل صحيح، حتى في وجود أعطال أو تغييرات.
  • قابلية التوسع (Scalability):التطبيق بتاعنا بيكبر من ناحية عدد المستخدمين والبيانات و traffic الاستجابه بتاعته هتكون عامله ازاي كأداء وسرعه وتجربة استخدام للمستخدم 
  • قابلية التعديل أو الصيانة (Maintainability):قد إيه النظام سهل القراءة، التعديل، وإضافة features جديدة، سواء عليك أو على أي حد هيشتغل عليه بعد كده.