کاهش هزینه نگهداری تریبون به سالی کمتر از ۲۰۰ هزار تومن!


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

اگر حوصله نداری! خلاصه بگم

برای اینکه بتونیم زمان بیشتری (بدون جذب سرمایه) سرویس تریبون رو بالا نگهداریم تصمیم به کاهش هزینه نگهداری تریبون کردیم و نهایتا مهاجرت از سرور مجازی خارجی به هاست اشتراکی داخلی ماحصل کار ما بود. با چالش هایی مثل فیلتر و تحریم در اینترنت داخلی، کاهش سطح دسترسی در شخصی سازی محیط نگهداری در هاست اشتراکی، مشکلات استقرار، کاهش سرعت سرویس و ... سر و کله زدیم که در آخر تونستیم تمامی امکانات سرویس رو با کمی تغییر و یا انتخاب جایگزین حفظ کنیم.

مقدمه

هیچ وقت یک آدم صرفا فنی بودن برام جذاب نبوده و همیشه تلاش کردم که بتونم به دنیای واقعی نزدیک تر باشم؛ به طوری که از مفاهیم و تئوری در جای درست نیازمندی های صنعت رو به در حالتی بهینه حل کنم. بعد از این که یک سال از راه اندازی تریبون گذشت و ذوق و زمان ما برای نگهداری از او کمتر شد تصمیم گرفتیم که هزینه های نگهداریش رو تا حد ممکن کاهش بدیم تا بتونیم زمان بیشتری زنده نگه داریمش :)) جزعیات و نتیجه چالش‌ها و تصمیم هایی که گرفتیم رو توی این دو بخش مینویسم تا هم برای ما ثبت خاطره بشه و هم شاید در آینده شما مسئول نگهداری یک کسب کار نوپا باشید و یا قصد راه اندازی آنرا داشته باشید که شرایط شبیه به ما رو تجربه کنید.


قبل شروع بگم که ...

تریبون توسط یه تیم دو نفره سرپا هست و یک کار نوپاست که برای کسب تجربه‌های جدید و آموزش شخصیمون ازش نگهداری میکنیم. تصمیمات و معماری و ابزارهایی که داخلش استفاده شده را با توجه به زمان و هزینه و خیلی معیارهای غیرفنی متفاوت انتخاب شده‌اند. معیارهای فنی تنها جنبه تصمیم‌گیری ها نبوده، برای همین یک سری جاها میبینید از یک سری ابزارها استفاده های عجیب برای حل کردن مشکلمون کردیم! (مثلا تلگرام به عنوان alerting system)


بخش اول - کجا بودیم؟ کجا هستیم؟ به کجا خواهیم رفت؟

- کجا بودیم؟ از ابتدای شروع کار تریبون، برامون اهداف آموزشی و کسب تجربه بیشتر تو مباحث مالی و بیزینسی اهمیت داشت و برای همین توی زمینه‌ای که فکر میکردیم نیاز و تقاضا هست شروع به ساختن ایده کردیم و تریبون رو تشکیل دادیم.

- کجا هستیم؟ بعد از گذشت دقیقا یک سال از راه اندازی تریبون، بنابر دلایل زیادی که از مهمترین آنها سواد کم بیزینسی و تنبلی بودند، نتونستیم به بچمون(تریبون) برسیم و کامل در همه جنبه های مختلف پرورشش بدیم.

درحالی که سرویس ما آمادگی پاسخ دهی به تعداد زیادی درخواست و کاربر همزمان رو داره، ما تبلیغات رو براش شروع نکردیم و خب این یعنی برای لود و کاربرانی آماده هستیم که قرار نیست به این زودی مهمان ما باشند! درواقع بیشتر از حد نیاز آماده هستیم!

- به کجا خواهیم رفت؟ اگر خیلی خلاصه بگم: کاهش هزینه‌ها برای افزایش توان سرپا نگه‌داشتن تریبون. چون درآمد تریبون خیلی ناچیز هست و تبلیغاتی درحال انجام نیست، پس یعنی فقط هزینه نگهداری سرویس رو داریم. البته هزینه مالی منظورم هست و از نیروی انسانی و انرژی که خودمون میزاریم صرف نظر کردم. پس هرچقدر هزینه رو کمتر کنیم بیشتر میتونیم سرویس رو بالا نگهداریم.


