از ویرگول MySqlای به ویرگول Elasticsearchای - قسمت ۳ (آخرای داستان)

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

رفتم سراغ راه‌های بک‌آپ گرفتن و دیدم الستیک بهش میگه snapshot. روی لپ تاپ خودم تست کردم و همه چی خوب بود و کار می‌کرد. رفتم سراغ اینکه روی پادهای بالا هم بذارمش و پلاگینی که نیاز داشت رو نصب کنم. وقتی اضافه‌ش کردم یهو دیدم پادا از کار افتادن. لاگشون می‌گفت نصب پلاگین به ارور خورده و نمی‌تونه کار کنه. کلی سرچ کردم و به نتیجه نرسیدم. همه لینک‌ها رو خوندم اما چیزی نبود. دیگه به عنوان آخرین راه، رفتم توی پروژه گیت‌هاب پلاگین یه issue باز کردم و براشون مشکلم رو توضیح دادم. اونا هم جواب دادن که مشکل از یک لایه پایین‌تر، یعنی image داکر الستیکه.

رفتم سراغشون و براشون ایشو گذاشتم که همچین مشکلی هست و اونا بهم گفتن ما نمی‌تونیم کاری کنیم چون تو اولیت‌هامون نیست ? ولی بهم گفتن که خودم کد رو عوض کنم و بهشون pull request بدم و اونا هم کمک می‌کنن. من که همیشه دوست داشتم تو یک پروژه عمومی فعالیت بکنم ولی هیچ وقت پیش نیومده بود، وقتی بهم اینجوری گفتن خیلی مشتاق شدم و سریع پروژه رو pull کردم و شروع به کار کردم.

مشکل از اینجا بود که کدی که زده بودند تا این image ساخته بشه، با فرض این نوشته شده بود که کاربری که قراره که container باهاش کار کنه، کاربر ۱۰۰۱ یا همون elasticsearchه و خب پلاگین snapshot گرفتن نیاز داشت که با کاربر اصلی (root) کار کنه.

من شروع کردم به تست گرفتن و عوض کردن کد. تمام حالت‌هایی که می‌شد رو تست کردم. وقتی حساب می‌کنم، بنظرم بیشتر از ۷۰ بار من از پروژه build گرفتم و تست کردم که ببینم کار می‌کنه یا نه. همین بین بود که فهمیدم ‌می‌تونم پلاگین آنالیزر (که تو قسمت اول گفتم) رو هم خودم آپدیت کنم (اگه می‌پرسین چجوری، باید بگم که کافیه فایلاشو دانلود کنید و توی فایل buildش نسخه‌ای که برای الستیک تعیین شده رو عوض کنید و با mvn دوباره build کنید. به همین سادگی?). خلاصه که بعد از یک هفته بالاخره مشکلش رو حل کردم و pull request دادم. اونا هم چندتا تغییر روش خواستن و منم اعمال کردم(البته تو یکیش خیلی گیر کردم، اونم موقعی بود که می‌خواست پورت‌ها رو تصدیق کنه و به مشکل می‌خورد که با کمک خودشون درست شد و یه کد بهم دادن و تست کردم و کار می‌کرد?) و تونستم از imageی که ساخته‌شد توی پادهای خودمون استفاده کنم و پلاگین snapshot رو نصب کنم.

البته الان اگه برید توی صفحه اون pull requestای که دادم، می‌بینید که دیگه بسته شده و هیچ وقت merge نشد :)))) چون آخر کار که دیگه همه چی درست شد و گفتم که تائید کنن، بهم گفتن که خطی که باعث می‌شد کاربر از کاربر اصلی به کاربر الستیک تغییر کنه رو برگردونم و وقتی گفتم «بابااااا مشکل اصن از اول همین بود» بهم گفتن که نمی‌شه اینجوری باشه و متاسفیم و بخاطر بعضی پلتفرم‌ها مثل open shift، امکان این وجود نداره که کانتینر با کاربر اصلی اجرا بشه ? خلاصه که بعد از کلی تلاش و با اون همه امید به contribute تو یک پروژه عمومی، تهش فقط مشکل خودمون برطرف شد ☹️

بعد از اینکه بک‌آپ گرفتن از الستیک هم درست شد، وقت اون رسید که بعد از ماه‌ها تلاش، بالاخره tracker رو غیر فعال کنیم که ببینیم چقدر تاثیر داره. البته الستیک تاثیر خودش رو با اینکه دیگه query روی tracker نمی‌رفت گذاشته بود ولی اینکه دیگه رو tracker هیچ درخواستی نره قاعدتا خیلی تاثیر داشت.

یادم میاد که سرعت سایت اون موقع روی ۱۰۰۰ میلی ثانیه بود. وقتی tracker غیر فعال شد، به صورت غیر قابل باوری تاثیر گذاشت رو سیستم. سرعت ناگهان اومد روی ۴۰۰ میلی ثانیه و ثابت شد!!!! اون موقع با یه همچین شکلی توی سیستم مانیتورینگمون روبه‌رو شدیم:

این شکلی شده بود سیستم(متاسفانه اون موقع از صفحه عکس نگرفتم)
این شکلی شده بود سیستم(متاسفانه اون موقع از صفحه عکس نگرفتم)

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

این بود داستان جابجایی ویرگول از MySql به Elasticsearch. البته که هنوز از MySql استفاده می‌کنیم ولی خب به لطف الستیک بعضی قسمت‌ها رو بهتر کردیم و در کل بار MySql کمتر شده و سرعت سایت خوبه :)