مطمئن هستم وبسایت هایی رو دیده باشید که یکدفعه 500 بالا میارن و یا تو حجم کاربر های
زیاد مدام پیغام و خطا دارن ولی میدونید چرا؟


Scalable یعنی چی؟

خب خیلی ساده بگیم یعنی اینکه زیر فشار کمر اپ و سرور ات خم نشه! حتی اگه زیر حملات باشی و منابع سرور ات هم محدود اما خوب چطور این اتفاق می افته اصلا؟ چطور کمر ما خم میشه؟



در واقع اپ جنگو شما محدودیت منابع و سی پی یو داره و شما هر بار با فراخوانی تایع به اصطلاح credit خرج میکنید که همون هزینه استهلاک بهش بگن فکر کنم, مثلا هر بار که شما از دیتابیس اطلاعات میخونید زمان و استهلاک به سرورتون اعمال میکنید و وقتی درخواست ها زیاد بشه boooom میترکید!
اما خوب خوشبختانه راه های مختلفی هستند که میتونید فشار رو به حداقل برسونید و مجموع اش رو من اسم اش رو میزارم scale کردن


1. Caching نعمت صرفه جو

اول از همه بگم بخاطر اینکه بتونید تغییرات و منابع مصرفی جنکو رو ببیند میدلویر django-debug-toolbar رو نصب کنید. . خب cache چی هسش؟ خیلی ساده بهتون بگم ذخیره نتایج پردازش های اپ شما در دیتابیس و استفاده از اون ها به جای پردازش دوباره بهش میتونیم بگیم سیستم caching و همین! و این کار خیلی ساده میتونه منایع و هزینه سرور شما رو به طرز وحشتناکی کم بکنه!



من چون نمیخوام اینجا کد بنویسم ارجاع تون میدم به سایت اصلی داکیومنت جنگو برای کش ها میتونید رو لینک زیر کلیک کنید https://docs.djangoproject.com/en/3.2/topics/cache


2. Gunicorn & Nginx

بصورت ذاتی جنگو از پلتفرم WSGI استفاده میکنه و البته جدیدا هم از ASGI هم پشتیبانی میکنه که میتونید راجبش تو اینترنت بخونید مطالب اش رو اما خوب این پلتفرم یجورایی ترکیب شدن اش با وب سرور های مختلف میتونه عملکرد های مختلفی رو داشته باشه و تا جایی که من تست کردم میتونید بصورت پروکسی gunicorn رو به وب سروری مثل nginx وصل کنید و بطور خودکار یک لایه صرفه جویی در منابع رو به سرور خودتون اضافه کنید



پس چیشد؟ لطفا از cli استفاده نکنید برای نسخه تجاری و nginx رو جدی بگیرید این هم یه لینک که خیلی خوب بهتون راه اندازی ایش رو یاد میده لینک




3. کد تمیز

بهتون یه قولی رو بدم و اون اینه که اگه کدت کثیف باشه و حتی کار بکنه کدتون در آینده اینقدر بی کیفیت و بلااستفاده و پر از مشکل میشه کدتون که دیگه پدر کسی که قراره ریفکتور کنه در میاد پس همیشه کد تمیز و ماژولار با لایه بندی درست مد نظرتون باشه . بعد هم یه سری نکات هستش که میتونه سرعت و هزینه رو پایین بیاره مثل همون مثلا معروف که تعداد طول یه ابجکت برگشتی مدل رو بهتون میگه که همگی به صورت دیفالت از روش زیر استفاده میکنید

image

و این کار اشتباه هستش که چون میاد یه دور لوپ میره و پردازش داده ایی رو انجام میده که لازم نیستش و شما به سادگی میتونید با استفاده از متود count تعداد رو بدست بیارید

image




4. یه توصیه دوستانه

لطفا لطفا کد تمیز بنویسید. آموزش های بی کیفیت فارسی رو نبینید. اگه خیلی اپ کوچیکی دارید یا فقط چند تا api ساده من پیشنهاد میکنم برای جلوگیری از اتلاف وقت از fast api استفاده کنید و خودتون رو راحت کنید . . همین, امیدوارم مطلب براتون مفید بوده باشه