چطوری شرکت های بزرگ سایتشون رو آپدیت میکنن؟

سلام

.راستش بعضی سایت هارو تو ایران دیدم که موقع آپدیت بدون اطلاع قبلی سایتشون رو down میکنن و تا ساعت نامشخصی این مشکل ادامه داره.

یا مثلا سایت هایی که کاربر آنلاین زیاد دارن ی دفعه تو ساعات شلوغ شدنشون ی دفعه down میشن.

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

1 پسندیده

دوتا مساله هست. اول اینه که چرا وبسایت شرکتهای بزرگ down نمیشه؟
به خاطر اینه که سخت‌افزارشون انعطاف‌پذیره و وقتی فشار زیاد میشه چندتا سرور روشن میشه و به هندل کردن ریکوئستها کمک میکنه، وقتی بازدید پایین میاد، چندتا سرور خاموش میشه که خرجشون کم بشه.
اینا به تکنولوژیهایی که استفاده میکنن برمیگرده. مثلا دیتابیس Cassandra.
شرکت Netflix توی یه کنفرانس، جلو چشم مردم چندتا سرورشو خاموش کرد و چندتا سرور دیگه که کانفیگ نشده بودن رو به صورت اتوماتیک کانفیگ کرد و اضافه کرد به شبکه. (میخواست بگه ما خیلی خفنیم و به کارمون مطمئنیم)

سوال دوم اینه که چطور شرکتهای خارجی خبر میدن ساعت فلان تا فلان قراره سایت داون بشه ولی ایرانیها اینکارو نمیکنن؟
بخشیش برمیگرده به روش CI/CD و اتوماسیون‌هایی که برای اینکار انجام شده. مثلا با Ansible کار میکنن و میدونن کانفیگ و راه اندازی یه سرور برای پروژشون ۱۰دقیقه قراره طول بکشه. میگن ما نیم ساعت downtime داریم.
ولی این هم روش خوبی نیست. روشهای خیلی بهتری وجود داره.
یکیش اینه که یه سرور بگیرن و پروژه رو بندازن روش. بعد ترافیک کاربرها رو کم کم منتقل کنن به سرور جدید، مثلا برای ۸ ساعت، ۲۰درصد کاربرها از سرور جدید استفاده کنن و ۸ ساعت بعدی ۵۰درصد کاربرها از سرور جدید استفاده کنن. اگه کسی مشکلی report نکرد یعنی سرور جدید (که نسخه‌ی جدید اپلیکیشن روش هست) خوبه. همه‌ی ترافیک رو میفرستن به سرور جدید، سرور قبلی رو حذف میکنن.
اگه بعدا فهمیدن سرور جدید مشکلی داره و سرور قبلی بهتر بود، از روی git (یا هر ورژن کنترلر دیگه‌ای که داشتن) میان ورژن پایدار قبلی پروژشون رو میندازن روی یه سرور و همه رو میفرستن به اون سرور تا مشکل این نسخه‌ی آخر رو حل کنن.

این روش خوبیه برای شرکتهای کوچیک که فقط یک سرور دارن. (یا چندتا سرور دارن ولی در حد netflix نیستن)
پایداریش بالاست و کاربرها اصولا نمیفهمن که چه زمانی اپلیکیشن آپدیت شده!
هزینه‌ی مازادی هم که داره، ماکزیمم ۲۴ ساعت کرایه‌ی سروره!

حتی میشه این روش رو یه کم بهترش کرد. میشه بعد از ساختن سرور و کانفیگ کردنش (که با یکی از ابزارهای اتوماسیون مثل ansible انجام میشه) میتونیم کلا پورت ssh‌ سرور رو ببندیم (و همه‌ی portها بجز اونهایی که کاربر باهاش سروکار داره). اینطوری مطمئنیم که هیچ کسی هیچوقت نمیتونه به اون سرور دسترسی پیدا کنه (از نظر امنیت) حتی خودمون!
پس اگه یه باگی هم وجود داشته باشه، برنامه نویس نمیره ssh بزنه به سرور و اونجا فیکسش کنه. حتی اگه بخواد لوگوی سایت رو ۲ پیکسل جا‌به‌جا کنه.
برای اینکار باید تغییرات رو هرچقدر کوچیک یا بزرگ، روی گیت اعمال کنه و بعد از test و بازبینی، یه tag ایجاد کنه برای ورژن جدید، و پروسه‌ی گرفتن و کانفیگ سرور جدید و از رده خارج کردن سرور قدیمی تکرار بشه. (باعث میشه همیشه یک ورژن نهایی از پروژه داشته باشیم، نه چند نسخه که یکیش اینجاست یکیش روی سرور بعدا نمیشه این دوتا رو merge کرد)


مشکل، ایرانی یا خارجی بودن شرکت یا پروژه نیست. حتی مشکل میزان درآمد یا بزرگی شرکت هم نیست.
مشکل اینه که بلد نیستیم. کسی بهمون یاد نداده و نرفتیم روشهای مختلف رو یاد بگیریم.

این روشی که گفتم هم ابداع من نیست. خودم یه جا خوندم. (اصلا یادم نمیاد کجا وگرنه لینکشو میذاشتم)

5 پسندیده

باید ببینی برای چی اون زمان دان هست. فکر نکنم کسی توی ساعت شلوغی آپدیت با downtime بکنه.
به قول این دوستمون از مفهومی از CI/CD استفاده میشه و خیلی از ایرانی‌ها هم استفاده می‌کنند. البته ما بیشتر CDاش مد نظرمونه اینجا.
خیلی پیچیده نیست. من اولین چیزی که استفاده کردم و هنوز میکنم Capistrano هستش.

2 پسندیده

دوست عزیز لطفا بجای آ از ا استفاده نکنید، آخه چرا؟ مگه میشه؟ مگه داریم؟

5 پسندیده

جدایی از چیزی که توماج عزیز نوشت. خیلی خوبه که در مورد سایت های دیگه زیاد تند برخورد نکنیم :wink:

4 پسندیده

صددرصد اسکریپتش یا کد انیسبلش آماده بوده و فقط ران کرده.
ما هم توو شرکت داریم از این مواردی که فقط که تیکه کد یه کد ران میکنیم و بقیه کارها خودش اتوماتیک انجام میشه!

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

2 پسندیده