خب حالا که یه دید نسبی از شرایط داریم نوبت این هست که هزینه های تریبون رو لیست کنیم و سعی کنیم ببینیم تو کدوم قسمت میتونیم صرفه جویی کنیم و کمترش کنیم:

۱. سرور مجازی خارجی: هسته اصلی سرویس به همراه دیتابیس (در ادامه علت انتخاب سرور خارجی رو میگم)

۲. هاست اشتراکی داخلی: برای وبلاگ و اخبار تریبون یک اپلیکیشن وردپرسی داشتیم که جداگونه بالا آورده شده بود.

۳. پنل ارسال پیامک: سرویس اجتناب ناپذیری که برای اعتبار سنجی ثبت‌نام ها و فراموشی رمز عبور و اطلاع رسانی ها و ... ازش باید استفاده بشه.

۴. تبلیغات:‌ درحال حاضر هزینه خاصی برای بخش نمیکردیم!

خب!! حالا باید ببینیم کدوم بخش هارو تا چقدر میتونیم بهینه کنیم. خلاصه بگم فقط مورد سرور مجازی خارجی هست که هزینه‌‌اش دلاری بود و خب بزرگترین ترین بخش هزینه‌ها بود. با خودم فکر کردم اگر بتونم سرویس رو داخل همون هاست اشتراکی بالا بیارم چقدر زیاد میتونم هزینه هارو به صفر نزدیک کنم؛ بعلاوه اینکه سالیان زیادی هست که یک هاست اشتراکی برای کارای دم‌دستی داشتم و اگر بتونم روی همون بالا بیارم سرویس رو خیلی عالی میشه. با این اوصاف هزینه ها تقریبا نزدیک به صفر میرسه!


بخش دوم - چطور بدون هیچ اختلالی از سرور مجازی به هاست اشتراکی مهاجرت کنیم؟

برای هم‌خط شدن باهم بزارید معماری و جزعیات فعلی سرویس تریبون رو با هم مرور کنیم.

ساختار کلی سرویس تریبون به شکل زیر بود که تشکیل شده از یک Shared-Host در ایران و یک VPS در هلند که با دو سرویس خارجی دیگر که کاوه‌نگار و تلگرام هستن در ارتباط هست:

مهمترین علتی که تریبون رو اولین بار بردیم روی سرور خارجی بحث فیلتر و تحریم بود.این قضیه تو سهولت کانفیگ و نگهداری سرور و همینطور ارتباط با تلگرام تاثیر مستقیم داشت. از طرفی برای بک‌آپ گیری هم از Cloud Storage رایگان استفاده میکردیم که جایگزین ایرانی نداریم! (قبلا پستی در مورد ‍اینکه چگونه یه بک‌آپ کم هزینه داشته بسازیم هم نوشتم و میتونید از اینجا بخونید).

خب مشکل مهاجرت روی هاست اشتراکی داخلی ازینجا شروع میشه که دیگه نه Redis رو داریم نه تلگرام رو. از Redis به عنوان یه حافظه موقتی استفاده میکردیم که تو فرآیندهای caching و sessions و ... استفاده شده بود که خب داخل هاست اشتراکی نداریمش. از تلگرام هم برای خبر دادن اتفاقات و ارور ها و ... استفاده کرده بودیم که همیشه تمامی اتفاقات رو به خوبی زیر نظر داشته باشیم بدون نیاز به چک کردن پنل مدیریت. حالا مشکل اینه که به خاطر محدودیت سطح دسترسی تو Shared-Host دیگه Redis نداریم. همینطور از اینترنت داخل تلگرام فیلتر هست؛ پس تلگرام هم پَر!

