<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های پوریا مشعلی طبری</title>
        <link>https://virgool.io/feed/@ptabari</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 15:23:03</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2046111/avatar/pU3X0b.jpg?height=120&amp;width=120</url>
            <title>پوریا مشعلی طبری</title>
            <link>https://virgool.io/@ptabari</link>
        </image>

                    <item>
                <title>تفاوت Forward Proxy  با  Reverse Proxy</title>
                <link>https://virgool.io/@ptabari/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-forward-proxy-%D8%A8%D8%A7-reverse-proxy-vjmp3fkovfbv</link>
                <description>سوال اینجاست که چرا میگن NGINX  یک reverse proxy  هست؟ اصلا proxy چی هست؟دو نوع پراکسی رایج و معکوس داریم که عبارتند از Reverse Proxy  و Forward Proxy  .پراکسی فوروارد یا Forward Proxy  سروری هست که بین گروهی از ماشینهای سرویس گیرنده و اینترنت قرار میگیرد. وقتی کلاینتها request  هایشان را ارسال میکنند، Forward-Proxy  بعنوان یک واسط عمل میکند و request  ها را از کلاینت ها میگیرد و در سمت دیگر، به سمت وب سرورهای مقصدشان میفرستد و در نهایت پاسخ وب سرورها را گرفته و به کلاینتها بر میگرداند.سوال اینجاست که این نوع پراکسی به چه دردی میخورد یا به عبارتی در کجا کاربرد دارد؟در جواب باید گفت که این نوع از پراکسی، از اطلاعات هویتی کلاینتها یا به اصطلاح خودمان، از identity  کلاینتها حفاظت میکند. به این صورت که اگر از یک فوروارد پراکسی استفاده کنیم، در آن صورت فقط آدرس IP  کلاینتها حفظ میشود و در  request header  که به سمت وب سرور در نهایت ارسال میشود، آدرس IP  پراکسی قابل مشاهده است.ضمنا دلیل دیگری که از آن استفاده میشود، برای دور زدن محدودیت های وب سایتها یا ISP  هاست. به این صورت که وقتی شما درخواستی به سمت وب سروری که شمارا محدود کرده یا از سمت ISP  محدود شدید(فیلترینگ) بفرستید، درخواست شما توسط فایروال ISP  یا سرور مقصد، ریجکت میشود. در این حال با داشتن یک forward proxy  ، درخواست شما ابتدا به سروری که توسط ISP  یا وب سرور مقصد محدود نیست ارسال میشود و سپس درخواست از آنجا به وب سرور مقصدتان ارسال میشود. طبیعتا در این حالت به درخواست شما پاسخ داده میشود.پس در نهایت میتوان دلایل گفته شده را به این صورت خلاصه کرد:· Protect the client’s online identity· Bypass browsing restrictions· Block access to certain contentبنابراین یک forward proxy  بین کلاینتها و اینترنت قرار میگیرد و از سمت کلاینت عمل میکند.نکته:تو سازمانهای بزرگ، کلاینت برای استفاده از پروکسی نیاز به کانفیگ دارد تا بتواند از forward proxy  استفاده کند؛ در این حالت، سازمانهای بزرگ از تکنیکی به نام transparent proxy  استفاده میکنندتا این فرایند ساده تر شود. یک transparent proxy  با سوییچ های لایه چهار کار میکند تا به طور اتوماتیک، انواع خاصی از ترافیک را به سمت proxy  هدایت کند. برای استفاده از آن هم نیازی به کانفیگ سیستمهای سرویس گیرنده نیست. زمانی که کلاینت در شبکه سازمانی خودش هست، bypass  کردن یک پراکسی برای آن کلاینت سخت میشود.پراکسی معکوس یا reverse proxy  بین اینترنت و وب سرورها قرار دارد و بنابراین از سمت وب سرور عمل میکند که این یعنی request های کلاینت ها را از اینترنت میگیرد و به وب سرورهای مقصدشان که در پشت این پراکسی قرار دارد میفرستد.حال مجدد همان سوال...چرا باید از یک پراکسی معکوس یا reverse proxy  استفاده کنیم؟خب دلیل اول مثل همان forward proxy  هست یعنی محافظت از اطلاعات کلاینتهای خودش که این بار وب سرورها هستند. این یعنی آدرسهای IP  وب سرورهای خودش را در header response  نمیگذارد که البته این کار یک مزیتی که دارد، این است که این امر ، از مورد هدف قرار گرفتن وب سرور توسط حملات DDOSجلوگیری میشود یا تا حد امکان این امر کاهش می یابد.دومین دلیل استفاده از این نوع پراکسی این میتواند باشد که این نوع پراکسی، برای لود بالانسینگ یا تقسیم ترافیک بین وب سرورها یا اپلیکیشن هایی استفاده شود که در پشت این پراکسی هستند. همیشه وب سایتهایی که ترافیک بالایی دارند از یک لودبالانسر برای متعادل کردن ترافیک ورودی استفاده میکنند تا با توزیع ترافیک بتوان به همه ی درخواستها با زمان کوتاهی پاسخ داد.بنابراین به نظر، reverse proxy  میتواند ترافیک ورودی را مدیریت کند. سرویس هایی هم مثل cloud flare  سرورهایی را در سراسر دنیا بعنوان reverse proxy  قرار داده که این کار باعث میشود ظرفیت پردازشی بالاتری را برای سرویس دادن فراهم اورد. به همین دلیل است که کلاودفلر میتواند بسیاری از حملات DDOS  را خنثی کند.سومین دلیل که برای وب سرورها بیشتر مفید است، استفاده از قابلیت caching  است، یعنی بخشی از محتویات static  وب سایت ها را برای مدتی معلوم ذخیره کنیم تا اگر درخواست همان محتویات بار دیگر توسط کلاینت به پراکسی رسید، دیگر ، وب سرور درگیر پاسخ و اصطلاحا  serveکردن آن صفحه نشود بلکه سریعا همان محتوا به کلاینت در پاسخ برگردانده شود که اینکار باعث افزایش سرعت پاسخ در سایتها میشود.دلیل چهارم این است که یک reverse proxy  میتواند SSL Encryption  را handleکند.از نظر فرایندهای محاسباتی، SSL Handshake یک فرایند پر بار یا بعبارتی برای سرور هزینه بر هست. یک reverse proxy  میتواند باعث بهبود این قضیه شود، به این صورت که بجای اینکه وب سرورها درخواست های SSL  را مدیریت کنند، پراکسی معکوس ها این درخواستها را مدیریت میکنند و باعث میشوند که بار پردازشی و محاسباتی این نوع درخواستها از وب سرور ها برداشته شود.همه ی وب سایتهای معروف مانند نتفلیکس، گوگل، اپل و ... از پراکسی معکوس استفاده میکنند. شما میتوانید در چندین لایه از reverse proxy  استفاده کنید. مثلا در لایه اول از یک edge server  مانند cloudflare  استفاده کنید. در لایه دوم از یک API Gateway  یا یک Load Balancer  استفاده کنید. ( دقت کنید که بسیاری از شرکت های بزرگی که خدمات سرویس های ابری ارائه میدهند، از یک سرویسی استفاده میکنند که این دولایه را باهم در یک سرویس واحد، تحت عنوان ingress service  ترکیب میکند.)</description>
                <category>پوریا مشعلی طبری</category>
                <author>پوریا مشعلی طبری</author>
                <pubDate>Tue, 04 Apr 2023 10:56:12 +0330</pubDate>
            </item>
                    <item>
                <title>چرا کافکا سریع هست؟</title>
                <link>https://virgool.io/@ptabari/%DA%86%D8%B1%D8%A7-%DA%A9%D8%A7%D9%81%DA%A9%D8%A7-%D8%B3%D8%B1%DB%8C%D8%B9-%D9%87%D8%B3%D8%AA-kqt6uyn0bf5s</link>
                <description>در پاسخ به این سوال باید به یک سوالی دیگر پاسخ دهیم و آنهم این است که سریع بودن از نگاه سیستم به چه معناست؟.در جواب باید گفت که سریع بودن به دو مفهوم تاخیر یاlatency  و throughput یا همان توان عملیاتی درانتقال دیتا در یک حجم مشخص، بیشتر اشاره دارد.کافکا طوری طراحی شده تا بتواند تعداد زیادی رکورد را در زمان کوتاه جابجا کند که این کار نشانگر توان عملیاتی بالای آن دارد.یک لوله بزرگ را در نظر بگیرید. هرچه قطر این لوله بیشتر باشد، مایعی که میتواند در این لوله حرکت کند بیشتر میشود. بنابراین سریع بودن کافکا در جابجایی موثر داده هایش هست. حال این چطور اتفاق می افتد.دو مورد در بین مواردی که باعث جابجایی موثر داده ها میشود، تاثیر بیشتری دارد که این دو مورد عبارت است از:· Sequential I/O· Efficiencyورودی و خروجی متوالی یا Sequential I/Oاولین مورد ، تکیه کافکا به ورودی و خروجی متوالی است( خاصیت sequential در کافکا).یک تصور غلط این است که دسترسی به هارد دیسک در مقایسه با دسترسی به memory  یا همان حافظه رم سریع تر است، در صورتی که این درست نیست و این مورد به الگوی دسترسی (access pattern  )به data بستگی دارد.ما دو نوع الگوی دسترسی به دیسک را داریم :1- تصادفی یا random2- ترتیبی یا sequentialروی هارد دیسک برای خواندن data یک بازوی مکانیکی وجود دارد که برای خواندن data از قسمت های مختلف دیسک مورد استفاده قرار میگیرد و هرچقدر خواندن تصادفی data بیشتر شود این کار زمان بیشتری هم میطلبد که نتیجه این میشود که دسترسی به data کند میشود.اما در دسترسی متوالی یا sequential  چون بازوی مکانیکی نیازی به پریدن از یک نقطه به نقطه ی دیگر را ندارد باعث میشود تا خواندن و نوشتن بلاک های data سریع تر انجام شود. کافکا با استفاده از یک append-only log  بعنوان data structure  اصلی خودش از این مزیت استفاده میکند. در واقع از این روش استفاده میکند تا بتواند یک دیتای جدید را به آخر یک فایل اضافه کند. این یک الگوی دسترسی از نوع sequential  است.اگر یک لیستی از این هارد دیسکها را داشته باشیم و آنها را به صورت آرایه ای از یک دیسک ایجاد کنیم ( مثلا RAID  ) کنیم، آنگاه خواهیم دید که نوشتن به صورت sequential  به صدها مگابایت در ثانیه میرسد در حالی که نوشتن به صورت random  روی دیسک به چند صد کیلو بایت خواهد رسید.بنابراین sequential access  چندین برابر سریع تر از random access  (در این مثال ) است.این تکنیکی که کافکا استفاده میکند جدای اینکه توان عملیاتی را افزایش میدهد، مزیتهای دیگری از جمله کاهش هزینه را در بر دارد چون از دیسکهای ارزان قیمت HDD  میتوانیم استفاده کنیم که در این صورت در مقایسه با SSD  ها استفاده از HDD  ها باعث میشود که از ظرفیت بیشتری با هزینه کمتر استفاده کنیم بدون اینکه هیچ کاهش performance  داشته باشیم که این یعنی کافکا میتواند به صورت موثر پیام هارا برای مدت طولانی هم ذخیره و نگهداری کند که این ویژگی کافکا برای سیستم های messaging  مفید است.کارایی یا Efficiencyدومین مورد طراحی کافکا که باعث میشود کارایی بیشتری داشته باشیم ، efficiency  هست. اما چطور؟کافکا data زیادی را از قسمت های مختلف کارت شبکه میگیرد و بر روی دیسک میگذارد و سپس از روی دیسک میگیرد و به شبکه میفرستد. درنگاهی عمیق تر، این data برای تبادل در درون سیستم ، چندین بار توسط فرایند paging کپی میشود که این کپی ها روی عملکرد سیستم تاثیر میگذارند. بنابراین حذف کپی های اضافه ی  dataبین دیسک و شبکه بسیار میتواند به این موضوع تاثیر بگذارد.اینجاست که اصل zero copy وارد عمل میشود.Read without zero copy VS Read with zero copyسیستم های مدرن یونیکسی برای انتقال data از یک دیسک به شبکه در سطوح کوچکتر یعنی برای نقل و انتقال data کمتر بهینه شدند.برای اینکه این اصل zero copy را بهتر درک کنیم ابتدا نگاهی می اندازیم که کافکا چطور یک کپی از data را از روی هارد دیسک برای consumer  می فرستد درصورتی که اگر از اصل zero copy استفاده نکند :1- ابتدا data از سمت producer  به بافر اپلیکیشن ارسال میشود.2- اپلیکیشن، data را در داخل OS cache  ذخیره میکند.3- سپسdata از روی OS cache روی هارد دیسک sync  میشود.4- سپس data از روی دیسک برروی OS cache  لود میشود.5-بعد data از روی os cache  روی بافر برنامه که در اینجا کافکا هست کپی میشود6-سپس data از روی کافکا روی socket buffer  کپی میشود.7- سپسdata از socket buffer  به NIC buffer  ارسال میشود.8-درنهایت data از طریق بافر کارت شبکه به سمت consumer  ارسال میشود.باتوجه به موارد بالا میبینیم که زمانی که از اصل zero copy استفاده نکنیم، چقدر فرآیند انتقال ناکارآمد خواهد شد. چرا که در این مثال چهار کپی و دوبار system call  داشتیم.اما حالا نگاهی بیاندازیم به زمانی که کافکا از zero copy  بخواهد استفاده کند.1- ابتدا data از سمت producer  به بافر اپلیکیشن ارسال میشود.2- اپلیکیشن data را در داخل OS Cache  ذخیره میکند.3- در این مرحله و بواسطه zero copy  کافکا از یک فراخوانی سیستمی به نام ( )sendfile استفاده میکند. تا به سیستم عامل بگوید که data را مستقیما از OS cache  به سمت NIC Buffer  ارسال کند. روی کارت های شبکه امروزی این کپی کردن با DMA  انجام میشود.( DMA=Direct Memory Access  ) وقتی از DMA  استفاده شود، CPU  درگیر نمیشود و باعث کارآمدی کافکا و Node  های آن میشود.بنابراین دو مورد Sequential I/O و Zero Copy  سنگ بنای عملکرد بالای کافکا هستند. البته کافکا از تکنیک های دیگری هم استفاده میکند تا عملکردش را افزایش دهد اما این دوتکنیک از همه مهم تر هستند.</description>
                <category>پوریا مشعلی طبری</category>
                <author>پوریا مشعلی طبری</author>
                <pubDate>Fri, 31 Mar 2023 12:11:53 +0330</pubDate>
            </item>
                    <item>
                <title>نصب اپلیکیشن های اندرویدی روی اندروید باکس</title>
                <link>https://virgool.io/@ptabari/%D9%86%D8%B5%D8%A8-%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86-%D9%87%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%DB%8C-%D8%B1%D9%88%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A8%D8%A7%DA%A9%D8%B3-cmq5pnup8arj</link>
                <description>سلاممن پوریا هستم و میخوام یه اتفاقی  که اخیرا بهش برخورد کردم رو همراه با راه حلشو بگم براتون.شاید خیلیاتون به این مشکل برخورده باشید که رفتید یک اندروید باکس خریدید و دیدید که توی اون فقط به اپ گوگل پلی نصب شده و همین . باتوجه به تحریمات اخیری که شده , خب اون گوگل پلی دیگه کاربرد چندانی نداره تا بتونید باهاش یه اپلیکیشنی رو نصب کنید. خب شاید میگید, نسخه apk اون اپ رو پیدا میکنم و میریزم توی فلش و وصلش میکنم به اندروید باکس و مشکل رو به این صورت حل میکنم, اما میدونید که برای اینکار نیاز به یک اپلیکیشن فایل منیجر روی اون دیوایس دارید. حالا چی میشه که فایل منیجر هم رو اندروید باکستون نصب نشده باشه؟؟؟!!! اینجاس که ممکنه فکر کنید , اوووووه , پس من پولم سوخت شده....البته این مشکل رو من خودم اکثرا توی اندروید باکس های شیائومی ( همون mi box  ها ) دیدم.من هم چند وقت پیش بود که این اتفاق برای یه چندتا از همکارامون افتاده بود و تونستم این مشکل رو با راه حلی به نام side load  کردن اپلیکیشن که در ادامه میگم بهتون حل کنم :خب در ابتدا نیازه که شما برید تو تنظیمات اندروید باکس و در قسمت about  روی نسخه , چندبار پشت هم کلیک کنید تا گزینه ی developer tools  براتون فعال بشه ( اگه نمیدونید دقیقا چطوریه , کافیه که یه سرچ ساده تو گوگل بزنید تا براتون لینک های مختلفی رو بیاره تا بتونه کمکتون کنه).بعد از فعالسازی , باید وارد منوی تنظیمات بشید و از اونجا , وارد تنظیمات دولوپر یا developer option  شوید.در اون قسمت باید گزینه ی USB Debuging  رو فعال کنید. بعد از فعالسازی USB Debuging کافیه که تو تنظیمات مربوط به USB Debuging تعیین کنید که وقتی USB  وصل شد چه اتفاقی بیوفته, مثلا شارژ بشه یا ... . تو این قسمت تعیین کنید که از پروتکل media Transfer استفاده کنه.بعداز این کار, دستگاهتون رو وصل کنید به یک wifi یا به یک hotspot device  و بعد تو تنظیمات مربوط به wifi برید و ببینید که دستگاهتون چه IPAddress  گرفته. بعد لپ تاپتون رو هم به همون wifi  وصل کنید تا جفت دستگاه ها, به لحاظ شبکه ای, تو یک network range  قرار بگیرند.تو مرحله بعد باید یک اپلیکیشنی که لینکش رو براتون قرار میدم رو روی لپتاپتون نصب کنید. این برنامه, یک ابزار command-line  هست که میتونید با استفاده از اون اپ های روی دستگاه اندرویدی خودتون رو پاک کنید , نصب کنید یا ... . فقط هم مختص اندرویدباکس نیست. هر دستگاه اندرویدی رو میتونید باهاش به شرط فعال کردن usb debuging  و قراردادن در یک network range  با لپتاپتون , مدیریت کنید.نام این برنامه Android Debug Bridge (adb)  و اگه دوست دارید که اطلاعات بیشتری در موردش داشته باشید, به این لینک سر بزنید : https://developer.android.com/studio/command-line/adb به این لینک بروید و نسخه مناسب سیستم عاملتون رو دانلود کنید :https://developer.android.com/studio/releases/platform-toolsحالا بعد از نصب و انجام مراحل ابتدایی باید در ابتدا لپتاپ خودمون رو به اندروید باکس وصل کنیم. برای اینکار از دستور زیر استفاده میکنیم : adb connect device_ip_address:5555در این صورت اگر همه مراحل رو درست جلو برویم, پیغام successful  میده.حالا وقتشه که اپی که میخوایم روی دستگاهمون نصب بشه رو دانلود کنیم ( نسخه apk ) و بعد اون رو  با این ابزار با دستور زیر پوش کنیم روی اندروید باکس برای نصب :adb install path_to_apkکارمون تا اینجا تموم میشه , ولی شما میتونید با لینکهایی که تو ادامه معرفی میکنم , با این ابزار بیشتر آشنا بشید و کارای جالب تری باهاش بکنید یا مشکلاتی اگه خوردید رو باهاش حل کنید. https://www.makeuseof.com/how-to-use-adb-on-android-tv/#:~:text=Sideload%20Apps&amp;text=Once%20you%20have%20established%20the,window%20to%20copy%20its%20path.)  https://applicaster.zendesk.com/hc/en-us/articles/360022181331-Android-TV-How-to-install-an-app-with-ADB-and-Command-Line در نهایت اگر به مشکلی خوردید یا نیاز به کمک بیشتری داشتید, میتونید از طریق ایمیل زیر بامن در تماس باشید:ایمیل منممنونم که برای این مطلب وقت گذاشتید و مطالعه ش کردید.</description>
                <category>پوریا مشعلی طبری</category>
                <author>پوریا مشعلی طبری</author>
                <pubDate>Tue, 10 Jan 2023 09:45:02 +0330</pubDate>
            </item>
            </channel>
</rss>