راهنمای کامل
راهنمای هاست پرترافیک: از سرور تکی تا معماری High Availability
هاست پرترافیک دو مشکل متفاوت را حل میکند: کم آمدن ظرفیت در ساعت اوج و قطع شدن سایت وقتی یک سرور از کار میافتد. مشکل اول گاهی با بهینهسازی یا سرور بزرگتر برطرف میشود. برای مشکل دوم به چند سرور و مسیر جایگزین نیاز دارید. فروشگاه یا اپلیکیشنی که هر دقیقه قطعیاش فروش یا کاربر از دست میدهد، معمولاً با هر دو روبهروست. نکتههای زیر به مدیر فنی یا صاحب کسبوکار کمک میکند پیش از صرف هزینه بداند در کدام مرحله است و از پیمانکار چه بخواهد.
ترتیب کار: اول گلوگاه، بعد سرور بیشتر
اضافه کردن سرور به سایتی که کوئریهای کند دارد، همان کندی را روی چند سرور تکرار میکند. پس کار با اندازهگیری شروع میشود. لاگهای وبسرور نشان میدهند اوج درخواستهای همزمان کی و چقدر است، slow query log کوئریهای سنگین را پیدا میکند و پایش منابع معلوم میکند CPU، رم یا دیسک زودتر پر میشود. گاهی تنظیم PHP-FPM، کش صفحه یا اصلاح چند ایندکس کافی است و این کار در بهینهسازی سرور انجام میشود.
قدم بعدی معمولاً جدا کردن دیتابیس از وبسرور است، چون این دو الگوی مصرف متفاوتی دارند و بعد از جدا شدن میتوان هر کدام را جداگانه بزرگ کرد. Object Cache با Redis و کش صفحه در Nginx یا LiteSpeed هم بار PHP را کم میکنند. اگر بعد از این مراحل گلوگاه باقی بود، یا قطعی هنگام نگهداری دیگر قابل قبول نبود، نوبت چند وبسرور پشت لود بالانسر است. تست بار با k6 یا JMeter پیش و پس از هر مرحله نشان میدهد ظرفیت واقعاً بالا رفته است یا نه.
آماده کردن اپلیکیشن برای اجرای چندسروره
اپلیکیشنی که برای یک سرور نوشته شده، معمولاً فرض میکند فایلها، Session و کارهای زمانبندیشده روی همان ماشین هستند. پشت لود بالانسر این فرضها خطا میسازند. کاربر روی یک سرور وارد میشود و درخواست بعدیاش به سروری میرسد که Session او را ندارد، یا تصویری که روی یک نود آپلود شده روی نود دیگر پیدا نمیشود. پیش از انتقال، این موارد باید حل شوند:
- نگهداری Session در Redis یا دیتابیس، یا sticky session در لود بالانسر
- پوشه مشترک فایلهای آپلودی با NFS، GlusterFS یا Object Storage
- اجرای کارهای زمانبندیشده مثل WP-Cron یا Scheduler لاراول فقط روی یک نود
- پاکسازی کش پس از انتشار محتوا روی همه نودها و CDN
بخشی از این تغییرات به کد اپلیکیشن برمیگردد. بازنویسی کد خارج از این خدمت است، اما نیازها را فهرست میکنیم و به تیم توسعه میدهیم. وردپرس و ووکامرس با پوشه uploads مشترک، Object Cache در Redis و یک cron سیستمی روی یک نود بهجای WP-Cron، روی چند سرور کار میکنند و Session ووکامرس هم در دیتابیس ذخیره میشود.
اشتباههای رایج در راهاندازی High Availability
لود بالانسر تکی رایجترین اشتباه است. دو وبسرور پشت یک HAProxy با خاموش شدن همان HAProxy از دسترس خارج میشوند. برای همین لود بالانسر دوم با Keepalived و IP شناور راهاندازی میشود، اگر دیتاسنتر IP شناور را پشتیبانی کند. Failoverی هم که هیچوقت آزمایش نشده قابل اعتماد نیست. تا وقتی یک نود را عمداً خاموش نکردهاید، نمیدانید Health Check درست تنظیم شده، Replica بهروز است یا اپلیکیشن بعد از جابهجایی دوباره به دیتابیس وصل میشود.
کلاستری که نود کافی ندارد هم مشکلساز است. MariaDB Galera و Redis Sentinel برای جلوگیری از split-brain دستکم سه عضو رأیدهنده میخواهند و با دو عضو، قطع ارتباط بین آنها معمولاً نوشتن یا Failover را متوقف میکند. اشتباه دیگر این است که High Availability را جایگزین بکاپ بدانید. حذف اشتباه یا داده آلوده فوراً روی همه نودها تکثیر میشود، پس بکاپ مستقل و برنامه بازیابی همچنان لازم است و در بکاپ و بازیابی بحران طراحی میشود.
نکتههای مخصوص زیرساخت پرترافیک در ایران
محل کاربران تعیین میکند CDN و سرورها کجا باشند. برای کاربران داخل ایران CDN و سرور داخلی مناسبترند و برای مخاطب خارج از ایران CDN خارجی. اگر سایت هر دو گروه را دارد، این انتخاب را پیش از طراحی مشخص کنید. امکاناتی مثل IP شناور و شبکه خصوصی بین سرورها در همه دیتاسنترها یکسان نیست، پس پیش از طراحی Failover آنها را از ارائهدهنده سرور بپرسید.
زمان و هزینه راهاندازی هاست پرترافیک
تعداد و اندازه نودها پایه برآورد است و روش تکثیر دیتابیس عامل مهم بعدی. Replication ساده با یک Replica زودتر از Galera Cluster سهنودی راه میافتد و نگهداری سادهتری دارد. نیاز به CDN، همگامسازی فایلها و حجم دادهای که باید منتقل شود هم زمان کار را تغییر میدهد. آماده بودن اپلیکیشن هم اثر زیادی دارد، چون اگر تیم توسعه باید Session یا مسیر آپلود را تغییر دهد، اجرا به برنامه زمانی آنها وابسته میشود.
لازم نیست همه اجزا یکجا ساخته شوند. مسیر مرحلهای، از جدا کردن دیتابیس تا لود بالانسر دوتایی، هزینه را با رشد ترافیک هماهنگ میکند. برای بررسی اولیه، آدرس سایت، پلتفرم، حدود ترافیک در اوج و مشکل فعلی را بفرستید. نگهداری زیرساخت بعد از تحویل را هم میتوانید در قالب پشتیبانی و مدیریت سرور ادامه دهید.
پیش از طراحی Failover لود بالانسر، از ارائهدهنده سرور بپرسید IP شناور پشتیبانی میشود یا نه. بدون آن، جابهجایی خودکار به روش دیگری نیاز دارد.