یک ماه اخیر، روزهای خوبی برای ایرانسرور نبود. همان طور که احتمالاً در جریان هستید، روز شنبه 11 بهمن ماه در پورتال مشتریان ایران سرور اختلال شدیدی مشاهده شد که رفع کامل آن، تا 21 بهمن ماه طول کشید.
تیم توسعه ایرانسرور از همان لحظه نخست مشاهده اختلال، پیگیریها و اقدامات لازم برای رفع آن را آغاز کردند؛ اما چون مشکل از سمت WHMCS بود و این پلتفرم اجازه دسترسی به Source را نمیدهد، رفع مشکل زمانبر شد.
حالا، در مطلب امروز وبلاگ میخواهیم ریشه مشکل، چالشهای فنی و نحوه رفع این اختلال را با شما در میان بگذاریم. هدف از نوشتن این مقاله، انتقال تجربه و شفاف کردن موضوع برای شما همراهان عزیز است. امیدواریم که این تجربه برایتان مفید باشد.
مشکل از کجا بود؟
اصل قضیه اینجا بود که وجود یک خطا باعث استفاده بیش از حد منابع سرور و در نتیجه از دسترس خارج شدن پورتال در زمانهای پیک کاری شد.
جمعه 10 بهمن ماه پورتال مشتریان ایرانسرور، با موفقیت از نسخه WHMCS 7.8 به WHMCS 8.1 بهروزرسانی شد. تیم فنی بعد از اینکه از عملکرد صحیح فرایندهای اصلی مطمئن شدند، به روال عادی بازگشته و بعد از پایان ساعت کاری، به خانه رفتند.
شنبه صبح با نزدیک شدن به ساعت اوج کاری، کمکم اختلالاتی در عملکرد پورتال مشتریان ایران سرور مشاهد شد. تیم توسعه سریع وارد عمل شده و بررسی و مانیتور لاگها را آغاز کردند.
با توجه به اینکه این مشکل بعد از بهروزرسانی رخ داده بود، همه اطمینان داشتند که مشکل بهخاطر بهروزرسانی اخیر است. به همین خاطر چندین بار مراحل بهروزرسانی را مرور کردند تا اطمینان حاصل کنند که مشکلی در فرایند بهروزرسانی وجود نداشته است.
بعد از اینکه مطمئن شدیم فرایند بهروزرسانی کاملاً درست انجام شده و مشکلی در انجام آن نبوده، تیم فنی شروع به مانیتور دیتابیس و درخواستهای ارسال شده به سرور کردند تا منبع اصلی بالا رفتن لود سرور را شناسایی کنند.
در نهایت تیم فنی علت خطا را که از سمت سرویس WHMCS بود، کشف کردند. علت خطا یک کوئری (Query) بود که تعداد خیلی زیاد اجرای آن، تمام منابع CPU را درگیر میکرد.
مشکل چگونه حل شد؟
پس از مشخص شدن مشکل تلاش کردیم تا با اصلاح کوئری مشکل را رفع کنیم؛ اما متاسفانه به دلیل اینکه پورتال ایران سرور از نرمافزار WHMCS استفاده میکند و این نرمافزار Closed Source است، انجام این کار ساده نبود!
ما روشهای مختلفی را تست کردیم. حتی سعی کردیم بخشی از برنامه را Downgrade کنیم، اما فایده ای نداشت. در نهایت مجبور شدیم با تیم توسعهدهنده WHMCS مکاتبه کنیم تا مشکل را رفع کنند.
نکته جالبی که در این مکاتبات وجود داشت این بود که پس از ارسال برخی از لاگها برای کارشناسان WHMCS، آنها به ما اعلام کردند که این خطا تنها در Load بالا نمایان میشود و چون انتظار این میزان استفاده را نداشتیم، به این خطا برخورد نکرده بودیم.
پروسه رفع خطا توسط WHMCS کمی طولانی شد تا در نهایت سه شنبه 21 بهمن ماه مشکل بهطور کامل برطرف شد.
ریشه این مشکل مربوط به قابلیت جدید مدیریت مشتریان WHMCS بود که در نسخه 8 ارائه شده است. در نسخه جدید، هر اکانتی در WHMCS امکان اضافه کردن ساب اکانت (Sub Account) را پیدا کرده است.
مثلاً ممکن است شما در هاب ایرانسرور یک حساب کاربری داشته باشید و سایتهای مختلفی برای افراد دیگر طراحی کرده باشید. با قابلیت جدید WHMCS میتوانید به این افراد دسترسی بدهید تا خودشان وبسایتشان را مدیریت کنند؛ فقط باید قبل از آن، در سایت ایرانسرور ثبتنام کرده باشند.
کوئری مذکور هم که بالاتر راجعبه آن صحبت کردیم، برای اجرای قابلیت جدید، باید در بیشتر صفحات دسترسیها را چک میکرد و مطمئن میشد که این کاربر به این صفحه دسترسی دارد یا نه؟! یا اصلاً چه کارهایی میتواند انجام دهد؟!
همین تعداد بالای اجرای کوئری، در کنار زیاد بودن تعداد کاربران ایرانسرور، باعث بروز مشکل شده بود.
اگر دوست داشتید، میتوانید درباره این قابلیت در لینک زیر بیشتر بخوانید.
https://docs.whmcs.com/Users_and_Accounts
انتقال تجربه
اگر بخواهیم تجربه خود را از این اتفاق در اختیار شما بگذاریم، باید 3 بخش را برایتان را پررنگ کنیم.
اول: استفاده از پلفترمهای Closed Source
استفاده از پلتفرمهای Closed Source چالشهای خاص خودش را دارد. ما از سمت خودمان تمام تلاشمان میکردیم که مشکل سریعتر رفع شود، اما برای بخش دیگری از مشکل که راهحل آن در دست تیم WHMCS بود، کاری از دست ما ساخته نبود.
اگر قصد استفاده از نرمافزارها یا پلتفرمهای Closed Source را دارید، یادتان باشد که در صورت بروز مشکل، باید منتظر تیم توسعه یا پشتیبانی مربوطه بمانید. سیستمهای Closed Source بر خلاف سیستمهای Open Source هستند و اجازه دسترسی به منابع کدها را به کسی نمیدهند.
دوم: تست استرس
اگر برنامه یا نرمافزار تحت وب دارید، خیلی مهم است که عملکرد آن را در برابر تعداد کاربران بالا و درخواستهای زیاد بسنجید. به این کار تست استرس یا تست فشار گفته میشود.
بهتر است که قبل از انتشار هر آپدیت یا ارتقاء نسخه، تست استرس انجام دهید، تا مشخص شود این نرمافزار (یا پلتفرم) تا چه تعداد کاربر را پشتیبانی میکند و کجای کار کم میآورد. برای انجام این تست هم میتوانید از ابزارهای آنلاین (مانند oadimpact.com) کمک بگیرید و هم اینکه خودتان شرایط را با کارمندان شرکتتان یا برگزاری یک رویداد رایگان شبیهسازی کنید.
اینطوری اگر در تعداد Load بالا سیستمتان از دسترس خارج شود، میتوانید آپدیت یا انتشار نسخه جدید را تا زمان رفع مشکل به عقب بیاندازید.
سوم: بکاپگیری منظم
خوشبختانه در ایرانسرور عملیات بکاپگیری، بهصورت روزانه و ساعتی انجام میشود و از این بابت مشکلی در بهروزرسانی پیش نیامد؛ اما آنقدر بکاپگیری نکته مهمی است که گفتیم بد نیست اشارهای به آن داشته باشیم.
در همه حال، بهخصوص زمانی که در حال توسعه یا آپدیت برنامهای هستید، زمانبندی منظم و دقیقی را برای تهیه نسخه پشتیبان تعیین کنید.
جمعبندی
ما از سال 2010 در حال استفاده از نرمافزار WHMCS هستیم و با توجه به میزان و سرعت رشد مشتریان، بیش از یک سال است که متوجه شدیم این نرمافزار جوابگوی نیاز ما نیست. به همین دلیل شروع به پیادهسازی یک Cloud Native APP کردیم که با نام gPortal توسعه داده شده و نسخه اولیه آن در مسیر cloud.iranserver.com منتشر شده است.
همه خدمات جدید ایران سرور در پورتال جدید ارائه خواهند شد و خدمات قدیمی نیز کمکم به این پورتال منتقل میشوند.
در چشم انداز 1403 پورتال مشتریان ایران سرور به طور کامل از WHMCS به gPortal مهاجرت خواهد کرد و WHMCS جمعآوری خواهد شد.
امیدواریم که با این مقاله، دلیل اختلال اخیر برایتان شفاف شده باشد. در نهایت باز هم به نوبه خودمان از شما عذرخواهی کرده و نهایت تلاشمان را میکنیم که در آینده، ییشتر از قبل رضایت شما را جلب کنیم.