لیست مشکلات مهجرت به هاست اشتراکی شامل میشد از:

  • فیلتر بودن تلگرام و از کار افتادن Notificationهای تریبون: استفاده از SMS به عنوان نوتیفیکیشن‌ها، هم پرهزینه میشه و هم چون باید برای تمامی اعضای تیم ارسال میشد، خب داد میزد که کار تکراری و بیخودی هست! از طرفی حجم SMS زیاد هم برای خودمون اذیت کننده میشد. پس باید براش چاره‌ دیگه‌ای پیدا میکردیم.
  • نداشتن Redis: که ما هیچ لایه کشی رو برنداشتیم فقط از فایل بجای Redis استفاده کردیم! درواقع کیفیت و سرعت رو فدای بهینه سازی مالی کردیم :) استفاده از Storage Facade تو لاراول این کار رو خیلی آسون کرده بود و کافی بود فقط یک کانفیگ رو از `redis` به `file` تغییر بدیم.
  • سازگاری اپلیکیشن لاراولی با هاست اشتراکی که داخل این مقاله مفصل درباره چالش های انتقال یک اپلیکیشن لاراولی روی هاست اشتراکی نوشتم براتون.
  • حافظه مورد نیاز برای عکس ها: برخی خدمات دهنده‌های هاست اشتراکی سرویس هایی دارند که تا ۱۵۰ گیگابایت فضای اضافه برای سرویس رو میدن که بخاطر نوپا بودن تریبون این مقادیر خیلی قابل قبول بود.
  • کاهش سرعت: با اینکه تمام سعی رو کردیم تا هیچ لایه از Cache از بین نره اما اتفاقی اجتناب ناپذیر بود! ما سرعت رو فدای هزینه کردیم چون درحال حاضر برای این حجم از درخواست هامون منابع و سرعت
    Shared-Host قابل قبول بود و به نسبت خوب‌تر از چیزی بود که فکرش رو میکردیم!
  • بک‌آپ: خوشبختانه خود هاست اشتراکی ها گاهی تضمین بک‌آپ گیری منظم رو میدن و این میتونه لااقل در مواقع ضروری Disaster Plan ما باشه. اگر چه اعتمادی به خدمات دهنده‌‌ها نیست و یک نسخه بک‌آپ به‌روز هم خودمون باید داشته باشیم! :)) ‌که اونم فکرهایی براش کردم اما فعلا برامون صرفه نداره و بک‌آپ هفتگی جداگونه ایمنی نسبتا خوبی رو میده بهمون.

خب توی ساختار جدید به همچین چیزی رسیدیم:

اگر به عکس خوب نگاه کرده باشید متوجه حذف تلگرام شدید که بجاش یک بخش جدیدی اضافه شده که احتمالا منظور ایمیل رو میرسونه! نیازهای خبررسانی سریع یا Notification اتفاقات داخل سیستم رو با ایمیل انجام میدیم و که در این مرحله جواب‌گوی نیاز ما هست.


فوقع ما وقع!


بعد از استقرار یک نسخه از سرویس تریبون در Shared-Host و اطمینان از اینکه همه چیز درست کار میکنه یا نه، سرویس رو شبونه به هاست اشتراکی انتقال دادیم و VPS هلند رو خاموش کردم و تمام!

‌این شکلی بود که موفق شدیم هزینه نگهداری تریبون رو از ماهی بیشتر از ۲۰۰ هزار تومن به سالی کمتر از ۲۰۰ هزار تومن برسونیم!


سخن پایانی

با اینکه از همون شروع کار خیلی روی بهینه بودن و کم هزینه بودن تریبون وقت گزاشتیم، اما درنهایت کار متوجه شدیم که ارزیابی کافی و درست نداشتیم! به نظرم بحث‌های فنی سرویس در یک کسب و کار آنلاین نباید فاصله زیادی با نیاز و وسعت بیزینس داشته باشه و باید هم‌پا و منطقی با هم جلو بروند. در مورد ترریبون فکر میکنم حالت الانش میتونست حالت ایده‌آل اولیه باشه و شاید بهتر بود در زمان توسعه اولیه همون انرژی بهینه‌سازی‌های فنی رو روی توسعه بیزینس میزاشتیم.

البته که همیشه اشتباه مطمعن‌ترین راه برای یادگیری هست :)


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

عالی باشید 3>