Strategies for Read Heavy Systems

لما نيجي نتكلم عن الأنظمة اللي بتركز على عمليات القراءة أكتر من الكتابة، يعني الـ Systems اللي بيكون فيها نسبة قراءة للبيانات أكبر بكتير من نسبة الكتابة، ففيه شوية استراتيجيات ممكن نستخدمها عشان نحسن من الأداء.
Strategies for Read Heavy Systems
6 Strategies for Read Heavy Systems

المقدمة

لما نيجي نتكلم عن الأنظمة اللي بتركز على عمليات القراءة أكتر من الكتابة، يعني الـ Systems اللي بيكون فيها نسبة قراءة للبيانات أكبر بكتير من نسبة الكتابة.

فلو كان الـ System اللي بتبنيه بيتضمن من المتطلبات بتاعته انه يكون Read Heavy ففيه شوية استراتيجيات ممكن نستخدمها عشان نحسن من الأداء ونضمن إن النظام يشتغل بكفاءة عالية.

فورقة وقلم وتعالوا نتكلم عن بعض الاستراتيجيات اللي ممكن نستخدمها.


Caching

أول استراتيجية وأكتر واحدة مشهورة هي الـ Caching. وفكرة الـ Caching ببساطة هي إنك بتحتفظ بنسخة من البيانات اللي بتتقرا كتير في مكان سريع زي الـ RAM فبالتالي البيانات دي بتكون In-Memory.

لما المستخدم بيطلب البيانات دي تاني، النظام بدل ما يروح يجيبها من الـ Database، ويكون فيه Latency نتيجة قراءة البيانات دي من الـ Disk بيجيبها علطول من الـ Cache.

فده طبعًا بيقلل الوقت اللي الـ System محتاجه علشان يجيب البيانات وبالتالي يقلل الحمل على الـ Database.

وفيه أنواع كتير من الـ Caching زي:

  • الـ In-Memory Caching: زي استخدام Redis أو Memcached. ده بيكون مفيد لما تكون محتاج الوصول للبيانات بسرعة فائقة.
  • الـ Application-Level Caching: في النوع ده بتحتفظ بنسخة من البيانات في الـ Application نفسه، زي لما تعمل Cache لنتائج API Calls.

وكنا عملنا ورقة قبل كده عن الـ Caching Strategies تقدروا تشوفوها من هنا:

Caching Strategies In a Nutshell
الـ Caching من المفاهيم المهمة جدًا اللي منقدرش نستغنى عنها في صناعة البرمجيات، وجوكر في مواقف كتير لتحسين الـ Performance. وفيه أكتر من تكنيك بيتم الـ Caching من خلاله وده بيعتمد بنسبة كبيرة على الـ Data Access Patterns، وكل تكنيك ليه الـ Trade-offs اللي لازم تكون مُلم بيها.

Caching Strategies In a Nutshell


Indexing

الـ Indexing بيساعد في تسريع عمليات البحث في الـ Database. فلما يكون عندنا Table فيها ملايين الـ Records، البحث جواها ممكن ياخد وقت طويل.

لكن لو عاملين Index على الـ Column مثلا اللي بنبحث بيه كتير، هنلاقي إن البحث بقى أسرع بكتير. زي ما يكون عندك فهرس في كتاب، بدل ما تقعد تدور على الكلمة في كل صفحات الكتاب، بتروح للفهرس وتوصل للمعلومة بسرعة.

وطبعًا بنأكد على ان عمل Indexing لازم يتم بعناية وانك تكون فاهم كويس ايه الـ Column اللي فعلا ممكن تحتاج يتعملها Indexing عشان تساعد في تحسين الاداء.

أنواع الـ Indexes:

  • الـ B-Tree Index: ده النوع الافتراضي في معظم الـ Databases. بيكون فعال في معظم حالات البحث.
  • الـ Hash Index: بيكون أسرع في عمليات البحث عن القيم الدقيقة لكنه مش مفيد في عمليات البحث عن نطاق معين من القيم واللي بيعرف بالـ Range Based Queries.

