ویرگول
ورودثبت نام
امیرحسین شریف نژاد
امیرحسین شریف نژادیک برنامه نویس
امیرحسین شریف نژاد
امیرحسین شریف نژاد
خواندن ۳ دقیقه·۵ ماه پیش

درک Scaling در طراحی سیستم: بهترین روش‌ها برای مقیاس‌پذیری هوشمند

در مقاله تعریف و اصول طراحی سیستم در مورد طراحی سیستم توضیح دادم و این که چرا باید در مورد طراحی سیستم مطالعه داشته باشیم صحبت کردم در این مقاله میخوام از یکی از مفاهیم دیگر این نوع طراحی یعنی Scaling (مقیاس پذیری) صحبت کنم.

فرض کنید برای یک مناسبت میخواید برای سایت خودتون تبلیغات انجام بدید. بعد از شروع تبلیغات در سایت ها و اپ های مختلف تعداد کاربران زیادی میخوان به سایت شما مراجعه کنند و لندینگ شمارو ملاحضه کنند که این باعث افزایش ترافیک در سمت سرور شما میشه و باعث میشه که سرور به خاطر افزایش ترافیک down بشه و کاربران به مشکل بخورند.

اینجاست که مفهوم Scaling (مقیاس پذیری) وسط میاد.

انواع Scaling(مقیاس پذیری)

مقیاس پذیری عمودی (Vertical Scaling)
مقیاس پذیری عمودی (Vertical Scaling)

مقیاس پذیری عمودی (Vertical Scaling)

خب برای این که افزایش ترافیک در سمت سرور خوتون مدیریت کنید ممکن هست که اولین راهکاری که به ذهن بیاد افزایش منابع سرور (Ram, CPU, Storage) هست که به این کار میگن مقیاس پذیری عمودی (Vertical Scaling). این نوع از مقیاس پذیری یکی از آسان ترین و سریع ترین کارهاست که میتوان برای این چالش انجام داد. این نوع از Scaling بیشتر در سرور های دیتابیسی و اپلیکیشن های stateful کاربرد داره و بهتر که استفاده بشه.

منظور از اپلیکشن های stateful مانند اپلیکیشن های زیر می باشد:

  • اپلیکیشن های session-based مانند WHMCS که برای لاگین کاربر به سشن نیاز داره

  • اپلیکیشن های چت و وب سوکت به این دلیل که هر connection به یک client وصل است. پیام‌ها باید به همان connection برگردد. اگر connection قطع شود یا سرور عوض شود، پیام‌ها از بین می‌روند یا دیر می‌رسند.

  • اپلیکیشن های بانکی و تراکنش های مالی، به این دلیل که هر تراکنش باید atomic باشد و وضعیت آن دقیق نگهداری شود (rollback, commit). پخش شدن تراکنش بین چند سرور consistency را سخت می‌کند.

مقیاس پذیری افقی (Horizontal Scaling)
مقیاس پذیری افقی (Horizontal Scaling)

مقیاس پذیری افقی (Horizontal Scaling)

در بعضی از سرور های و اپلیکیشن ها دیگر افزایش منابع کاربردی نداره و نمیتوان به صورت بینهایت منابع اون سرور به تنهایی زیاد کرد چون که علاوه بر این که هزینه افزایش منابع برای سازمان و شرکت زیاد می شود، هزینه نگهداری و پشتیبانی از اون هم زیاد و دشوار می شود. در این جا دیگه روش قبلی کاربردی نداره و بهتر که به جای افزایش منابع فقط برای یک سرور، پروژه های خورد را بر روی سرور های مختلفی بالا بیاریم و به وسیله load balancer ترافیک بین سرور های مختلف مدیریت کنیم که به این روش مقیاس پذیری افقی (Horizontal Scaling) می گویند.

Vertical Scaling یا Horizontal Scaling؛ کدوم روش بهتر است؟

بسته به نیاز و هزینه و پروژه باید ببینید کدوم براتون بهتر هست اگر تعداد کاربران زیادی ندارید میتونید روش Vertical Scaling استفاده کنید ولی اگر میبینید که تعداد کاربران زیادی دارید و با افزایش منابع بازهم با ترافیک بالا جواب گو نیست بهتر که از روش Horizontal Scaling استفاده کنیم.

مقیاس پذیری خودکار (Auto Scaling)

ممکن هست که سرور شما در بعضی از زمان ها و روز ها تعداد کاربر زیادی داشته باشد و در زمان های دیگر ان چنان ترافیک بالایی به سمت سرور نیاد، خب اگر که پیشفرض چند سرور آماده سازی کرده باشیم و به وسیله لود بالانسینگ ترافیک بین اون ها مدیریت کنیم خب در زمان هایی که تعداد کاربران انقدر بالا نیست که میتواند یک سرور هم جواب گوی درخواست های کاربران باشد نیاز نیست هزینه اضافی برای نگهداری سرور های دیگر بدیم، اینجاست که باید ساختار طوری بچنیم که در صورتی که ترافیک در سمت سرور زیاد شد سیستم load balancer باید سرور دیگیری بسته به ترافیک به مدار اضافه کنه. این کار هم میتوان با ابزارهایی مثل Kubernetes انجام داد.

ممنون که تا این لحظه همراه من بودید. اگر سوال، انتقاد و یا پیشنهادی داشتید خوشحال میشم در بخش کامنت های این مطلب با من درمیون بزارید.

مقیاس پذیریطراحی سیستممعماری نرم افزارscaling
۳
۰
امیرحسین شریف نژاد
امیرحسین شریف نژاد
یک برنامه نویس
شاید از این پست‌ها خوشتان بیاید