سلام به همهی برنامهنویسها، دولوپرها و دوستان عزیز DevOps!
یکی از پر تکرارترین مفاهیمی که تقریباً در تمام مصاحبههای فنی، طراحی سیستمها و معماری میکروسرویسها با آن روبهرو میشویم، بحث مقیاسپذیری (Scalability) است.
اما سؤال اصلی اینجاست:
مقیاسپذیری افقی و عمودی دقیقاً یعنی چه؟
و چرا اغلب این دو را با هم قاطی میکنیم؟
🧠 قانون طلایی
افقی = تعداد بیشتر
عمودی = قدرت بیشتر
فقط همین دو خط را در ذهنت نگه دار، چون کلید درک همهی ماجراست!
فرض کن میخواهی ۱۰۰ نفر را از تهران به شمال ببری.
دو انتخاب داری:
راه اول (افقی):
۱۰ تا پیکان قدیمی میخری و هر کدام ۱۰ نفر را سوار میکنی.
این یعنی تعداد وسیلهها را زیاد کردی → مقیاسپذیری افقی
راه دوم (عمودی):
یک اتوبوس VIP میخری که همان ۱۰۰ نفر را با راحتی کامل و وایفای میبرد.
یعنی قدرت همان وسیله را بالا بردی → مقیاسپذیری عمودی
دیدی چقدر ساده است؟
فرض کن یک اپلیکیشن Spring Boot داری که ۱۰۰۰ کاربر همزمان دارد.
۱۰ تا سرور جدید راه میاندازی و جلوی آنها یک Load Balancer قرار میدهی.
هر سرور بخشی از درخواستها را پاسخ میدهد.
👉 تعداد سرورها زیاد شد → افقی
به جای چند سرور، همان سرور فعلی را ارتقا میدهی:
مثلاً از ۸ گیگ رم به ۶۴ گیگ، یا از ۴ هسته CPU به ۳۲ هسته.
👉 قدرت همان سرور افزایش یافت → عمودی
⚙️ مثال از Kafka
فرض کن از Kafka برای پردازش لاگهای کاربران استفاده میکنی.
افقی: تعداد پارتیشنها را از ۴ به ۱۶ افزایش میدهی و ۳ تا broker جدید اضافه میکنی.
حالا سیستم میتواند میلیونها پیام در ثانیه را مدیریت کند.
→ مقیاسپذیری افقی
عمودی: همان broker را با یک سرور جدید جایگزین میکنی که SSD NVMe و ۱۲۸ گیگ رم دارد.
→ مقیاسپذیری عمودی
فرض کن یک دیتابیس MySQL داری که کمکم کند شده است.
افقی:
یک Read Replica اضافه میکنی تا کوئریهای SELECT به آن بروند.
یا دیتابیس را Sharding میکنی (هر گروه از کاربران روی سرور جدا).
→ مقیاسپذیری افقی
عمودی:
سرور دیتابیس را ارتقا میدهی (CPU، RAM، SSD سریعتر).
→ مقیاسپذیری عمودی
افقی (Horizontal) → با حرف H شروع میشود → «هزار تا سرور»
عمودی (Vertical) → با حرف V شروع میشود → «یکی ولی قوی»
۱. ۵ تا سرور جدید راه انداختم → ✅ افقی
۲. رم سرور را از ۱۶ به ۶۴ گیگ افزایش دادم → ✅ عمودی
۳. پارتیشنهای Kafka را زیاد کردم → ✅ افقی
۴. CPU سرور RabbitMQ را ارتقا دادم → ✅ عمودی
اگه همه را درست گفتی، تبریک! 🎉 تو کاملاً مفاهیم رو درک کردی.
اگر تعداد چیزی را زیاد کردی → افقی
اگر قدرت همان چیز را بالا بردی → عمودی
در طراحی سیستم، مقیاسپذیری اساس پایداری و رشد اپلیکیشن است.
در مصاحبههای شغلی هم معمولاً ازت میپرسند:
«اگر ترافیک بالا بره، چطور سیستم رو scale میکنی؟»
اگر بگویی: «سرور را قویتر میکنم» → یعنی عمودی
اگر بگویی: «چند تا instance دیگر راه میاندازم» → یعنی افقی
اشتباه در این مفاهیم ممکن است باعث شود مصاحبهکننده فکر کند درک دقیقی از معماری سیستم نداری.
افقی = اضافه کردن سرور / پارتیشن / ماشین
عمودی = قویتر کردن همان سرور / ماشین