وفيه أنواع تانية كتير ممكن نعمل عنها ورقة منفصلة، وكنا اتكلمنا برضو عن الـ Indexing قبل كده تقدروا تشوفوا ده من خلال الورقة دي:

Database Indexing
ال database indexing من أهم مفاهيم قواعد البيانات اللي بنتعامل معاها يوميًا وبتساعدنا نسرع عملية طلب البيانات فورقة وقلم وتعالوا نتعرف أكثر عليه.

Database Indexing


تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀

النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉

Eqraatech Newsletter | Eqraatech - اقرأ-تِك | Substack
محتوى تقني متميز في مختلف مجالات هندسة البرمجيات باللغة العربية عن طريق تبسيط المفاهيم البرمجية المعقدة بشكل سلس وباستخدام صور توضيحية مذهلة. Click to read Eqraatech Newsletter, a Substack publication with hundreds of subscribers.

Strategies for Read Heavy Systems

Replication

الـ Replication هو إننا نعمل نسخ من الـ Database على أكتر من Server.

الفكرة هنا إننا نوزع عمليات القراءة على السيرفرات المختلفة، فمثلا لو عندنا 3 سيرفرات وكل سيرفر عليه نسخة من الـ Database، ده هيخلينا بدل منكون قادرين نـ Support 1,000 Read Query من Server واحد نـ Support 3,000 Read Queries في نفس الوقت لان باه عندنا 3 Servers.

فبالتالي هنحسن من الـ Read Throughput بالاضافة لاننا ممكن الـ Servers دي تكون قريبة جغرافيا من الـ End Users فتاخد Latency أقل بكتير.

أنواع الـ Replication:

  • الـ Leader-Follower Replication: في النوع ده بيكون عندك سيرفر رئيسي (Leader) بيقوم بكل عمليات الكتابة، والسيرفرات التابعة (Followers) بتقوم بعمليات القراءة.
  • الـ Multi-Leader Replication: هنا كل السيرفرات بتقدر تعمل عمليات قراءة وكتابة، لكن ده بيكون أعقد في الإدارة عشان نضمن الـ Synchronization بين البيانات وبعضها.

وكنا عملنا ورقة بتتقلم عن الـ Replication تقدروا تشوفوها من هنا:

Replication In a Nutshell
الـ Replication اني اعمل نسخة متماثلة واكررها فيكون عندي اكتر من نسخة بدل نسخة واحدة .. وده طبعا فادنا كتير في الـ Distributed Systems من حيث الـ Availability وكمان الـ Scalability

Replication In a Nutshell


Load Balancing

الـ Load Balancing بيشتغل مع الـ Replication علشان يوزع الـ Traffic بتاع القراءة على السيرفرات المختلفة وبالتالي يقلل الحمل على كل واحد. وبيستخدم خوارزميات متنوعة زي Round Robin أو Least Connections علشان يتأكد إن كل سيرفر بياخد جزء مناسب من الحمل.

وكده بنضمن إن مفيش سيرفر بيتحمل زيادة عن اللزوم والـ System كله بيشتغل بكفاءة عالية.

أمثلة على Load Balancers:

  • الـ HAProxy: ودي أداة مفتوحة المصدر بتستخدم في توزيع الحمل بين السيرفرات وبعضهم البعض.
  • الـ Nginx: ممكن يستخدم كـ Web Server وبرضو كـ Load Balancer.
  • الـ AWS Elastic Load Balancer: ودي بتكون خدمة من Amazon بتستخدم لتوزيع الحمل على السيرفرات اللي في الـ Cloud.

وكنا عملنا ورقة بتتكلم عن الـ Load Balancer تقدروا تشوفوها من هنا:

Load Balancer In a Nutshell
الـ load balancer أو “مُوزع الأحمال” هو بكل بساطة ضابط مرور بيوجه الطلبات اللي جاية من الـ clients إلى الـ server المناسب في النظام. زمان كنت بتعمل application ويشتغل على سيرفر لكن مع تزايد عدد الطلبات، السيرفر مش بيقدر يخدم كل دا وبيقع. فبنتجه للـ Scaling

Load Balancer In a Nutshell

وعملنا ورقة تانية بتتكلم عن خورازميات الـ Load Balancer تقدروا تشوفوها من هنا:

