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

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

این اولین پست ویرگولم هست بهتره یک معرفی ریز از خودم برم پس، سلام، من حسن عرب برزو ام یک برنامه نویس جوان و خلاق و ایده پرداز و خیلی پر تلاش البته اینارو بقیه میگن :دی تقریبا تا الان راستشو بگم تقریبا 3.5 ساله که برنامه نویسی شروع کردم خواب و خوراک ندارم از همه چیزم برای هدفم زدم اینقدر که با همینقدر زمان کم اندازه یک فرد با 6 سال سابقه کاری چیزی میدونم و تجربه دارم خودمم نفهمیدم چیشد که این شد یا من خیلی سرعتی میرم جلو یا اونا خیلی کند بگذریم (املامم خیلی ضعیفه الان حس میکنم بگزریم درسته ولی ولش کن :دی).من همیشه از پروژه هایی انجام میدم 3-4 لول جلو ترم یعنی پروژه در حد پراید انجام میدم ولی درحد دنا پلاس دانش دارم (یه حمایت تولید ملی ریز هم اومدم براتون دیگه)؛ قضیه از این قراره که تو ذهنم بود اه بابا این پروژه های درحد پراید انجام میدم چیه خستم کردن باید هرچه سریع تر یه فکری بکنم این در حد پرایده الانه باید بشه در حد دنا پلاس خلاصه همینطور که زندگی عصف بارمو میگذروندم (این عصف هم شما درست بخونید) از شرکتی که کار میکنم بهم زنگ زدن گفتن “مهندس ما یک پروژه دستمون اومده تیم PHP کلا درگیره شما خلوت تری یه حرکتی بزن یه آزمون آنلاینه باید بزنیمش هیچ راهی نداریم” گفتم ای بابا منکه 8 ساعتم فوله بعدشم برای خودم میگذرونم عشقو حالو این حرفا (الکی مثلا) اومدم بگم نمیتونم شرمنده گفتم نه اینجاست که باید پرایده رو بکنی دنا پلاس گفتم: “باشه ولی به شرطی بزارین هرچی خودم میدونم بزنم این چرت و پرتایی تو شرکت میزنم قالب نکنی بهم دوباره بزنم (اینا تو ذهنم بود خیلی موادبم ها :دییی)” اونم اوکی داد ولی 2 هفته تایم دادن، من 😑 پروژه آزمون آنلاین 😆 ساعت گرینویچ 😒 خلاصه شروعش کردیم.کتک نزدم زدن یعنی باچی انجام دادم 😂، منکه بابا روحمم خبر نداشت پروژه چیه و این داستان ها اومدم با همون دنا پلاسه اما با یک آپدیت خیلی فورس زدمش و استارت خورد اما آخر دو هفته شده بود و من عملا تازه بروز رسانی تموم کرده بودم :دی یعنی آپدیت هم میتونست نباشه اما چون سرور نداشتیم و مشتری میگفت چون قبلی با PHP بوده من اینم میخوام سرور لینوکس باشه ماهم دیگه گفتیم ولش کن بریم NoSQL (یک دیتابیس خیلی با سرعت بالا در داده های حجیم) دیگه وقت این نبود که چطوری sql روی لینوکس کانفیگ کنیم همین بروزرسانی روهم خواب و خوراک نداشتم انصافا کلا همش سوتفاهم بود ما چمیدونیم که 26 هزارتا روزی میاد (ولی حسم میگه بهم نگفتن تا نترسم دمشون گرم کار خوبی کردن 😎 خلاصه… اینم بگم پروژه تقریبا 1 ماه و یک هفته ای تموم شد ولی رُسم کشیده شد (اولین باره رس مینویسم 😃)ساده مینویسم ولی بازم اگه برنامه نویس نیستی اینو بگذار و بگذر بر تیتر بعدیDocker (برای وصل کردن پروژه ها بهم)IdentityServer4 (SSO و IDP هم میگنش)Angular10 ssr + nodejsDDD (یک مفهوم برای طراحی نرم افزار)CQRS (الگوی طراحی نرم افزار)Mediator (الگوی طراحی نرم افزار)MediatR (دوتای بالا توی این کتابخونه پیاده سازی شده)NSwag (سخته گفتنش)NukeBuild (کمک میکنه به مورد پایین)Full Autogenerate Code (سعی میکنه یه سری فایل هارو خودکار بسازه)MongoDB (اینم که دیتابیسمون)ریز میزاشم نمیگم دیگه، پیاده سازی داکر هم به این صورت هست که۵ تا کانتینیر دارهیکی انگولار رو با نود جی اس بالا میاره برا فرانتیکی خود مانگو که توی داکرنگهداری میشه (دیگه نمیدونم چیشد این کارو کردیم زیاد مهم نبود باشه اون تو)یکی پروژه api که با معماری هایی بالا گفتم پیاده شدهیکی هم سیستم احراز هویت با دیتابیس جدا و کلا مستقل از پروژه api پروژه api میرن به اون درخواست میدن ببینن scope هاشون احراز هویت هستن یا نه دقیقا مثل گوگل شبیه لاگین با گوگل میتونیم لاگین با حسن داشته باشیم 😅همه اینها هم با سرور nginx بهم وصل میشه و روی دوتا دامنه جدا بالا میاد یکی احراز هویت یکی کلاینت + api (بعد ها مجبور شدیم اینو از توی کانتینر در بیاریم ولی اولش توی کانتینر بود)اینم بگم 90 درصد کارشو من خودم کردم کسی کمک نکرد یه چیزایی هم به بچهای DevOps گفتم اما جا داره بگم کمک اونا نبود موفق نمیشدیم دمشون گرم حالا که فکر میکنم من 85 کافیه برام :دیهمین اول بگم که یا حسین ما دو روز قبلی دانش آموزان بخوان بیان وارد سایت بشن پروژه رو آخر وقت تحویل دادیم یعنی جمعه 12 دی 1399 اینا یک روز قبل تحویل پروژه اومدن از صبح هر باگ پیدا میکردن هی من باید رفع میکردم سختتتتت تریننننن روز کاری عمرم و خیلی پر استرس هر ثانیه به فردا فکر میکردم دیوانه میشدم بیشتر استرس میگرفتم البته جا داره ازونا تشکر کنم با وجود همه مشکلات بازم استرس بیشتر بهم نمیدادن (; .درحالی که صبح سرحال اومده بودم بهم گفتن ساعتای 10 مشتری میاد گفتم: “خب بیان 😏” اینا اومدن خیلی سبر وایسادم گفتم: “برین تست کنید” رفتن همون لحظه گفتن: “اینکه هم لاگین هم نمیشه” هرجوری سعی کردم خودمو قانع کنم مشکل از اوناس گوشیاشون بدرد نمیخوره :دی پذیرفتم و رفتم دست به کد شدم بعد 3 4 ساعت تلاش بی وقفه هی میگفتن “فلانیم مشکل ورود داره باشه بابا بزار همینو حل کنم اه” خلاصه جونم بگه براتون آقا ما بعد 3 4 ساعتمون فهمیدیم مشکل یک دیتای null هست که داره ردو بدن میشه میخواستم خودمو … بدم بخاطر آپدیت هول هولکی جمعه شون بود خلاصه همون حین هم بهترین دوستم گفت لیوانت رو بده برم برات چایی بریزم (تو شرکت ما برای کسی چایی بریزی ته معرفته دیگه 😂) چایی مونده بود و من درحال مستقر کردن سورس روی سرور سیستمم با 12 گیگ رم به خاطر یه سری مشکلات عرضه یه خروجی گرفتن از سورس رو نداشت و هر پابلیش حدودا 20 دقیقه طول میکشید بعد اینکه ناهارم نخورده بودم درستش کردم خودمو با کاردک از روی زمین جمع کردم رفتم گفتم زنگ بزنید بگید همهههه وارد بشن خندشون گرفته بود منم درحالی که چایی میخوردم و از پنجره پشت میز مدیریت به افق خیره شده بودم لذت میبردم از زندگیم چاییم تموم نشده بود که…گفتن مدارس ناقص (ناغص ناقس ناغس و… اولی خوشگل تر بود) حالا من بازم مثل همیشه نخواستم قبول کنم گفتم مشکل اکسل خودتونه بابا چی میگید برید اونو چک کنید رفتن چک کردن ساعت حدود 15 ظهر بود که گفتن آقا اکسل درسته من موندم و یک عالم دیتا توی دیتابیس که نمیشه دست بزنیمشون چه کنیم؟ باید به دیتابیس وصل بشیم بعد با بچهای DevOps حرف زدم گفتن بیا پورتش رو برات باز کنیم وصل شو بررسی کن آقا پورت رو باز کردن و بعد کل بررسی 1 ساعته به نتیجه نرسیدم گفتم حسن شکست خوردی؟ نه نه من با همه خستگیم میتونم این باید جز افتخاراتم باشه دوباره شروع کردم فهمیدم در هر ناحیه یک سری مدارس هم نام وجود داره اما زمانی من اکسل رو اضافه کردم فقط نام مدارس بررسی کردم؛ خب الان هر مشکلی میتونه باعث این بشه که من خسارت بزرگی به شرکت بزنم تحت هیچ شرایطی نمیشد دیتابیس پاک بشه چون توکن های کاربرای درحال تست به باگ میخورد و خیلی داستان میشد با دقت بسیار زیاد و دستان لرزان یک سری شرط اضافه کردم و زدم حدود 5 هزارتا مدرسه استان خراسان رضوی (شایدم 4 هزار مطمئن نیستم) دوباره بررسی و اضافه بشه چون پای اینترنت اومده بود وسط حدودا 20 دقیقه طول کشید و آخزشم به خطا خورد هیچی معلوم نبود (لعنت به مانگو) حس کردم شکست خوردم و یک عالمه دیتای الکی اضافه شده اما اینطور نبود حالا من موندم و یک عالمه خط کد که نمیدونم خطا مال کجاست یک حدث زدم و کدو نوشتم و اضافه کردم زدم این دفه 25 دقیقه گذشته بود مطمئن بودم اون باگ دیگه حل شده حالا نگران بودم که باگ دیگه نخوره که خوشبختانه هیچ مشکلی به وجود نیومد و همه چیز درست بود و من موفق شدممممم ساعت 6 عصر بود واقعا خسته آدمی که نه ناهار خورده نه صبحونه دو لیوان چایی فقط با خستگی تمام راهی خونه شدم و دیگه هیچ مشکلی پیدا نشد در طول اجرا یک سری باگ و توسعه هایی در سمت پنل ادمین بود که بگذیم مهم نیست اوناعکس گرفته شده از گوگل آنالیتیکس روز اول یهویی :)خب الان وقتش بود که ببینیم دنا پلاس ما چه کرده و تا چقدر جواب میده اصلا کم بیاره سرور بخوابه چی؟ چیزی که مشتری خیلی ازش میترسید.خب هرکاری کردیم که ببینیم از توی سرور میشه دید چند نفر توی سایتن هیچی مشخص نشد و دقیق نبود خیلی سریع درحالی که منابع سیستم تقریبا فول بود اومدیم و یه گوگل آنالیتیکس روش آوردیم بالا تا دقیق ببینیم چه خبره توی سایت هنوزم نمیدونستیم قراره روزی 26 هزارتا بیاد روی سایت و یهو مشقای همه مون ریخت 250 نفر در لحظه بیشترین میزانی که روی سایت بودن و توی 30 دقیقه گذشته حدودا 1900 نفر (البته این تا 2700 اینا هم میرسه) هرجوری بود روز اول رو شب کردیم و خیلی منیج میکردیم و در همون حین مشکلات مشتری رو برای بقیه ادمین هاش حل میکردیم و خلاصه خیلی حس خوبی بود برام اینکه من تازه نمیخواستم خیلی خوب کار کنم در لحظه 200 نفر رو تونستم پاسخ بدم با سرور 8 هسته شوخیه اصلا امکان ندارهبیشترین کاربری که سامانه داشت تا روز دوم اینجا سرور خوابید :(خیلی کاربرا زیاد شدن واقعا 8 هسته جواب نمیداد واقعاااا یعنی خود با چشمان خیش دیدم 514 نفر در لحظه بودن خلاصه سریع با بچهای DevOps اومدیم و پردازنده دو برابر کردیم یعنی شد 16 هسته خیلی خوب بود بازم ولی برای 36 هزار تا یوزر اون لحظه کم میومد مانگو کمرش شکسته بود دیگه ما منابع رو نمیخواستیم بیشتر ازین درگیر کنیم از طرفی مونده بودیم چه کنیم خب من با خودم میگفتم: “توقع بیشتر میشه ازت دنا پلاست درحد پرایدم نبود که بابا مهندس 😏” ساعت به ساعت کاربرا افرایش پیدا میکرد تا همین لحظه که دارم این اینجا براتون مینویسم 70K شدن خیلیه واقعا کم میاره هر دیتابیسی با این منابع من دیتای تستی هم این همه اضافه نکردم اینا همش یوزر های سایتم بودن چه میشه کرد خلاصه اون روز گذشت و ما طبق همیشه یه سری بروز رسانی ها برای مشتری انجام میدادیم تا برای گزارش گیری هاش کارش به مشکل نخوره و راه بیوفته به اصتلاح “جوابشو بدیم بره” (اسطلاح یا… ولم کنید حال ندارم).پردازنده خیلی درگیر بود نمیدونستم چیکار کنم 16 هسته اخه همش 100 درصد بود اینجا بود که یهو یه لامپی بالای سرم ایجاد شد ببینم مانگو هم ایندکس گذاری روی دیتابیس داره یا نه (یعنی یه کاری بکنیم سریع تر بتونه سرچ کنه) با تخصصی که نداشتم شروع کردم تمام ایندکس گذاری هارو کردم (کاش عکس میگرفتم اخه باورم نمیشد اینقدر خوب باشه) 16 هسته با 300 نفر در لحظه که 100% بود یهو بعد ایندکس گذاری با 350 نفر ههم بالاتر از 25 درصد نمیرفت هیچ هسته ای =) من ذوققققق چه حرکتی زدم :))) اینجا بود که فهمیدم میشد با همون 8 هسته هم به خوبی تا 600 نفر هندل کرد؛ خلاصه که ترکوندم و الان سایت با 1500 تا دانش آزمون در لحظه هم فکر نمیکنم به مشکل بخوره و هم قدرت در دستان من است به خودم کلمه شکست ناپذیر رو میدم هنوزم کل دانش آموزان خراسان رضوی نیومدن ولی من دلم نیومد این مقاله رو سریع تر ننویسم، البته اینکه وقتم نداشتم بی تاثیر نبود 😂.دمتون گرم که تا اینجا اومدید و خوندید لایک و کامنت یادتون نشه کسیو تشویق میکنید که خودش همه رو تشویق میکنه 😁💙

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *