Moustafa Meaily
Moustafa Meaily

@CMPSamurai

15 تغريدة 9 قراءة Nov 04, 2021
الثريد ده هو تكملة لمجموعة ثريدز بتتكلم عن ال Software و ال System Design. اتكلمنا قبل كدة عن يعني ايه ويب ابلكيشنز و بتتقسم ازاي و ايه ابسط صورة ليها و يعني ايه Hosting ودلوقتي هنتكلم عن ازاي نقدر نكبر الSystem بتاعنا بحيث يخدم عدد مستخدمين اكبر أي ال Scalability
أولا فهم ال Scalability هو اساس مهم لفهم مصطلح ال cloud computing و يعني ايه يبقي عندي computing power غير محدودة. أي Software في الدنيا لو مش بيلبي طلبات المستخدمين بتوعه يبقي مينفعش نقول عليه شغال خصوصا في الويب ابلكيشنز بما ان كل طلبات المستخدمين بتتنفذ علي Server خارجي
لو رجعتوا للثريدز اللي فاتت هتلاقونا عرفنا الويب ابلكيشن بانه سوفتوير بياخد طلبات المستخدم من front end عند المستخدم و بينفذ الطلبات دي و بيرد عال front end بالنتيجة اللي هتتعرض لليوزر.عشان طلبات اليوزر تتنفذ لازم ال backend تبقي شغالة علي سيرفر (جهاز كمبيوتر) يمكن الوصول اليه
و هنا هنعرف ال Scalability بانها قابلية السيستم بتاعك انه يكبر ويخدم عدد اكبر من المستخدمين . عشان طلبات المستخدمين تتنفذ فانت بتستهلك موارد الجهاز اللي عليه اللي ممكن تكون CPU في حالة ان الابلكيشن بتاعك بيعمل عمليات حسابية كتير أو Disk Space في حالة انك بتخزن كتير.
المهم بسبب ان السيرفر اللي عليه البرنامج بتاعك في الاخر موارده محدودة هييجي وقت و موارده مش هتسمحله يخدم عدد اكتر من اليوزرز او طلباتهم و هنا بتقول ان السيستم بتاعك وصل لحدودو و محتاج يحصله Scaling عشان يقدر يخدم ناس اكتر.
فيه نوعين من ال Scaling ممكن يحصلوا للسيستم بتاعك. Vertical Scaling و Horizontal Scaling. عشان نكون متفقين النوعين هدفهم النهائي هو اضافة computing power للسيستم بتاعك عشان يقدر يخدم حمل اكبر (مستخدمين اكتر مثلا). الفرق بيبقي في طريقة اضافة ال computing power دي للسيستم بتاعك.
أول نوع وأبسطهم هو الVertical Scaling ده من الاخر بيقولك لما الماكينة بتاعتك تجيب اخرها بدلها بمكنة اكبر. بمعني ان مثلا انت عندك سيرفر ب ٢ جيجا رام جاب اخره فسيبه و شغل البرنامج بتاعك علي سيرفر فيه ٤ جيجا رام. و لما يجيب اخره بدله برضك. النوع ده بساطته انك مش بتحتاج تغير حاجة.
تاني نوع ال Horizontal Scaling بيقولك بدل معندك ماكينة واحدة شايلة الحمل كله هات ماكينة جنبها و قسم الحمل عليهم بحيث ان نظريا لو طلبات المستخدمين ممكن تتقسم فكدة فانت لما تجيب ماكينة جديدة هتقدر تخدم ضعف الطلبات. الفكرة هنا انك لازم الحمل عندك يكون بيتقسم. و هنا التحدي في الموضوع
من الحاجات المهمة برضك انك تعرف ان ال Vertical Scaling اسمه Scale Up و ال Horizontal Scaling اسمه Scale Out و دلوقتي هنتكلم عن المميزات و العيوب.
لو اتكلمنا عالمرونة Flexibility هنلاقي انك لو السيستم بتاعك بي Scale Vertically بس فحضرتك تحت رحمة التكنولوجيا. بمعني لو مثلا وصلت لاكبر حجم رام او disk في السوق السيستم بتاعك هيعتبر اتشل لحد التكنولوجيا متتطور. كمان انت معندكش اختيارات كتير وانت بتشتري عشان مزنوق في المواصفات
اما لو اتكلمنا عن ال Redundancy فحضرتك لو السيستم بتاعك شغال علي ماكينة واحدة قوية و وقعت حرفيا السيستم خلاص راح. بينما لو الحمل متقسم علي كذا ماكينة و واحدة وقعت قشطة مش مشكلة هيبقي شغال بس الحمل هيزيد لحد متقوم الماكينة دي او تغيرها. لو ماكينة واحدة فانت Single Point Of Failure
برضه لو بصينا عالتقسيم الجغرافي Geographical Distribution فانت لو عندك كذا ماكينة في كذا دولة بتخدم المستخدمين بتوعك فتقدر تخلي مثلا سيرفرات اللي في مصر تخدم مستخدمين مصر و بالتالي هتوفر زمن نقل ال request و ال response بسبب ال Network latency
و من الحاجات المهمة برضك وانت بتفكر في ال Scalability السعر و اكيد ميخفاش عليك ان كل مالمواصفات زادت كل مالسعر زاد بشكل غير متناسب. لان التكنولوجيا بتبقي لسة جديدة. هتلاقي أكبر هارد عالاقل تمنه اكتر الضعف من تمن هاردين نص الحجم. في تكلفة عالية جدا في امتلاك احدث حاجة.
طيب مادام الدنيا لذيذة كدة في ال Horizontal Scaling ليه منفكسش لل Vertical Scaling تماما ؟ ألمشكلة بتبقي ان مش دايما الحمل بتاع ال System بينفع يتقسم. مثلا لو عندك ابلكيشن بيكلم داتا بي و الداتا اللي في الداتا بيز مينفعش تتقسم عشان كل طلب لليوزر محتاج تطلع معلومة من الداتا كلها
التحدي في ال System Design انك ازاي تحول ال System بتاعك انه ينفع معاه ال Horizontal Scalability و ده اللي هتكلم معاكم فيه الفترة الجاية.
البلوج دي blog.cmpsamurai.com فيها شرح لمباديء ال Scalability بشكل مفصل اكتر.
لو عجبك الثريد ريتويت و فولو عشان تتابع الثريدز الجاية. 😉

جاري تحميل الاقتراحات...