تجربه من در پروژه با 500 کاربر در لحظه و MongoDB

معرفی:این اولین پست ویرگولم هست بهتره یک معرفی ریز از خودم برم پس، سلام، من حسن عرب برزو ام یک برنامه نویس جوان و خلاق و ایده پرداز و خیلی پر تلاش البته اینارو بقیه میگن :دی تقریبا تا الان راستشو بگم تقریبا 3.5 ساله که برنامه نویسی شروع کردم خواب و خوراک ندارم از همه چیزم برای هدفم زدم اینقدر که با همینقدر زمان کم اندازه یک فرد با 6 سال سابقه کاری چیزی میدونم و تجربه دارم خودمم نفهمیدم چیشد که این شد یا من خیلی سرعتی میرم جلو یا اونا خیلی کند بگذریم (املامم خیلی ضعیفه الان حس میکنم بگزریم درسته ولی ولش کن :دی).چیشد اصلا؟من همیشه از پروژه هایی انجام میدم 3-4 لول جلو ترم یعنی پروژه در حد پراید انجام میدم ولی درحد دنا پلاس دانش دارم (یه حمایت تولید ملی ریز هم اومدم براتون دیگه)؛ قضیه از این قراره که تو ذهنم بود اه بابا این پروژه های درحد پراید انجام میدم چیه خستم کردن باید هرچه سریع تر یه فکری بکنم این در حد پرایده الانه باید بشه در حد دنا پلاس خلاصه همینطور که زندگی عصف بارمو میگذروندم (این عصف هم شما درست بخونید) از شرکتی که کار میکنم بهم زنگ زدن گفتن "مهندس ما یک پروژه دستمون اومده تیم PHP کلا درگیره شما خلوت تری یه حرکتی بزن یه آزمون آنلاینه باید بزنیمش هیچ راهی نداریم" گفتم ای بابا منکه 8 ساعتم فوله بعدشم برای خودم میگذرونم عشقو حالو این حرفا (الکی مثلا) اومدم بگم نمیتونم شرمنده گفتم نه اینجاست که باید پرایده رو بکنی دنا پلاس گفتم: "باشه ولی به شرطی بزارین هرچی خودم میدونم بزنم این چرت و پرتایی تو شرکت میزنم قالب نکنی بهم دوباره بزنم (اینا تو ذهنم بود خیلی موادبم ها :دییی)" اونم اوکی داد ولی 2 هفته تایم دادن، من ? پروژه آزمون آنلاین ? ساعت گرینویچ ? خلاصه شروعش کردیم.باچی زدمش؟کتک نزدم زدن یعنی باچی انجام دادم ?، منکه بابا روحمم خبر نداشت پروژه چیه و این داستان ها اومدم با همون دنا پلاسه اما با یک آپدیت خیلی فورس زدمش و استارت خورد اما آخر دو هفته شده بود و من عملا تازه بروز رسانی تموم کرده بودم :دی یعنی آپدیت هم میتونست نباشه اما چون سرور نداشتیم و مشتری میگفت چون قبلی با PHP بوده من اینم میخوام سرور لینوکس باشه ماهم دیگه گفتیم ولش کن بریم NoSQL (یک دیتابیس خیلی با سرعت بالا در داده های حجیم) دیگه وقت این نبود که چطوری sql روی لینوکس کانفیگ کنیم همین بروزرسانی روهم خواب و خوراک نداشتم انصافا کلا همش سوتفاهم بود ما چمیدونیم که 26 هزارتا روزی میاد (ولی حسم میگه بهم نگفتن تا نترسم دمشون گرم کار خوبی کردن ? خلاصه... اینم بگم پروژه تقریبا 1 ماه و یک هفته ای تموم شد ولی رُسم کشیده شد (اولین باره رس مینویسم ?)تحویل پروژه:همین اول بگم که یا حسین ما دو روز قبلی دانش آموزان بخوان بیان وارد سایت بشن پروژه رو آخر وقت تحویل دادیم یعنی جمعه 12 دی 1399 اینا یک روز قبل تحویل پروژه اومدن از صبح هر باگ پیدا میکردن هی من باید رفع میکردم سختتتتت تریننننن روز کاری عمرم و خیلی پر استرس هر ثانیه به فردا فکر میکردم دیوانه میشدم بیشتر استرس میگرفتم البته جا داره ازونا تشکر کنم با وجود همه مشکلات بازم استرس بیشتر بهم نمیدادن (; .باگ اول:درحالی که صبح سرحال اومده بودم بهم گفتن ساعتای 10 مشتری میاد گفتم: "خب بیان ?" اینا اومدن خیلی سبر وایسادم گفتم: "برین تست کنید" رفتن همون لحظه گفتن: "اینکه هم لاگین هم نمیشه" هرجوری سعی کردم خودمو قانع کنم مشکل از اوناس گوشیاشون بدرد نمیخوره :دی پذیرفتم و رفتم دست به کد شدم بعد 3 4 ساعت تلاش بی وقفه هی میگفتن "فلانیم مشکل ورود داره باشه بابا بزار همینو حل کنم اه" خلاصه جونم بگه براتون آقا ما بعد 3 4 ساعتمون فهمیدیم مشکل یک دیتای null هست که داره ردو بدل میشه میخواستم خودمو ... بدم بخاطر آپدیت هول هولکی جمعه شون بود خلاصه همون حین هم بهترین دوستم گفت لیوانت رو بده برم برات چایی بریزم (تو شرکت ما برای کسی چایی بریزی ته معرفته دیگه ?) چایی مونده بود و من درحال مستقر کردن سورس روی سرور سیستمم با 12 گیگ رم به خاطر یه سری مشکلات عرضه یه خروجی گرفتن از سورس رو نداشت و هر پابلیش حدودا 20 دقیقه طول میکشید بعد اینکه ناهارم نخورده بودم درستش کردم خودمو با کاردک از روی زمین جمع کردم رفتم گفتم زنگ بزنید بگید همهههه وارد بشن خندشون گرفته بود منم درحالی که چایی میخوردم و از پنجره پشت میز مدیریت به افق خیره شده بودم لذت میبردم از زندگیم چاییم تموم نشده بود که...باگ دوم:گفتن مدارس ناقص (ناغص ناقس ناغس و... اولی خوشگل تر بود) حالا من بازم مثل همیشه نخواستم قبول کنم گفتم مشکل اکسل خودتونه بابا چی میگید برید اونو چک کنید رفتن چک کردن ساعت حدود 15 ظهر بود که گفتن آقا اکسل درسته من موندم و یک عالم دیتا توی دیتابیس که نمیشه دست بزنیمشون چه کنیم؟ باید به دیتابیس وصل بشیم بعد با بچهای DevOps حرف زدم گفتن بیا پورتش رو برات باز کنیم وصل شو بررسی کن آقا پورت رو باز کردن و بعد کل بررسی 1 ساعته به نتیجه نرسیدم گفتم حسن شکست خوردی؟ نه نه من با همه خستگیم میتونم این باید جز افتخاراتم باشه دوباره شروع کردم فهمیدم در هر ناحیه یک سری مدارس هم نام وجود داره اما زمانی من اکسل رو اضافه کردم فقط نام مدارس بررسی کردم؛ خب الان هر مشکلی میتونه باعث این بشه که من خسارت بزرگی به شرکت بزنم تحت هیچ شرایطی نمیشد دیتابیس پاک بشه چون توکن های کاربرای درحال تست به باگ میخورد و خیلی داستان میشد با دقت بسیار زیاد و دستان لرزان یک سری شرط اضافه کردم و زدم حدود 5 هزارتا مدرسه استان خراسان رضوی (شایدم 4 هزار مطمئن نیستم) دوباره بررسی و اضافه بشه چون پای اینترنت اومده بود وسط حدودا 20 دقیقه طول کشید و آخرشم به خطا خورد هیچی معلوم نبود (لعنت به مانگو) حس کردم شکست خوردم و یک عالمه دیتای الکی اضافه شده اما اینطور نبود حالا من موندم و یک عالمه خط کد که نمیدونم خطا مال کجاست یک حدث زدم و کدو نوشتم و اضافه کردم زدم این دفه 25 دقیقه گذشته بود مطمئن بودم اون باگ دیگه حل شده حالا نگران بودم که باگ دیگه نخوره که خوشبختانه هیچ مشکلی به وجود نیومد و همه چیز درست بود و من موفق شدممممم ساعت 6 عصر بود واقعا خسته آدمی که نه ناهار خورده نه صبحونه دو لیوان چایی فقط با خستگی تمام راهی خونه شدم و دیگه هیچ مشکلی پیدا نشد در طول اجرا یک سری باگ و توسعه هایی در سمت پنل ادمین بود که بگذیم مهم نیست اونامنابع سرور 8 هسته 36 گیگ رم (4 گیگش کلا درگیر بود)صبح روز اول ورود دانش آموزان:عکس گرفته شده از گوگل آنالیتیکس روز اول یهویی :)خب الان وقتش بود که ببینیم دنا پلاس ما چه کرده و تا چقدر جواب میده اصلا کم بیاره سرور بخوابه چی؟ چیزی که مشتری خیلی ازش میترسید.خب هرکاری کردیم که ببینیم از توی سرور میشه دید چند نفر توی سایتن هیچی مشخص نشد و دقیق نبود خیلی سریع درحالی که منابع سیستم تقریبا فول بود اومدیم و یه گوگل آنالیتیکس روش آوردیم بالا تا دقیق ببینیم چه خبره توی سایت هنوزم نمیدونستیم قراره روزی 26 هزارتا بیاد روی سایت و یهو مشقای همه مون ریخت 250 نفر در لحظه بیشترین میزانی که روی سایت بودن و توی 30 دقیقه گذشته حدودا 1900 نفر (البته این تا 2700 اینا هم میرسه) هرجوری بود روز اول رو شب کردیم و خیلی منیج میکردیم و در همون حین مشکلات مشتری رو برای بقیه ادمین هاش حل میکردیم و خلاصه خیلی حس خوبی بود برام اینکه من تازه نمیخواستم خیلی خوب کار کنم در لحظه 200 نفر رو تونستم پاسخ بدم با سرور 8 هسته شوخیه اصلا امکان ندارهصبح روز دوم:بیشترین کاربری که سامانه داشت تا روز دوم اینجا سرور خوابید :(خیلی کاربرا زیاد شدن واقعا 8 هسته جواب نمیداد واقعاااا یعنی خود با چشمان خیش دیدم 514 نفر در لحظه بودن خلاصه سریع با بچهای DevOps اومدیم و پردازنده دو برابر کردیم یعنی شد 16 هسته خیلی خوب بود بازم ولی برای 36 هزار تا یوزر اون لحظه کم میومد مانگو کمرش شکسته بود دیگه ما منابع رو نمیخواستیم بیشتر ازین درگیر کنیم از طرفی مونده بودیم چه کنیم خب من با خودم میگفتم: "توقع بیشتر میشه ازت دنا پلاست درحد پرایدم نبود که بابا مهندس ?" ساعت به ساعت کاربرا افرایش پیدا میکرد تا همین لحظه که دارم این اینجا براتون مینویسم 70K شدن خیلیه واقعا کم میاره هر دیتابیسی با این منابع من دیتای تستی هم این همه اضافه نکردم اینا همش یوزر های سایتم بودن چه میشه کرد خلاصه اون روز گذشت و ما طبق همیشه یه سری بروز رسانی ها برای مشتری انجام میدادیم تا برای گزارش گیری هاش کارش به مشکل نخوره و راه بیوفته به اصتلاح "جوابشو بدیم بره" (اسطلاح یا... ولم کنید حال ندارم).روز سوم (صبح نبود):پردازنده خیلی درگیر بود نمیدونستم چیکار کنم 16 هسته اخه همش 100 درصد بود اینجا بود که یهو یه لامپی بالای سرم ایجاد شد ببینم مانگو هم ایندکس گذاری روی دیتابیس داره یا نه (یعنی یه کاری بکنیم سریع تر بتونه سرچ کنه) با تخصصی که نداشتم شروع کردم تمام ایندکس گذاری هارو کردم (کاش عکس میگرفتم اخه باورم نمیشد اینقدر خوب باشه) 16 هسته با 300 نفر در لحظه که 100% بود یهو بعد ایندکس گذاری با 350 نفر هم بالاتر از 25 درصد نمیرفت هیچ هسته ای =) من ذوققققق چه حرکتی زدم :))) اینجا بود که فهمیدم میشد با همون 8 هسته هم به خوبی تا 600 نفر هندل کرد؛ خلاصه که ترکوندم و الان سایت با 1500 تا دانش آزمون در لحظه هم فکر نمیکنم به مشکل بخوره و هم قدرت در دستان من است به خودم کلمه شکست ناپذیر رو میدم هنوزم کل دانش آموزان خراسان رضوی نیومدن ولی من دلم نیومد این مقاله رو سریع تر ننویسم، البته اینکه وقتم نداشتم بی تاثیر نبود ?.دمتون گرم که تا اینجا اومدید و خوندید لایک و کامنت یادتون نشه کسیو تشویق میکنید که خودش همه رو تشویق میکنه ??