Load Balancer Algorithms In a Nutshell
اتكلمنا قبل كده عن الـ Load Balancer وعرفنا قد ايه هو مهم في عالم الـ Distributed Systems والـ System Design، ودلوقتي جه الدور اللي نتكلم فيه عن الـ Algorithms اللي بيشتغل بيها والمتنوعة بتنقسم الـ Algorithms لنوعين أساسين وهم Static و Dynamic.

Load Balancer Algorithms In a Nutshell


Sharding

الـ Sharding هو إننا نقسم الـ Database بتاعتنا لأجزاء أصغر ونوزعها على أكتر من سيرفر. فبدل ما يكون عندنا Database كبيرة وضخمة بنبدأ نقسمها لأجزاء صغيرة.

فكل جزء بيحتوي على جزء من البيانات وبيكون مستقل بذاته. فمثلا، لو عندنا Users Table وكبيرة، ممكن نقسمها على حسب الحروف الأبجدية، فكل سيرفر يكون مسؤول عن مجموعة معينة من الحروف. أو مثلًا لو عندنا 4Million Records نخلي كل 1Million في Database منفصلة.

وده طبعًا بيساعد في توزيع الحمل وتحسين الأداء كذلك.

أنواع الـ Sharding:

  • الـ Horizontal Sharding: وهنا بنقسم البيانات على حسب الـ Rows زي ما وضحنا في مثال الـ Users وان عندنا 4Million Records ممكن ناخد مثلا أجزاء من كل Row ونحطها في قاعدة بيانات منفصلة أو ناخد كل الـ Users اللي من حرف كذا لحرف كذا.
  • الـ Vertical Sharding: بيتم تقسيم البيانات على حسب الـ Columns فمثلا ناخد الـ Email Column نخليه في قاعدة بيانات والـ User Locations في قاعدة بيانات تانية وهكذا.

Content Delivery Network (CDNs)

الـ CDNs هي شبكة من السيرفرات الموزعة جغرافيا، مصممة لتقديم المحتوى للمستخدمين بسرعة وكفاءة.

فلما يكون عندنا موقع أو تطبيق بيستخدم صور، فيديوهات، أو ملفات ثابتة كتير اللي هي Static Content، فاستخدام الـ CDN بيساعد في تسريع تحميل المحتوى ده للمستخدمين.

والسيرفرات دي بتخزن نسخ من المحتوى الثابت ده وتقدمه للمستخدمين من أقرب سيرفر ليهم، وده بيقلل زمن الاستجابة بشكل كبير.

مميزات استخدام الـ CDNs:

  • تسريع تحميل المحتوى: بتقلل وقت تحميل الصور، الفيديوهات، والملفات الثابتة بشكل كبير.
  • تقليل الحمل على السيرفر الرئيسي: بتساعد في توزيع الحمل على السيرفرات المختلفة بدل من التركيز على سيرفر واحد.
  • تحسين تجربة المستخدم: بتساعد في تحسين تجربة المستخدمين عن طريق تقديم المحتوى بسرعة وأمان.

أمثلة على الـ CDNs:

  • الـ Cloudflare: وهي واحدة من أشهر الـ CDNs اللي بتقدم خدمات تسريع وتحسين أداء المواقع والتطبيقات.
  • الـ Amazon CloudFront: ودي خدمة CDN مقدمة من Amazon Web Services (AWS).

في الختام

الأنظمة اللي بتركز على عمليات القراءة الكثيفة محتاجة تخطيط كويس جدًا علشان تقدر تشتغل بكفاءة. وبالتأكيد فيه استراتيجيات تانية كمان زي الـ Data Denormalization والـ Materialized Views وغيرهم ما اتكلمناش عنهم فلو حابين اننا نتكلم عنهم ممكن نتكلم عنهم برضو في ورقة تانية.

والاستراتيجيات دي ممكن يكون ليها تأثير كبير على تحسين الأداء وبرضو كل استراتيجية من دول ليها مميزات وتحديات، والمهم هو إننا نختار الأنسب لنظامنا والبيانات اللي بنتعامل معاها.

اشترك الآن بنشرة اقرأ-تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!