x32x01
أدارة أكتب كود
- بواسطة x32x01 ||
يعني إيه Scalability ويعني إيه System Design ؟
وإزاي بعض المواقع بتقدر تستحمل ملايين المستخدمين في نفس الوقت وبعضها بيستحمل 100 مستخدم بالعافيه!
لما تيجي تبدأ تعمل تطبيق جديد، بتلاقيه متقسم لحاجتين
الـ Frontend ده الجزء اللي بيشوفه المستخدم، زي الموقع أو التطبيق على الموبايل.
الـ Backend ده الجزء اللي ورا الكواليس، اللي فيه الخوادم وقواعد البيانات.
التفكير المبدائي إن السيستم كله متجمع في حتة واحدة
في الأول كل حاجة بتكون متركبة على بعضها، السيرفر عليه الكود وقاعدة البيانات مع بعض.
فـ ييجي الـ Frontend زي تطبيق الموبايل يطلب الداتا من السيرفر ده.
المشكلة ؟
الحل ده كويس لو عندك عدد قليل من المستخدمين لكن لو عدد المستخدمين كتر؟
السيرفر مش هيستحمل هيقدر يستحمل
لأن في الأول والآخر الـ Server ده عباره عن جهاز زي اللاب توب بتاعك ده عباره عن Cpu و RAM ..الخ.
فممكن تعتبره زي اللاب بتاعك كده بس طبعا مع اختلاف الإمكانيات بالتالي اللابتوب بتاعك لما بتحمل عليه أكتر من اللازم بيبدأ يهنج صح؟
بالتالي السرفر ده لو بدأ يتبعت ليه Requests كتير
هو محتاج يهندل كل الـ Requests دي بالتالي لو الإمكانيات بتاعته مش أفضل حاجه هيبدأ يهنج بالتالي يبدأ يرد متأخر
وممكن لو عدد المستخدمين زاد ممكن السرفر يقع
زي ما بنشوف ده بيحصل في نتيجة الثانوية العامة مثلاً
إمكانيات السرفر مش قادره تهندل عدد الـ Requests اللي جايه دي.
فمحتاجين نبدأ نشوف حلول
نفصل..
قاعدة البياناتDatabase تتنقل على سيرفر لوحدها.
الكود Backend Code يتشال على سيرفر تاني.
ده هيقلل نسبة المشاكل اللي تخلي السيستم يقع بالكامل، لكن لو السيرفر اللي عليه قاعدة البيانات وقع، كل حاجة هتقف.
وهنا نأتي لمفهوم
Vertical Scaling
إنك تزود إمكانيات السيرفر نفسه
تزود الـ RAM تزود الـ CPU حاجه شبه كده إنك بتروح تغير اللاب توب بتاعك بلاتوب امكانياته اعلي علشان بدل ما كنت بتشغل لعبة Pes 2021 تقدر تشغل Pes 2024
لكن باردو السيرفر ليه حد أقصى للإمكانيات متقدرش تزيد عنه
ولو وقع، السيستم كله يقع باردو.
Horizontal Scaling
إنك بدل ما تعتمد على سيرفر واحد، تستخدم أكتر من سيرفر:
بدل ما عندك سيرفر واحد، يبقى عندك 3 أو 4.
لو سيرفر وقع، الباقي يفضل شغال.
تقدر تزود عدد السيرفرات حسب احتياجك.
التحدي؟
الـ Load Balancer هو طبقة بتحطها قدام السيرفرات علشان توزع الضغط Traffic وبدوره بيحدد أنهي سيرفر عليه أقل ضغط ويروح له الـ Request مثلا و بيستخدم أكتر من طريقة علشان يوزع الطلبات بشكل متوازن.
طب وقواعد البيانات؟ هل هنقسمها علي كذا Server بنفس الطريقة؟ أكيد لا لاننا ما تقدرش تخلي الداتا متقسمة على أكتر من سيرفر تخيل لو حصل إدخال بيانات Insert في سيرفر وما كانتش موجودة في التاني، الدنيا هتتلخبط.
الحل؟
عن طريق الـ Database Cluster ومفهوم الـ Replicationودول محتاجين بوست منفصل لوحدهم.
أكيد في عوامل تانيه لكن دي من أهم الحجات.
وإزاي بعض المواقع بتقدر تستحمل ملايين المستخدمين في نفس الوقت وبعضها بيستحمل 100 مستخدم بالعافيه!
لما تيجي تبدأ تعمل تطبيق جديد، بتلاقيه متقسم لحاجتين
الـ Frontend ده الجزء اللي بيشوفه المستخدم، زي الموقع أو التطبيق على الموبايل.
الـ Backend ده الجزء اللي ورا الكواليس، اللي فيه الخوادم وقواعد البيانات.
التفكير المبدائي إن السيستم كله متجمع في حتة واحدة
في الأول كل حاجة بتكون متركبة على بعضها، السيرفر عليه الكود وقاعدة البيانات مع بعض.
فـ ييجي الـ Frontend زي تطبيق الموبايل يطلب الداتا من السيرفر ده.
المشكلة ؟
الحل ده كويس لو عندك عدد قليل من المستخدمين لكن لو عدد المستخدمين كتر؟
السيرفر مش هيستحمل هيقدر يستحمل
لأن في الأول والآخر الـ Server ده عباره عن جهاز زي اللاب توب بتاعك ده عباره عن Cpu و RAM ..الخ.
فممكن تعتبره زي اللاب بتاعك كده بس طبعا مع اختلاف الإمكانيات بالتالي اللابتوب بتاعك لما بتحمل عليه أكتر من اللازم بيبدأ يهنج صح؟
بالتالي السرفر ده لو بدأ يتبعت ليه Requests كتير
هو محتاج يهندل كل الـ Requests دي بالتالي لو الإمكانيات بتاعته مش أفضل حاجه هيبدأ يهنج بالتالي يبدأ يرد متأخر
وممكن لو عدد المستخدمين زاد ممكن السرفر يقع
زي ما بنشوف ده بيحصل في نتيجة الثانوية العامة مثلاً
إمكانيات السرفر مش قادره تهندل عدد الـ Requests اللي جايه دي.
فمحتاجين نبدأ نشوف حلول
نفصل..
قاعدة البياناتDatabase تتنقل على سيرفر لوحدها.
الكود Backend Code يتشال على سيرفر تاني.
ده هيقلل نسبة المشاكل اللي تخلي السيستم يقع بالكامل، لكن لو السيرفر اللي عليه قاعدة البيانات وقع، كل حاجة هتقف.
وهنا نأتي لمفهوم
يعني إيه Scalability؟
الـ Scalability معناها إن السيستم يكون جاهز يتوسع لما عدد المستخدمين يزيد. وده بيتم بطريقتين:Vertical Scaling
إنك تزود إمكانيات السيرفر نفسه
تزود الـ RAM تزود الـ CPU حاجه شبه كده إنك بتروح تغير اللاب توب بتاعك بلاتوب امكانياته اعلي علشان بدل ما كنت بتشغل لعبة Pes 2021 تقدر تشغل Pes 2024
لكن باردو السيرفر ليه حد أقصى للإمكانيات متقدرش تزيد عنه
ولو وقع، السيستم كله يقع باردو.
Horizontal Scaling
إنك بدل ما تعتمد على سيرفر واحد، تستخدم أكتر من سيرفر:
بدل ما عندك سيرفر واحد، يبقى عندك 3 أو 4.
لو سيرفر وقع، الباقي يفضل شغال.
تقدر تزود عدد السيرفرات حسب احتياجك.
التحدي؟
إزاي توزع الـ Requests بين السيرفرات؟
هنا ييجي دور الـ Load Balancerالـ Load Balancer هو طبقة بتحطها قدام السيرفرات علشان توزع الضغط Traffic وبدوره بيحدد أنهي سيرفر عليه أقل ضغط ويروح له الـ Request مثلا و بيستخدم أكتر من طريقة علشان يوزع الطلبات بشكل متوازن.
طب وقواعد البيانات؟ هل هنقسمها علي كذا Server بنفس الطريقة؟ أكيد لا لاننا ما تقدرش تخلي الداتا متقسمة على أكتر من سيرفر تخيل لو حصل إدخال بيانات Insert في سيرفر وما كانتش موجودة في التاني، الدنيا هتتلخبط.
الحل؟
عن طريق الـ Database Cluster ومفهوم الـ Replicationودول محتاجين بوست منفصل لوحدهم.
طيب ليه الشركات الكبيرة بتنجح وبتقدر تخدم ملايين المستخدمين ؟
لإن الشركات الكبيرة زي أمازون ونتفليكس بتعتمد على مهندسين فاهمين كويس يعني Scalability و Sysetem design لإن كل ما تفهم أكتر في توزيع الضغط وحل مشاكل الداتابيز، هتقدر تخلي السيستم بتاعك يخدم ملايين من غير ما ينهار.أكيد في عوامل تانيه لكن دي من أهم الحجات.