<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Ali Rahmani</title>
        <link>https://virgool.io/feed/@ali93rahmani</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 22:03:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/37209/avatar/pLwClu.jpeg?height=120&amp;width=120</url>
            <title>Ali Rahmani</title>
            <link>https://virgool.io/@ali93rahmani</link>
        </image>

                    <item>
                <title>چگونه اندپوینت ها را پروفایل کنیم(Dajngo + silk)</title>
                <link>https://virgool.io/@ali93rahmani/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A7%D9%86%D8%AF%D9%BE%D9%88%DB%8C%D9%86%D8%AA-%D9%87%D8%A7-%D8%B1%D8%A7-%D9%BE%D8%B1%D9%88%D9%81%D8%A7%DB%8C%D9%84-%DA%A9%D9%86%DB%8C%D9%85dajngo-silk-djl3ok969pvy</link>
                <description>سلامچند روز پیش با دغدغه اینکه چطوری performance سیستمی که نوشتم رو ببرم بالاتر از خواب بیدار شدم. توی جلسه daily هم لید تیم کلاینت میگفت چرا بعضی از اندپوینت ها گاهی کار میکنن و گاهی نه؟من هم گفتم ماست من ترش نیست و اندپوینت مد نظر درسته و مشکل از سمت خودته.با این جواب ها خیلی به توافق نرسیدیم و قرار شد که ببینم ایراد از کجاست.بعد از اون دنبال یک ابزاری بودم که بتونیم همه اندپوینت هارو پروفایل کنیم و تیم کلاینت خودش بتونه ببینه داره چیکار میکنه.با این ذهنیت که اگر من همچین مشکلی دارم پس حتما یکی دیگه هم این رو داشته و حلش کرده شروع کردم به جست و جو کردن راه حل.نتیجه تمام جست و جوی من ختم شد به ابزاری به اسم silk که با دستور &#x27;pip install django-silk&#x27; نصب می‌شود. با اضافه کردن به INSTALLED APPS و MIDDLEWARE و بعدش زدن دستور python manage.py migrate این ابزار آماده استفاده است. میتونید دکوریتورش رو به اندپوینت اضافه اش کنید و خودش موارد زیر رو حساب میکنه و توی مرورگرتون نشون میده و یک فیلتر خوبی هم داره که کلی کار راه می اندازه.1- Overall Time2- Queries Time3- Queries Count4- Method5- Status Code6- URL7- Receive timeبا کلیک کردن روی هر کدوم از کارت های این صفحه موارد زیر می آیدDetail:1- Request Headers2- Response Headers3- Raw Response Body4- Response Body5- Curl6- Django Test ClientSQL:1- All Table used and joins count2- Execution Time (ms)CProfile:1- The below is a dump from the cPython profiler.استفاده اصلی من از سیلک فهمیدن performance سیستمی که نوشتم چون کامل همه چی رو نشون میده. و لازم هم نیست برو توی کانتینر چیزی رو چک کنم یا اینکه برم توی sentry و ارور ها رو ببینم. میتونم همون ریکوئست را دوباره تکرار کنم و ببینم چه اتفاقی می افتد.راستی سیلک فقط برای سوپر یوزر ها هم فعال است.نمونه از صفحه تحلیل کوئری های یک اندئوینتلینک سایت سیلکhttps://silk.readthedocs.io/en/latest/تجربه خیلی مهم:سیلک رو به هیچ وجه نبرید داخل پروداکشن چون مقدار زیادی رایت و دلیت روی دیتابیس داره که با افزایش تعداد رکوئست ها و با توجه به حساس بودنش به همه اندپوینت ها نرخ رایت هم افزایش پیدا میکنه. خود سیلک تعداد 10000 تا رکوئست رو نگه میداره یعنی اگر شما در مدت زمانی که ریسپانس رو اماده میکنید اگر 10000 تا رکوئست بیاد سمتتون هنوز روی دیتابیس یک پروسس برای رایت روی رکورد سیلک باز هست و داره کار میکنه (یعنی اون رکورد رو لاک کرده) و در همون مدت رکوئست میشه ده هزارمین رکورد دیتابیس سیلک و تریگر فعال میشه که پاکش کنه. حالا یک پروسس میخواد رایت کنه و یکی دیگه دیلیت اینجاست که دیتابیس ارور ددلاک برمیگردونه پس اتفاقی که میفته دیلیت از رایت عقب میفته و همه تمرکز سیستم میره سمت پروسس های دیلیت یعنی بقیه کار که مربوط جواب دادن به رکوئست ها کند میشه و سیستم بعد از مدتی قفل میکنه عملا.این ماجرای یک روز تعطیل من بود که بعد از چندین ساعت مسئله رو پیدا کردم و توی نیم ساعت با یک راه حل ساده برطرفش کردم.راه حل : یک متغیر محیطی مثل SILK_ACTIVATION ایجاد کنید و هر وقت سیلک رو میخواستید اون رو فعال کنید. مثل DEBUG.شاید بگید اون ده هزار را به یک میلیون تغییر میدید ولی پاسخ اینجاست که تا کجا افزایش میدید ؟‌چون سیلک حجم قابل توجهی از دیتابیس رو اشغال میکند.INSERT</description>
                <category>Ali Rahmani</category>
                <author>Ali Rahmani</author>
                <pubDate>Thu, 30 Jun 2022 13:09:54 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت asynchronous با synchronous به زبان ساده + مثال عوارضی و پمپ بنزین</title>
                <link>https://virgool.io/@ali93rahmani/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D9%81%D8%A7%D9%86%DA%A9%D8%B4%D9%86-%D9%87%D8%A7%DB%8C-asynchronous-%D8%A8%D8%A7-synchronous-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-tlnzrewinkge</link>
                <description>سلام؛در این مقاله کوتاه میخواهیم تفاوت مفهوم فانکشن های synchronous و asynchronous  را با مثالی ساده بررسی کنیم.نمای شماتیک کل مثال زیر  مسئله: فرض کنیم یک اتوبان داریم که در این اتوبان یک پمپ بنزین و یک عوارضی را می خواهیم جانمایی کنیم. برای عوارضی حتما باید مطمئن شویم همه ماشین های از عوارضی عبور میکنند و پول پرداخت میکنند. و پمپ بنزین باید بگونه ای باشد که هر ماشینی که نیاز به بنزین دارد باید بتواند وارد به سادگی و بدون ایجاد مزاحمت برای دیگران وارد پمپ بنزین شده و از آن استفاده کند و بدون ایجاد مزاحمت برای دیگران وارد جاده اصلی شده و به مسیر قبلی خود ادامه دهد.حالت Synchronous: زمانی که عوارضی را جانمایی میکنیم همه ماشین ها مجبورند ترمز کنند تا یک عملیاتی انجام شود(در اینجا پرداخت پول است) سپس دوباره به حرکت ادامه می دهند تا سرعتشان را به سرعت قبلی برسانند.حالت  Asynchronous: در صورتی که اگر بخواهیم یک پمپ بنزین را جانمایی کنیم هر خودرویی که نیاز به سوخت دارد از جاده اصلی جدا شده و وارد صف های پمپ بنزین میشود. مسلما تعداد صف ها بزرگتر مساوی یک می باشد. اصطلاحا به هر صف queue میگویند. حال عملیات روی هر صف به وسیله یکی از همان دستگاه های پمپ بنزین انجام می گردد که اصطلاحا به آنها کارگر گفته میشود.افرادی هم که در کنار پمپ بنزین می ایستند عملا ناظر بر این روند خواهند بود و اگر فرضا در هر صف دو یا چند پمپ بنزین داشته باشیم آن افراد میتوانند ماشین ها را به صورت دلخواه به یکی از پمپهای بنزین در آن صف هدایت و متصل کنند.ماشین ها پس از پر شدن باک بنزین و تکمیل فرایند پرداخت و دیگر اتفاقات از صف خارج شده و به همان اتوبان قبلی بر می گردند. حتی در حالت های کمی پیچیده تر میتوان مسیر های ورود به اتوبان را متفاوت در نظر گرفت و از یک یا چند نقطه وارد اتوبان شوند که متناسب با نیاز پروژه تغییر میکند.نکته مهمی که در طی این روند رخ میدهد این است که تمام اتومبیل های داخل اتوبان  با همان سرعت قبلی خود به حرکت ادامه میدهند ولی آنهایی که به چیز دیگری نیاز دارند سرعت خود را تغییر می دهند. بنابراین در این حالت همه راضی تر و سریعتر هستند. :)) یکی از سایت های خوبی که این مفاهیم را حرفه ای تر توضیح میدهد سایت RabbitMQ است. RabbitMQ یک message broker است. در این سایت به زبان های زیر توضیح داده است.Python/Java/Ruby/PHP/C#/JavaScript/Go/Elixir/Objective-C/Swift/Spring AMQP( این مقاله اولین پست من در ویرگول است. از کمی و کاستی های احتمال عذرخواهی میکنم و ممنون میشم با ارائه پیشنهاد و انتقاداتتون به بهتر شدن مقاله های بعدی کمک کنید)</description>
                <category>Ali Rahmani</category>
                <author>Ali Rahmani</author>
                <pubDate>Fri, 24 Jun 2022 14:35:54 +0430</pubDate>
            </item>
            </channel>
</rss>