Gunicorn with Uvicorn
گونیکورن یه عالمه فیچر و پراسس منیجر خیلی خوبی داره به همین دلیل خیلی خوب می شد از ویژگی های خوب gunicron توی ASGI application server استفاده کنیم.
برای این مورد Uvicorn یک worker class گونیکورن در اختیار ما قرار داده که به ما این امکان رو میده برنامه های ASGI رو با تموم مزایای Uvicorn اجرا کنیم در حالی که مدریت ترافیک و در کل process management با ویژگی های بالغ و عالیه گونیکورن انجام بشه.
همچنین پیشنهاد خود Uvicorn اینه که تو حالت پروداکشن با gunicorn اجراش کنیم.
داکیومنت Fastapi راجب Gunicorn with Uvicorn رو براتون میگم:
خب تا اینجا شما احتمالا با یک server program مانند Uvicorn برنامه رو بصورت single process اجرا کردید.
در زمان دپلوی کردن اپلیکیشن شما ممکنه بخواید اپلیکیشنتون رو بجای single process به حالت multiple cores اجراش کنید تا بتونید ریکوئست های بیشتری رو هندل کنید(البته اگه شما میخواید توی کوبرنتیز اجرا کنید احتمالا ترجیح میدید توی هر کانتینر با uvicorn و بصورت single process اجراش کنید)
با استفاده از این ترکیب،Gunicorn به عنوان process manager عمل می کنه و پشت پورت listening رو انجام میده اما ارتباط رو با ورکر کلس Uvicorn برقرار می کنه.
نحوه استفاده:
اول از همه guncorn و uvicorn رو نصب می کنیم
مثال نحوه اجرا کردن:
gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind :8000
تعداد ورکر رو چند تا بذارم؟
تعداد ورکر هارو بر اساس تعداد کلاینت هایی که دارید سعی نکنید خداتوکلی تقسیم کنید یچیزی در بیارید قرار بدید😕 gunicron برای رسیدگی صد یا هزاران درخواست تو ثانیه فقط به 4 الی 12 تا ورکر نیاز داره.
اینم یه فرمول برای اینکه تعداد ورکر رو چقدر بذارید
تعداد هسته رو ضربدر دو می کنیم سپس به علاوه یک می کنیم.
منابع این پست:
https://fastapi.tiangolo.com/deployment/server-workers/
https://www.uvicorn.org/#running-with-gunicorn
https://docs.gunicorn.org/en/stable/design.html#:~:text=Gunicorn%20should%20only%20need%204,workers%20to%20start%20off%20with.
#python #backend
@khat_academy
گونیکورن یه عالمه فیچر و پراسس منیجر خیلی خوبی داره به همین دلیل خیلی خوب می شد از ویژگی های خوب gunicron توی ASGI application server استفاده کنیم.
برای این مورد Uvicorn یک worker class گونیکورن در اختیار ما قرار داده که به ما این امکان رو میده برنامه های ASGI رو با تموم مزایای Uvicorn اجرا کنیم در حالی که مدریت ترافیک و در کل process management با ویژگی های بالغ و عالیه گونیکورن انجام بشه.
همچنین پیشنهاد خود Uvicorn اینه که تو حالت پروداکشن با gunicorn اجراش کنیم.
داکیومنت Fastapi راجب Gunicorn with Uvicorn رو براتون میگم:
خب تا اینجا شما احتمالا با یک server program مانند Uvicorn برنامه رو بصورت single process اجرا کردید.
در زمان دپلوی کردن اپلیکیشن شما ممکنه بخواید اپلیکیشنتون رو بجای single process به حالت multiple cores اجراش کنید تا بتونید ریکوئست های بیشتری رو هندل کنید(البته اگه شما میخواید توی کوبرنتیز اجرا کنید احتمالا ترجیح میدید توی هر کانتینر با uvicorn و بصورت single process اجراش کنید)
با استفاده از این ترکیب،Gunicorn به عنوان process manager عمل می کنه و پشت پورت listening رو انجام میده اما ارتباط رو با ورکر کلس Uvicorn برقرار می کنه.
نحوه استفاده:
اول از همه guncorn و uvicorn رو نصب می کنیم
مثال نحوه اجرا کردن:
gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind :8000
تعداد ورکر رو چند تا بذارم؟
تعداد ورکر هارو بر اساس تعداد کلاینت هایی که دارید سعی نکنید خداتوکلی تقسیم کنید یچیزی در بیارید قرار بدید😕 gunicron برای رسیدگی صد یا هزاران درخواست تو ثانیه فقط به 4 الی 12 تا ورکر نیاز داره.
اینم یه فرمول برای اینکه تعداد ورکر رو چقدر بذارید
تعداد هسته رو ضربدر دو می کنیم سپس به علاوه یک می کنیم.
منابع این پست:
https://fastapi.tiangolo.com/deployment/server-workers/
https://www.uvicorn.org/#running-with-gunicorn
https://docs.gunicorn.org/en/stable/design.html#:~:text=Gunicorn%20should%20only%20need%204,workers%20to%20start%20off%20with.
#python #backend
@khat_academy
❤2👍2🥰1
مقایسه سرعت زبون های برنامه نویسی #بک_اند ⚡️ کدوم زبون انتخاب کنیم؟
و کلی سوال دیگه که کمکمون میکنن معنی پرفورمنس و بهبود پرفورمنس رو توی سرویس های بکاند متوجه بشیم و با این اصطلاح ها که روزمره استفاده میشن با بنچ مارک و عدد بهتر آشنا شیم.
[MHRCode]
https://youtu.be/TvWF1d1jLtY
چرا APIها کند میشن؟ باتل نک یعنی چی؟ چی میتونه کمک کنه پرفورمنس سرویسمون بهتر شه؟ نقش OS Thread ها چیه؟ کانکارنسی یعنی چی؟ فرق Async با Thread چیه؟ پرفورمنس Development Server با Gunicorn در Django چه فرقی داره؟چرا توی Golang مثل Javascript از Async/Await استفاده نمیکنیم؟
و کلی سوال دیگه که کمکمون میکنن معنی پرفورمنس و بهبود پرفورمنس رو توی سرویس های بکاند متوجه بشیم و با این اصطلاح ها که روزمره استفاده میشن با بنچ مارک و عدد بهتر آشنا شیم.
[MHRCode]
https://youtu.be/TvWF1d1jLtY
YouTube
مقایسه سرعت زبون های برنامه نویسی #بک_اند ⚡ کدوم زبون انتخاب کنیم؟
زبان های #برنامه_نویسی مختلفی برای #Backend هستن و خیلی خوبه به عنوان یک برنامه نویس بک اند نقاط قوت و ضعفشون رو بشناسیم. باتل نک اکثر اپلیکیشن های بک اندی I/O هستش و توی این چند ساله به روش های مختلف تونستیم اون رو بهبود بدیم و توی این ویدیو به این روش ها…
🔥8👀3👍2
چند تا سوال خوب تو سطح میدلول به بالا برای Back-end developer(python & django)
1. چگونه از race condition در برنامههای چند نخی (multi-threaded) یا چند کاربره (multi-user) جلوگیری میکنید؟ از چه تکنیکها یا ابزارهایی استفاده میکنید؟
این سوال از متقاضی میخواهد تا درک خود را از مفهوم race condition و راهحلهای آن نشان دهد. او باید به مواردی مانند قفلها (locks)، عبارات F در Django ORM، عملیاتهای اتمیک (atomic) و همچنین استفاده از سیستمهای صف (queuing systems) اشاره کند.
2. برای بهینهسازی پرسوجوهای پایگاهداده در Django چه تکنیکهایی را پیشنهاد میکنید؟ مزایا و معایب هر یک را توضیح دهید.
این سوال از متقاضی میخواهد تا دانش خود را در زمینه بهینهسازی پرسوجوهای پایگاهداده در Django نشان دهد. او باید به مواردی مانند ایندکسگذاری، انتخاب صحیح فیلدها، استفاده از select_related و prefetch_related، و همچنین کشکردن (caching) اشاره کند.
3. چگونه میتوانید از حملات (Cross-Site Scripting یا XSS) و حملات (Cross-Site Request Forgery یا CSRF) در برنامه Django خود جلوگیری کنید؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه امنیت وب و جلوگیری از حملات رایج نشان دهد. او باید به مواردی مانند استفاده از
4. چگونه از یک وضعیت deadlock در برنامههای چند نخی یا چند کاربره جلوگیری میکنید؟ راهحلهای پیشنهادی شما برای مدیریت deadlock چیست؟
این سوال از متقاضی میخواهد تا درک خود را از مفهوم deadlock و راهحلهای آن نشان دهد. او باید به مواردی مانند جلوگیری از اشتراک منابع، اولویتبندی درخواستها، استفاده از الگوریتمهای پیشگیری از deadlock مانند الگوریتم بانکر (Banker's Algorithm)، و همچنین استفاده از تایماوتها (timeouts) اشاره کند.
5. چگونه میتوانید از مشکلات مربوط به حافظه در برنامههای Python خود جلوگیری کنید؟ راهحلهای پیشنهادی شما برای مدیریت حافظه چیست؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه مدیریت حافظه در Python نشان دهد. او باید به مواردی مانند استفاده از ژنراتورها (generators) و ایتراتورها (iterators) برای پردازش دادههای بزرگ، آزادسازی منابع به موقع، استفاده از کتابخانههای مدیریت حافظه مانند `tracemalloc`، و همچنین تکنیکهای دیگر مانند پروفایلگیری (profiling) و بهینهسازی الگوریتمها اشاره کند.
6. چگونه میتوانید از مشکل N+1 Query در Django ORM جلوگیری کنید؟ راهحلهای پیشنهادی شما برای این مشکل چیست؟
این سوال از متقاضی میخواهد تا درک خود را از مشکل N+1 Query و راهحلهای آن در Django ORM نشان دهد. او باید به مواردی مانند استفاده از
7. چگونه میتوانید از مشکلات مربوط به مقیاسپذیری (scalability) در برنامههای وب جلوگیری کنید؟ راهحلهای پیشنهادی شما برای بهبود مقیاسپذیری چیست؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه طراحی و پیادهسازی سیستمهای مقیاسپذیر نشان دهد. او باید به مواردی مانند استفاده از معماریهای چند لایه (multi-tier architecture)، پخش بار (load balancing)، افزونگی (redundancy)، کشکردن (caching)، شارد کردن (sharding) پایگاه داده، و همچنین تکنیکهای دیگر مانند استفاده از سیستمهای توزیعشده (distributed systems) و محاسبات ابری (cloud computing) اشاره کند.
8. چگونه میتوانید از مشکلات مربوط به امنیت در برنامههای وب جلوگیری کنید؟ راهحلهای پیشنهادی شما برای بهبود امنیت چیست؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه امنیت در برنامههای وب نشان دهد. او باید به مواردی مانند استفاده از رمزگذاری قوی، اعتبارسنجی ورودیها، جلوگیری از حملات تزریق (injection attacks)، استفاده از پروتکلهای امن مانند HTTPS، مدیریت دقیق دسترسیها (access control)، و همچنین تکنیکهای دیگر مانند بهروزرسانی منظم سیستمها اشاره کند.
#interview #backend
@Syntax_fa
1. چگونه از race condition در برنامههای چند نخی (multi-threaded) یا چند کاربره (multi-user) جلوگیری میکنید؟ از چه تکنیکها یا ابزارهایی استفاده میکنید؟
این سوال از متقاضی میخواهد تا درک خود را از مفهوم race condition و راهحلهای آن نشان دهد. او باید به مواردی مانند قفلها (locks)، عبارات F در Django ORM، عملیاتهای اتمیک (atomic) و همچنین استفاده از سیستمهای صف (queuing systems) اشاره کند.
2. برای بهینهسازی پرسوجوهای پایگاهداده در Django چه تکنیکهایی را پیشنهاد میکنید؟ مزایا و معایب هر یک را توضیح دهید.
این سوال از متقاضی میخواهد تا دانش خود را در زمینه بهینهسازی پرسوجوهای پایگاهداده در Django نشان دهد. او باید به مواردی مانند ایندکسگذاری، انتخاب صحیح فیلدها، استفاده از select_related و prefetch_related، و همچنین کشکردن (caching) اشاره کند.
3. چگونه میتوانید از حملات (Cross-Site Scripting یا XSS) و حملات (Cross-Site Request Forgery یا CSRF) در برنامه Django خود جلوگیری کنید؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه امنیت وب و جلوگیری از حملات رایج نشان دهد. او باید به مواردی مانند استفاده از
django.utils.html.escape
برای خروجیهای HTML، تنظیمات SECURE_BROWSER_XSS_FILTER
و `X_FRAME_OPTIONS`، استفاده از توکنهای CSRF در Django، و همچنین تکنیکهای دیگر مانند اعتبارسنجی ورودیها اشاره کند.4. چگونه از یک وضعیت deadlock در برنامههای چند نخی یا چند کاربره جلوگیری میکنید؟ راهحلهای پیشنهادی شما برای مدیریت deadlock چیست؟
این سوال از متقاضی میخواهد تا درک خود را از مفهوم deadlock و راهحلهای آن نشان دهد. او باید به مواردی مانند جلوگیری از اشتراک منابع، اولویتبندی درخواستها، استفاده از الگوریتمهای پیشگیری از deadlock مانند الگوریتم بانکر (Banker's Algorithm)، و همچنین استفاده از تایماوتها (timeouts) اشاره کند.
5. چگونه میتوانید از مشکلات مربوط به حافظه در برنامههای Python خود جلوگیری کنید؟ راهحلهای پیشنهادی شما برای مدیریت حافظه چیست؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه مدیریت حافظه در Python نشان دهد. او باید به مواردی مانند استفاده از ژنراتورها (generators) و ایتراتورها (iterators) برای پردازش دادههای بزرگ، آزادسازی منابع به موقع، استفاده از کتابخانههای مدیریت حافظه مانند `tracemalloc`، و همچنین تکنیکهای دیگر مانند پروفایلگیری (profiling) و بهینهسازی الگوریتمها اشاره کند.
6. چگونه میتوانید از مشکل N+1 Query در Django ORM جلوگیری کنید؟ راهحلهای پیشنهادی شما برای این مشکل چیست؟
این سوال از متقاضی میخواهد تا درک خود را از مشکل N+1 Query و راهحلهای آن در Django ORM نشان دهد. او باید به مواردی مانند استفاده از
select_related
و `prefetch_related`، بهینهسازی پرسوجوها با استفاده از ایندکسها، و همچنین تکنیکهای دیگر مانند کشکردن (caching) اشاره کند.7. چگونه میتوانید از مشکلات مربوط به مقیاسپذیری (scalability) در برنامههای وب جلوگیری کنید؟ راهحلهای پیشنهادی شما برای بهبود مقیاسپذیری چیست؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه طراحی و پیادهسازی سیستمهای مقیاسپذیر نشان دهد. او باید به مواردی مانند استفاده از معماریهای چند لایه (multi-tier architecture)، پخش بار (load balancing)، افزونگی (redundancy)، کشکردن (caching)، شارد کردن (sharding) پایگاه داده، و همچنین تکنیکهای دیگر مانند استفاده از سیستمهای توزیعشده (distributed systems) و محاسبات ابری (cloud computing) اشاره کند.
8. چگونه میتوانید از مشکلات مربوط به امنیت در برنامههای وب جلوگیری کنید؟ راهحلهای پیشنهادی شما برای بهبود امنیت چیست؟
این سوال از متقاضی میخواهد تا دانش خود را در زمینه امنیت در برنامههای وب نشان دهد. او باید به مواردی مانند استفاده از رمزگذاری قوی، اعتبارسنجی ورودیها، جلوگیری از حملات تزریق (injection attacks)، استفاده از پروتکلهای امن مانند HTTPS، مدیریت دقیق دسترسیها (access control)، و همچنین تکنیکهای دیگر مانند بهروزرسانی منظم سیستمها اشاره کند.
#interview #backend
@Syntax_fa
👍15
🔥یه مقاله تازه و داغ در مورد scale کردن بکند با حداقل منابع روی سرور
خیلی نکات جالب و مهمی رو بهش اشاره میکنه، از جمله اینکه لازمه observability pipeline رو قبل از هر چیزی راه اندازی کنید که بتونید بر اساس داده و اطلاعات تصمیم گیری کنید. این نکته خیلی مهمی هست که ما خیلی وقت ها فراموش می کنیم.
وقتی مشکل performanceی داریم اول باید در مورد مشکل مون داده و اطلاعات جمع آوری کنیم. بعدش بریم سراغ اینکه حالا چطور مشکل رو حل کنیم.
مقاله جذابیه که در مورد موارد مختلفی برای بهینه سازی صحبت میکنه از connection pooling گرفته تا ایندکس دیتابیس و goroutine throttling
Scaling Backend to 1M requests with just 2GB ram ⚡️
https://dev.to/rikenshah/scaling-backend-to-1m-requests-with-just-2gb-ram-4m0c
@gocasts
@Syntax_fa
#backend #golang
خیلی نکات جالب و مهمی رو بهش اشاره میکنه، از جمله اینکه لازمه observability pipeline رو قبل از هر چیزی راه اندازی کنید که بتونید بر اساس داده و اطلاعات تصمیم گیری کنید. این نکته خیلی مهمی هست که ما خیلی وقت ها فراموش می کنیم.
وقتی مشکل performanceی داریم اول باید در مورد مشکل مون داده و اطلاعات جمع آوری کنیم. بعدش بریم سراغ اینکه حالا چطور مشکل رو حل کنیم.
مقاله جذابیه که در مورد موارد مختلفی برای بهینه سازی صحبت میکنه از connection pooling گرفته تا ایندکس دیتابیس و goroutine throttling
Scaling Backend to 1M requests with just 2GB ram ⚡️
https://dev.to/rikenshah/scaling-backend-to-1m-requests-with-just-2gb-ram-4m0c
@gocasts
@Syntax_fa
#backend #golang
DEV Community
Avoiding Beginner Mistakes Hampering You to Scale Backend⚡️
This blog covers how I unlocked performance that allowed me to scale my backend from 50K requests →...
❤7🔥2