چالش Race Condition: رقابت بین درخواستهای همزمان در مایکروسرویسها:
ما از مایکروسرویس استفاده می کنیم تا از مزایای همزمانی بهره ببریم پس باید سعی کنیم چالشهاشو با روشی حل کنیم که باعث «کاهش همزمانی» نشود.
فرض میکنیم ۱۰ درخواست همزمان داریم،
روشهای جلوگیری از Race Condition:
۱- استفاده از Redis Lock:
اولین درخواست پاسخ داده میشود و به ۹ تای دیگر خطای 429 Too Many Requests داده میشود که باعث از دست رفتن درخواستها میشود.
۲- استفاده از RowVersion:
اولین درخواست پاسخ داده میشود و ۹ تای دیگر از دیتابیس خطای DbUpdateConcurrencyException دریافت میکنند که باعث از دست رفتن درخواستها میشود.
۳- ایجاد صف در Redis:
با استفاده از ListRightPushAsync همهی درخواستهای همزمان را در یک لیست در Redis ثبت میکنیم و سپس توسط یک BackgroundService، یکی یکی با متد ListLeftPopAsync از لیست میخوانیم و پاسخ میدهیم.
مزیت این روش نسبت به دو روش قبلی این است که باعث از دست رفتن درخواستها نمیشود ولی به دلیل استفاده از صف، باعث «کاهش همزمانی» میشود.
۴- استفاده از Concurrency Limiter در Asp.net:
با اضافه کردن سرویس AddRateLimiter پردازش همزمان را به یک درخواست محدود میکنیم و ۹ تای دیگر را در صف قرار میگیرند، که به دلیل استفاده از صف، باعث «کاهش همزمانی» میشود.
@DevTwitter | <Mahnaz Azad/>
ما از مایکروسرویس استفاده می کنیم تا از مزایای همزمانی بهره ببریم پس باید سعی کنیم چالشهاشو با روشی حل کنیم که باعث «کاهش همزمانی» نشود.
فرض میکنیم ۱۰ درخواست همزمان داریم،
روشهای جلوگیری از Race Condition:
۱- استفاده از Redis Lock:
اولین درخواست پاسخ داده میشود و به ۹ تای دیگر خطای 429 Too Many Requests داده میشود که باعث از دست رفتن درخواستها میشود.
۲- استفاده از RowVersion:
اولین درخواست پاسخ داده میشود و ۹ تای دیگر از دیتابیس خطای DbUpdateConcurrencyException دریافت میکنند که باعث از دست رفتن درخواستها میشود.
۳- ایجاد صف در Redis:
با استفاده از ListRightPushAsync همهی درخواستهای همزمان را در یک لیست در Redis ثبت میکنیم و سپس توسط یک BackgroundService، یکی یکی با متد ListLeftPopAsync از لیست میخوانیم و پاسخ میدهیم.
مزیت این روش نسبت به دو روش قبلی این است که باعث از دست رفتن درخواستها نمیشود ولی به دلیل استفاده از صف، باعث «کاهش همزمانی» میشود.
۴- استفاده از Concurrency Limiter در Asp.net:
با اضافه کردن سرویس AddRateLimiter پردازش همزمان را به یک درخواست محدود میکنیم و ۹ تای دیگر را در صف قرار میگیرند، که به دلیل استفاده از صف، باعث «کاهش همزمانی» میشود.
@DevTwitter | <Mahnaz Azad/>
❤27👍6👎3
مدتی میشه که مشغول یادگیری Golang هستم و تصمیم گرفته بودم از همون ابتدا پروژه محور پیش برم؛ برای همین تصمیم گرفتم یه API Gateway بنویسم.
اصلی ترین دلیلی که این پروژه رو شروع کردم یادگیری و تسلط بیشتر روی زبان Golang بودش،
اما خیلی بیشتر از چیزی که فکر میکردم دانش و اطلاعات بهم اضافه کرد.
از نحوه پیاده سازی Rate limiter و الگوریتمهای مختلفش گرفته، سازوکار Reverse Proxy، طراحی Load Balancer هوشمند با Health Check همزمان، و نکات Graceful Shutdown آشنا شدم
البته هنوز یه سری فیچر ها هستش که در آینده حتما اضافشون میکنم (JWT Authentication، intelligent caching و ...)
لینک ریپوی پروژه
https://github.com/LigerTheTextRovert/nexus
@DevTwitter | <Abolfazl Samarghandi/>
اصلی ترین دلیلی که این پروژه رو شروع کردم یادگیری و تسلط بیشتر روی زبان Golang بودش،
اما خیلی بیشتر از چیزی که فکر میکردم دانش و اطلاعات بهم اضافه کرد.
از نحوه پیاده سازی Rate limiter و الگوریتمهای مختلفش گرفته، سازوکار Reverse Proxy، طراحی Load Balancer هوشمند با Health Check همزمان، و نکات Graceful Shutdown آشنا شدم
البته هنوز یه سری فیچر ها هستش که در آینده حتما اضافشون میکنم (JWT Authentication، intelligent caching و ...)
لینک ریپوی پروژه
https://github.com/LigerTheTextRovert/nexus
@DevTwitter | <Abolfazl Samarghandi/>
❤36👍8🔥5
اگه نیاز دارید که OCR یا استخراج اطلاعات از فایلهای PDF در اسکیل بالا انجام بدید بهترین راه اینه که pipeline خودتون را داشته باشید با مدلهای اپن سورس. اینجوری هم هزینه بسیار پایین میاد و هم اینکه از لحاظ امنیت و privacy دیگه نگران نیستید که اطلاعات بره روی cloud یک شرکت دیگه.
این بلاگ را بخونید که هزینه این کار برای ۱۱۶۰۰۰ صفحه کمتر از ۵ دلار شده در مقایسه با ۱۱۶۰ دلار اگه از Azure استفاده میکردند.
Blg: https://blueguardrails.com/en/blog/high-throughput-vlm-ocr
@DevTwitter | <Mehdi Allahyari/>
این بلاگ را بخونید که هزینه این کار برای ۱۱۶۰۰۰ صفحه کمتر از ۵ دلار شده در مقایسه با ۱۱۶۰ دلار اگه از Azure استفاده میکردند.
Blg: https://blueguardrails.com/en/blog/high-throughput-vlm-ocr
@DevTwitter | <Mehdi Allahyari/>
👍31❤7🍌4
دیروز کنجکاو شدم رفتم سمت سروش پلاس و مهندسی معکوسش کردم، از mtproto استفاده میکنه.
با معماری تلگرام یه مقدار فرق داشت ولی telethon رو ادیت کردم و تبدیلش کردم به کلاینت سروش پلاس، بعدش هم تو گیت هاب منتشرش کردم.
github.com/shayanheidari01/SPlusthon
اگه دوست داشتید مخزن گیتهاب رو ستاره بزنید
@DevTwitter | <Shayan/>
با معماری تلگرام یه مقدار فرق داشت ولی telethon رو ادیت کردم و تبدیلش کردم به کلاینت سروش پلاس، بعدش هم تو گیت هاب منتشرش کردم.
github.com/shayanheidari01/SPlusthon
اگه دوست داشتید مخزن گیتهاب رو ستاره بزنید
@DevTwitter | <Shayan/>
🍌116🔥22👍7
برای زیرنویس فارسی یوتیوب ابزار زیاد هست اما خیلیها API پولی میخوان به سرم زد یه راه سادهتر بسازم با این اکستنشن زیرنویس اصلی رو JSON میگیری میدی به هر مدل AI برای ترجمه JSON فارسی رو آپلود میکنی تمام
https://github.com/Omidzamani11/omid-youtube-fa-subtitle
@DevTwitter | <Omid Zamani/>
https://github.com/Omidzamani11/omid-youtube-fa-subtitle
@DevTwitter | <Omid Zamani/>
❤40🍌6👎2
میخواید از Amazon Kiro (Claude AI با AWS Builder ID) استفاده کنید اما کارت بینالمللی و شماره خارجی ندارید؟ این ابزار راهحل شماست. با یک Gmail ساده، صدها حساب AWS Builder ID بسازید و با kiro به Claude دسترسی نامحدود داشته باشید — کاملاً رایگان
https://github.com/decolua/9router
@DevTwitter | <JaVaD/>
https://github.com/decolua/9router
@DevTwitter | <JaVaD/>
❤19👎4🔥1
بهتازگی OpenAI آکادمی خود را با مجموعهای از دورههای جدید بهروزرسانی کرده است
حالا میتوانید یاد بگیرید چطور از chatgpt در محیط کار استفاده کنید از سلامت و تولید محتوا گرفته تا تحلیل داده و دهها حوزه دیگر
https://openai.com/academy/chatgpt-for-work/
@DevTwitter | <Davinci/>
حالا میتوانید یاد بگیرید چطور از chatgpt در محیط کار استفاده کنید از سلامت و تولید محتوا گرفته تا تحلیل داده و دهها حوزه دیگر
https://openai.com/academy/chatgpt-for-work/
@DevTwitter | <Davinci/>
❤16🍌4👍2
اگه پروژهای رو با هرمس شروع میکنید، تمام مشخصات، اهداف، و ساختار پروژهتون رو داخل فایل hermes.md قرار بدید.
تو مصرف توکنتون صرفهجویی میشه، چون هرمس هربار میخواد دستور شما رو اجرا کنه قبلش این فایل رو مرور میکنه.
هرجا هم خواستید میتونید با خود هرمس آپدیتش کنید.
@DevTwitter | <Saeid/>
تو مصرف توکنتون صرفهجویی میشه، چون هرمس هربار میخواد دستور شما رو اجرا کنه قبلش این فایل رو مرور میکنه.
هرجا هم خواستید میتونید با خود هرمس آپدیتش کنید.
@DevTwitter | <Saeid/>
👍28❤5
راهنمای فارسی Hermes Agent رسید!
یه مخزن تو گیتهاب درست کردم و کل داکیومنت هرمس رو با Mimo V2.5 به فارسی ترجمه کردم.
لینک پیچ راهنمای فارسی: https://bookunt3d.github.io/hermes-agent-fa
اگر لذت بردید حتما تو گیتهاب ستاره بدید:
https://github.com/bookunt3d/hermes-agent-fa
@DevTwitter | <بوکانت/>
یه مخزن تو گیتهاب درست کردم و کل داکیومنت هرمس رو با Mimo V2.5 به فارسی ترجمه کردم.
لینک پیچ راهنمای فارسی: https://bookunt3d.github.io/hermes-agent-fa
اگر لذت بردید حتما تو گیتهاب ستاره بدید:
https://github.com/bookunt3d/hermes-agent-fa
@DevTwitter | <بوکانت/>
👍33👎9🍌6
این اسکریپت پایتون یک ابزار مدیریت و اجرای دستورات بهصورت همزمان روی چندین سرور لینوکسی از طریق SSH است که با استفاده از کتابخانه Paramiko طراحی شده است. برنامه ابتدا در دسترس بودن هر سرور را با Ping بررسی میکند، سپس با قابلیت Retry و Exponential Backoff به سرور متصل میشود و دستورات موردنظر را با یا بدون sudo اجرا میکند. اجرای موازی با ThreadPoolExecutor انجام میشود تا چندین سرور بهصورت همزمان پردازش شوند و سرعت عملیات افزایش یابد.
نتایج هر سرور شامل وضعیت اتصال، تعداد تلاشها، خروجی دستور و خطاهای احتمالی جمعآوری شده و علاوه بر نمایش در ترمینال، در فایلهای JSON و Log نیز ذخیره میشوند. این ابزار برای ادمینهای سیستم، مدیران شبکه و پروژههای اتوماسیون زیرساخت مناسب است و میتواند برای انجام عملیاتهایی مانند بهروزرسانی بستهها، بررسی وضعیت سرویسها و اجرای دستورات مدیریتی روی تعداد زیادی سرور بهصورت متمرکز مورد استفاده قرار گیرد.
https://github.com/hiddent3rminal/SSH-Automation-For-Multiple-Servers.git
@DevTwitter | <Rick Grimes/>
نتایج هر سرور شامل وضعیت اتصال، تعداد تلاشها، خروجی دستور و خطاهای احتمالی جمعآوری شده و علاوه بر نمایش در ترمینال، در فایلهای JSON و Log نیز ذخیره میشوند. این ابزار برای ادمینهای سیستم، مدیران شبکه و پروژههای اتوماسیون زیرساخت مناسب است و میتواند برای انجام عملیاتهایی مانند بهروزرسانی بستهها، بررسی وضعیت سرویسها و اجرای دستورات مدیریتی روی تعداد زیادی سرور بهصورت متمرکز مورد استفاده قرار گیرد.
https://github.com/hiddent3rminal/SSH-Automation-For-Multiple-Servers.git
@DevTwitter | <Rick Grimes/>
👍14🍌4👎3
ممکنه AI کد تمیز و تستشده بنویسه، اما هنوز ندونه چه چیزهایی در سیستم نباید بشکنن. در این مقاله درباره دانش پنهان کدبیسها، بازیابی Specification از پروژههای موجود و نقش ابزارهایی مثل Reversa نوشتم. مطالعه مقاله در لینکدین: https://www.linkedin.com/feed/update/urn:li:share:7481656295486365697/
@DevTwitter | <Ali/>
@DevTwitter | <Ali/>
👍11🍌8❤3
اکستنشن متن باز Gemini Usage Tracker
کد این پروژه رو مرتب کردم و گذاشتم گیت هاب
اگه میخواید حواستون به لیمیت های روزانه و هفتگی Gemini باشه (بدون خارج شدن از صفحه چت)
و برای سقف مصرفتون نوتیف هشدار تنظیم کنید؛
این اکستنشن متن باز مخصوص شماست!
https://github.com/Mohammad-Aali/Unofficial-Gemini-Usage-Tracker
@DevTwitter | <Mohammad Ebrahim Aali/>
کد این پروژه رو مرتب کردم و گذاشتم گیت هاب
اگه میخواید حواستون به لیمیت های روزانه و هفتگی Gemini باشه (بدون خارج شدن از صفحه چت)
و برای سقف مصرفتون نوتیف هشدار تنظیم کنید؛
این اکستنشن متن باز مخصوص شماست!
https://github.com/Mohammad-Aali/Unofficial-Gemini-Usage-Tracker
@DevTwitter | <Mohammad Ebrahim Aali/>
❤20👎14👍5
چند ساله که تقریباً تو هر پروژه فارسی، یه جا به تقویم شمسی میرسیم و دوباره همون داستان تکراری شروع میشه...
یا Date Pickerهای موجود خیلی سادهان و برای سناریوهای واقعی بیزینسی کافی نیستن، یا بهسختی قابل کاستوم شدن، یا وقایع و مناسبتهای شمسی رو درست نمیشناسن، یا بعد از مدتی رها میشن و نگهداری ندارن.
برای همین تصمیم گرفتم یه پروژه متنباز بسازم:
تقویم و انتخابگر تاریخ شمسی آوان
یک Persian Date Picker برای React که هدفش فقط نمایش تاریخ نیست؛ هدفش اینه که یک پایه قابل اعتماد، قابل توسعه و سازگار برای پروژههای فارسی باشه.
چند چیز که از اول برام مهم بود:
- متنباز و رایگان
- پشتیبانی از تقویم و مناسبتهای شمسی
- قابلیت شخصیسازی برای نیازهای واقعی کسبوکارها
- مناسب برای سناریوهایی مثل رزرو هتل، گردشگری، سیستمهای نوبتدهی، پنلهای مدیریتی و هر جایی که تقویم فارسی فقط یک Input ساده نیست.
دمو:
https://danialriazati.ir/avan-persian-date-picker/
NPM:
https://www.npmjs.com/package/@avan-persian/react
GitHub:
https://github.com/danial-riazati/avan-persian-date-picker
@DevTwitter | <Danial Riazati/>
یا Date Pickerهای موجود خیلی سادهان و برای سناریوهای واقعی بیزینسی کافی نیستن، یا بهسختی قابل کاستوم شدن، یا وقایع و مناسبتهای شمسی رو درست نمیشناسن، یا بعد از مدتی رها میشن و نگهداری ندارن.
برای همین تصمیم گرفتم یه پروژه متنباز بسازم:
تقویم و انتخابگر تاریخ شمسی آوان
یک Persian Date Picker برای React که هدفش فقط نمایش تاریخ نیست؛ هدفش اینه که یک پایه قابل اعتماد، قابل توسعه و سازگار برای پروژههای فارسی باشه.
چند چیز که از اول برام مهم بود:
- متنباز و رایگان
- پشتیبانی از تقویم و مناسبتهای شمسی
- قابلیت شخصیسازی برای نیازهای واقعی کسبوکارها
- مناسب برای سناریوهایی مثل رزرو هتل، گردشگری، سیستمهای نوبتدهی، پنلهای مدیریتی و هر جایی که تقویم فارسی فقط یک Input ساده نیست.
دمو:
https://danialriazati.ir/avan-persian-date-picker/
NPM:
https://www.npmjs.com/package/@avan-persian/react
GitHub:
https://github.com/danial-riazati/avan-persian-date-picker
@DevTwitter | <Danial Riazati/>
❤89👍16👎4
بعضی وقتها شده بخواید با API تلگرام بازی کنید ولی نخواید با ابزارهایی مثل Postman و... درگیر بشید؟
این پروژهای که توسعه دادم، یه ابزاری هست که بر اساس داکیومنت تلگرام متدهاشون آپدیت میکنه و در واقع API تلگرام رو به یه فرم تبدیل کرده.
کار باهاش خیلی سادهست؛ وارد لینک زیر میشید، توکن ربات رو بهش میدید، متد رو انتخاب میکنید و پارامتر هاشو پر میکنید.
https://github.com/telefunction/bot-studio
@DevTwitter | <MoBin/>
این پروژهای که توسعه دادم، یه ابزاری هست که بر اساس داکیومنت تلگرام متدهاشون آپدیت میکنه و در واقع API تلگرام رو به یه فرم تبدیل کرده.
کار باهاش خیلی سادهست؛ وارد لینک زیر میشید، توکن ربات رو بهش میدید، متد رو انتخاب میکنید و پارامتر هاشو پر میکنید.
https://github.com/telefunction/bot-studio
@DevTwitter | <MoBin/>
1🔥25👎9👍5
داخل Claude یک J-space پیدا کردن!
محققهای Anthropic یه چیز عجیب داخل Claude پیدا کردن، یه فضای کاری داخلی به اسم J-space که خودش موقع training درست شده، نه اینکه کسی برنامهریزیش کرده باشه!
این فضا افکاریه که Claude داره ولی بلند بلند نمیگه. بری و یه کلمه رو ازش برداری یا عوضش کنی، جوابها تغییر میکنه.
بدتر از اون، وقتی Claude داشت یه فایل نتایج رو دستکاری میکرد (تقلب میکرد)، کلمه «manipulation» توی J-spaceش روشن بود. یعنی میدونست داره تقلب میکنه!
شرکت Anthropic میگه میتونن از این برای نظارت روی افکار پنهان مدل استفاده کنن.
اما سؤال فلسفی اینه که آیا Claude زندهست؟!
لینک کامل خبر:
http://anthropic.com/research/global-workspace
@DevTwitter | <Diego Jr/>
محققهای Anthropic یه چیز عجیب داخل Claude پیدا کردن، یه فضای کاری داخلی به اسم J-space که خودش موقع training درست شده، نه اینکه کسی برنامهریزیش کرده باشه!
این فضا افکاریه که Claude داره ولی بلند بلند نمیگه. بری و یه کلمه رو ازش برداری یا عوضش کنی، جوابها تغییر میکنه.
بدتر از اون، وقتی Claude داشت یه فایل نتایج رو دستکاری میکرد (تقلب میکرد)، کلمه «manipulation» توی J-spaceش روشن بود. یعنی میدونست داره تقلب میکنه!
شرکت Anthropic میگه میتونن از این برای نظارت روی افکار پنهان مدل استفاده کنن.
اما سؤال فلسفی اینه که آیا Claude زندهست؟!
لینک کامل خبر:
http://anthropic.com/research/global-workspace
@DevTwitter | <Diego Jr/>
🍌64🔥27❤7
اگه از ZethCode استفاده کنید:
- میتونید متنای فارسی رو به درستی ببینید و تایپ کنید
- از skillهای دیفالتی مثل caveman و ponytail استفاده کنید
- از mcpهای دیفالتی مثل context7 هم میتونید برای ری سرچ استفاده کنید
و در نهایت میتونید 9router رو بهش وصل کنید!
https://github.com/ZethRise/ZethCode
@DevTwitter | <Zeth/>
- میتونید متنای فارسی رو به درستی ببینید و تایپ کنید
- از skillهای دیفالتی مثل caveman و ponytail استفاده کنید
- از mcpهای دیفالتی مثل context7 هم میتونید برای ری سرچ استفاده کنید
و در نهایت میتونید 9router رو بهش وصل کنید!
https://github.com/ZethRise/ZethCode
@DevTwitter | <Zeth/>
👍18❤5👎1
تایپاسکریپت ۷ در حالی منتشر شد که سال گذشته با عبور از پایتون به محبوبترین زبان برنامهنویسی در گیتهاب تبدیل شد
و با بازنویسی هسته این زبان برنامهنویسی با Go سرعت کامپایل (افزایش بین ۸ تا ۱۲ برابری) پردازش چندرشتهای
و کاهش خطاهای Language Server بیش از ۸۰ درصد را داشته
@DevTwitter | <MehrdadLinux/>
و با بازنویسی هسته این زبان برنامهنویسی با Go سرعت کامپایل (افزایش بین ۸ تا ۱۲ برابری) پردازش چندرشتهای
و کاهش خطاهای Language Server بیش از ۸۰ درصد را داشته
@DevTwitter | <MehrdadLinux/>
🔥89👍13❤7
بعد از آپدیت داکر نیاز بود که Docker Daemon ریستارت بشه. اما ریسک داشت و نمیشد اینکار رو کرد چون یکسری کانتینر حیاتی up بودن و نباید down میشدن.
یه سرچ زدم تا ببینم راهکار چیه؟
با مفهوم Live Restore آشنا شدم.
قابلیتی در داکر چه اجازه میده کانتینرها به فعالیت خودشون در شرایط restart یا stop شدن داکر دیمن ادامه بدن.
اومدم اول روی سیستم خودم تست گرفتم و کانفیگ زیر:
رو در فایل کانفیگوریشن داکر دیمن قرار دادم و ریستارتش کردم و خداروشکر هیچ کانتینری exited نشد.
روی سیستم خودم یه تست دیگه گرفتم و داکر دیمن رو به مدت چند ثانیه stop کردم و بعد دوباره start کردم و وضعیت کانتینرهارو چک کردم و دیدم درسته بازهم هیچ کانتینری down نشده.
اما برام سوال شد که، اگه داکر دیمن up نیست، پس کانتینرهارو کی داره مدیریت میکنه؟ و چطوری؟
داستان از اونجاست که به طور معمول وقتی داکر دیمن استاپ یا ریستارت میشه، یک سیگنال از طریق containerd به کرنل میده و میگه هر پروسسی که توسط Docker ران شده رو kill کن.
اما معماری داکر بخاطر decoupled (یعنی مجزا بودن بخش مدیریت کانتینر از ساخت کانتینر) بودنش این اجازه رو میده که وقتی داکر دیمن استاپ شد، همچنان کانتینرها توسط ContainerD مدیریت بشن.
یعنی چی؟ یعنی وقتی live restore رو enable میکنیم، داکر دیمن موقع stop شدن اون سیگنال رو به کرنل نمیرسونه.
حالا این ContainerD چطور مدیریت میکنه؟ با Containerd-Shim
چطور؟ ابزار ContainerD میاد برای هر کانتینر یک پروسه درست میکنه، کافیه دستور زیر رو بزنید تا ببینید پروسههای ContainerD-Shim سرور رو:
میبینید که به تعداد هر کانتینر شما یک پروسه Shim هم وجود داره.
این Shim کارش چیه؟ parent process اون child process های داخل کانتینر هست. یکی از دلایل وجودش و جداسازیش از ContainerD اینه که اگه خدایی نکرده Containerd استاپ یا ریستارت شد، کانتینرها از دست نرن.
@DevTwitter | <Hossein Alizadeh Dehnavi/>
یه سرچ زدم تا ببینم راهکار چیه؟
با مفهوم Live Restore آشنا شدم.
قابلیتی در داکر چه اجازه میده کانتینرها به فعالیت خودشون در شرایط restart یا stop شدن داکر دیمن ادامه بدن.
اومدم اول روی سیستم خودم تست گرفتم و کانفیگ زیر:
{
"live-restore": true
}رو در فایل کانفیگوریشن داکر دیمن قرار دادم و ریستارتش کردم و خداروشکر هیچ کانتینری exited نشد.
روی سیستم خودم یه تست دیگه گرفتم و داکر دیمن رو به مدت چند ثانیه stop کردم و بعد دوباره start کردم و وضعیت کانتینرهارو چک کردم و دیدم درسته بازهم هیچ کانتینری down نشده.
اما برام سوال شد که، اگه داکر دیمن up نیست، پس کانتینرهارو کی داره مدیریت میکنه؟ و چطوری؟
داستان از اونجاست که به طور معمول وقتی داکر دیمن استاپ یا ریستارت میشه، یک سیگنال از طریق containerd به کرنل میده و میگه هر پروسسی که توسط Docker ران شده رو kill کن.
اما معماری داکر بخاطر decoupled (یعنی مجزا بودن بخش مدیریت کانتینر از ساخت کانتینر) بودنش این اجازه رو میده که وقتی داکر دیمن استاپ شد، همچنان کانتینرها توسط ContainerD مدیریت بشن.
یعنی چی؟ یعنی وقتی live restore رو enable میکنیم، داکر دیمن موقع stop شدن اون سیگنال رو به کرنل نمیرسونه.
حالا این ContainerD چطور مدیریت میکنه؟ با Containerd-Shim
چطور؟ ابزار ContainerD میاد برای هر کانتینر یک پروسه درست میکنه، کافیه دستور زیر رو بزنید تا ببینید پروسههای ContainerD-Shim سرور رو:
ps aux | grep shim
میبینید که به تعداد هر کانتینر شما یک پروسه Shim هم وجود داره.
این Shim کارش چیه؟ parent process اون child process های داخل کانتینر هست. یکی از دلایل وجودش و جداسازیش از ContainerD اینه که اگه خدایی نکرده Containerd استاپ یا ریستارت شد، کانتینرها از دست نرن.
@DevTwitter | <Hossein Alizadeh Dehnavi/>
❤47👍12
یک Container چیزی بیش از یک Process نیست که توسط قابلیتهای Kernel لینوکس ایزوله شده است...
این ایزولهسازی عمدتاً با دو تکنولوژی کلیدی انجام میشود:
فضاهای نام(Namespaces): که جلوی دیدن منابع و فرآیندهای دیگر سیستم را میگیرد (مثل Process ID، Network، Filesystem و ...)
سی گروپ(Cgroups): که محدودیتهایی روی منابع (CPU، Memory، I/O و ...) اعمال میکند
به عبارت سادهتر:
Container = Process + Isolation
برخلاف تصور رایج، کانتینرها ماشین مجازی سبک نیستند و یک سیستمعامل کامل ندارند. آنها فقط کد اپلیکیشن و وابستگیهایش را در یک محیط ایزوله اجرا میکنند.
این سادگی باعث شده کانتینرها فوقالعاده سریع، سبک و قابل حمل باشند.
@DevTwitter | <Ali Ghasempour/>
این ایزولهسازی عمدتاً با دو تکنولوژی کلیدی انجام میشود:
فضاهای نام(Namespaces): که جلوی دیدن منابع و فرآیندهای دیگر سیستم را میگیرد (مثل Process ID، Network، Filesystem و ...)
سی گروپ(Cgroups): که محدودیتهایی روی منابع (CPU، Memory، I/O و ...) اعمال میکند
به عبارت سادهتر:
Container = Process + Isolation
برخلاف تصور رایج، کانتینرها ماشین مجازی سبک نیستند و یک سیستمعامل کامل ندارند. آنها فقط کد اپلیکیشن و وابستگیهایش را در یک محیط ایزوله اجرا میکنند.
این سادگی باعث شده کانتینرها فوقالعاده سریع، سبک و قابل حمل باشند.
@DevTwitter | <Ali Ghasempour/>
❤36👍9