✍️قانون "Chesteron's Fence" یا "حصار چسترتون" یک مفهوم مهم در اصول حفظ وضعیت موجود و تغییرات محافظهکارانه است که از نویسنده و فیلسوف انگلیسی، جیلبرت کیث چسترتون (G.K. Chesterton) گرفته شده است. این مفهوم به ما میگوید که قبل از تغییر یا حذف یک چیز موجود، باید دلیل وجود آن را به طور کامل درک کنیم.
❇️شرح قانون Chesteron's Fence
چسترتون این مفهوم را در قالب یک داستان توضیح میدهد:
🥸فرض کنید که دو نفر در حال پیادهروی در یک روستا هستند و به یک حصار قدیمی میرسند. نفر اول میگوید: "من نمیفهمم چرا این حصار اینجا است؛ بیایید آن را خراب کنیم." نفر دوم پاسخ میدهد: "اگر دلیل وجود این حصار را نمیدانی، بهتر است آن را دست نزنیم. وقتی فهمیدی چرا این حصار اینجا است، آن وقت میتوانی در مورد برداشتن آن صحبت کنی."
🥂کاربرد قانون Chesteron's Fence
💃سیاست و حکومتداری:
قبل از اصلاح یا حذف قوانین و مقررات، باید دلیل اصلی وضع آنها را درک کنیم. این قانون به تصمیمگیرندگان هشدار میدهد که نباید به سادگی قوانین موجود را بدون تحلیل دقیق و شناخت کامل دلیل وجود آنها تغییر دهند.
🎊مدیریت تغییرات در سازمانها:
قبل از ایجاد تغییرات بزرگ در سازمانها، باید فهمید که چرا فرآیندها و ساختارهای فعلی وجود دارند و چه مشکلی را حل میکنند.
💢مهندسی و طراحی سیستمها:
در توسعه نرمافزار و مهندسی سیستمها، قبل از حذف یا تغییر یک قطعه کد یا طراحی، باید فهمید که هدف اصلی و نقش آن چیست.
🤝فرهنگ و سنتها:
قبل از تغییر یا حذف سنتها و فرهنگها، باید دلیل وجود آنها و نقشی که در جامعه ایفا میکنند را درک کنیم.
❤️🔥نتیجهگیری
قانون "Chesteron's Fence" به ما یادآوری میکند که تغییرات نباید بدون شناخت و درک کامل از دلیل وجود وضعیت فعلی انجام شوند. این قانون به تحلیل دقیق و توجه به زمینه تاریخی و منطقی امور تأکید دارد تا از تصمیمات ناآگاهانه و احتمالی جلوگیری شود. این اصل میتواند به حفظ تعادل و جلوگیری از اشتباهات ناشی از ناآگاهی کمک کند و باعث شود که تغییرات با دقت و بررسیهای لازم انجام شوند.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
❇️شرح قانون Chesteron's Fence
چسترتون این مفهوم را در قالب یک داستان توضیح میدهد:
🥸فرض کنید که دو نفر در حال پیادهروی در یک روستا هستند و به یک حصار قدیمی میرسند. نفر اول میگوید: "من نمیفهمم چرا این حصار اینجا است؛ بیایید آن را خراب کنیم." نفر دوم پاسخ میدهد: "اگر دلیل وجود این حصار را نمیدانی، بهتر است آن را دست نزنیم. وقتی فهمیدی چرا این حصار اینجا است، آن وقت میتوانی در مورد برداشتن آن صحبت کنی."
🥂کاربرد قانون Chesteron's Fence
💃سیاست و حکومتداری:
قبل از اصلاح یا حذف قوانین و مقررات، باید دلیل اصلی وضع آنها را درک کنیم. این قانون به تصمیمگیرندگان هشدار میدهد که نباید به سادگی قوانین موجود را بدون تحلیل دقیق و شناخت کامل دلیل وجود آنها تغییر دهند.
🎊مدیریت تغییرات در سازمانها:
قبل از ایجاد تغییرات بزرگ در سازمانها، باید فهمید که چرا فرآیندها و ساختارهای فعلی وجود دارند و چه مشکلی را حل میکنند.
💢مهندسی و طراحی سیستمها:
در توسعه نرمافزار و مهندسی سیستمها، قبل از حذف یا تغییر یک قطعه کد یا طراحی، باید فهمید که هدف اصلی و نقش آن چیست.
🤝فرهنگ و سنتها:
قبل از تغییر یا حذف سنتها و فرهنگها، باید دلیل وجود آنها و نقشی که در جامعه ایفا میکنند را درک کنیم.
❤️🔥نتیجهگیری
قانون "Chesteron's Fence" به ما یادآوری میکند که تغییرات نباید بدون شناخت و درک کامل از دلیل وجود وضعیت فعلی انجام شوند. این قانون به تحلیل دقیق و توجه به زمینه تاریخی و منطقی امور تأکید دارد تا از تصمیمات ناآگاهانه و احتمالی جلوگیری شود. این اصل میتواند به حفظ تعادل و جلوگیری از اشتباهات ناشی از ناآگاهی کمک کند و باعث شود که تغییرات با دقت و بررسیهای لازم انجام شوند.
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍6❤2🕊1
بهروشهای استفاده از Redis
خیلی مطلب کامل و جامعی بود و از مدیریت ممور یردیس، نحوه استفاده از ساختمان دادههای مختلف و طراحی کلیدها تا دیپلوی روی کلاد توضیح داده بود.
اگه از ردیس روی پروداکشن استفاده میکنید از دستش ندید به نظرم.
https://www.dragonflydb.io/guides/redis-best-practices
#terminal_stuff
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
خیلی مطلب کامل و جامعی بود و از مدیریت ممور یردیس، نحوه استفاده از ساختمان دادههای مختلف و طراحی کلیدها تا دیپلوی روی کلاد توضیح داده بود.
اگه از ردیس روی پروداکشن استفاده میکنید از دستش ندید به نظرم.
https://www.dragonflydb.io/guides/redis-best-practices
#terminal_stuff
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍5❤1
📌 BackEnd (Golang) Engineer
📝 Visa Sponsorship: ✅
🌍 Relocation Package: ✅
🏢 Company: moon active
📍 Location: POLAND
⌨️ Category: #Programming
🔗 Tags: #python #golang #redis #rabbitmq #gcp #grpc #sqs #c #server #kubernetes #aws #docker #devops #cloud #scrum #sql
#استخدام
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
📝 Visa Sponsorship: ✅
🌍 Relocation Package: ✅
🏢 Company: moon active
📍 Location: POLAND
⌨️ Category: #Programming
🔗 Tags: #python #golang #redis #rabbitmq #gcp #grpc #sqs #c #server #kubernetes #aws #docker #devops #cloud #scrum #sql
#استخدام
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍3💅2
حجم در ایمیج داکر اهمیت زیادی داره،
با analyze بسته های داخلی یک ایمیج به وسیله docker-phobia و Visualize کردن آنها میتونیم راحتر بفهمیم هر بسته چقدر از حجم ایمیج را به خودش اختصاص داده
https://github.com/remorses/docker-phobia
در عکس node و بعد Perl بیشترین حجم را گرفته
DevTwitter | <MehrdadLinux/>
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
با analyze بسته های داخلی یک ایمیج به وسیله docker-phobia و Visualize کردن آنها میتونیم راحتر بفهمیم هر بسته چقدر از حجم ایمیج را به خودش اختصاص داده
https://github.com/remorses/docker-phobia
در عکس node و بعد Perl بیشترین حجم را گرفته
DevTwitter | <MehrdadLinux/>
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍10❤2🕊1💋1
گیتهاب واقعا دنیای جالبیه، اومده منابع باز و کاربردی CTO رو دسته بندی کرده گذاشته تو این ریپو.
نمیدونم چند ماه زمان میبرد تا این همه گنج رو کسی یه جا پیدا کنه!
https://github.com/kuchin/awesome-cto
DevTwitter | <Ai_Tv/>
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
نمیدونم چند ماه زمان میبرد تا این همه گنج رو کسی یه جا پیدا کنه!
https://github.com/kuchin/awesome-cto
DevTwitter | <Ai_Tv/>
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
🔥12👍6
این سایت با انیمیشن و به صورت بصری به شما الگوریتم هارو یاد میده و میتونید ازش برای یادگیری الگوریتم استفاده کنید.
http://www.algoanim.ide.sk/
DevTwitter
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
http://www.algoanim.ide.sk/
DevTwitter
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
👍13🍓3❤1🎉1💅1
درود به همه دوستان گوفری
تمایل دارید یه ویدیویی ضبط کنم در مورد نکات مهم و طلایی در مصاحبه های گولنگ و سیستم دیزاین؟
تمایل دارید یه ویدیویی ضبط کنم در مورد نکات مهم و طلایی در مصاحبه های گولنگ و سیستم دیزاین؟
Final Results
92%
اره
9%
نه
🔥3💯3👍1🏆1🍾1
این کتاب به گونهای طراحی شده که آسانخوان باشد. از جهشهای فکری بزرگ اجتناب کرده ام. هر زمان که مفهوم جدیدی مطرح میشود، آن را توضیح میدهم یا به شما میگویم که چه زمانی آن را توضیح خواهم داد. مفاهیم اصلی با تمرینها و توضیحات متعدد تقویت میشوند تا بتوانید مفروضات خود را بررسی کنید و مطمئن شوید که موضوعات را متوجه شدهاید.
مطالب کتاب به دقت تنظیم شده است. نیازی به نوشتن کتابی نیست که همهی الگوریتمهای مرتبسازی را پوشش بدهد - به همین دلیل است که ما ویکیپدیا و خانآکادمی را داریم. تمام الگوریتمهایی که در این کتاب گنجاندهام کاربردی هستند و من از آنها در شغلم به عنوان یک مهندس نرمافزار استفاده میکنم.اینها پایهی خوبی برای موضوعات پیچیدهتر فراهم میکنند.
این کتاب با اجازه مترجم "جناب مهران افشار نادری" در سایت اسکایبوک منتشر میشود.
(ایمیل: mehranafsharnaderi@gmail.com)
🛒 لینک خرید نسخه زبان اصلی
🛒 لینک خرید نسخه ترجمه شده
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
مطالب کتاب به دقت تنظیم شده است. نیازی به نوشتن کتابی نیست که همهی الگوریتمهای مرتبسازی را پوشش بدهد - به همین دلیل است که ما ویکیپدیا و خانآکادمی را داریم. تمام الگوریتمهایی که در این کتاب گنجاندهام کاربردی هستند و من از آنها در شغلم به عنوان یک مهندس نرمافزار استفاده میکنم.اینها پایهی خوبی برای موضوعات پیچیدهتر فراهم میکنند.
این کتاب با اجازه مترجم "جناب مهران افشار نادری" در سایت اسکایبوک منتشر میشود.
(ایمیل: mehranafsharnaderi@gmail.com)
🛒 لینک خرید نسخه زبان اصلی
🛒 لینک خرید نسخه ترجمه شده
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍7
Gopher Academy pinned «درود به همه دوستان گوفری
تمایل دارید یه ویدیویی ضبط کنم در مورد نکات مهم و طلایی در مصاحبه های گولنگ و سیستم دیزاین؟»
تمایل دارید یه ویدیویی ضبط کنم در مورد نکات مهم و طلایی در مصاحبه های گولنگ و سیستم دیزاین؟»
🔴چندتا مقاله جالب که امروز توی golang weekly منتشر شده
🟢 توی این مقاله میگه چرا مردم اکثر از ویژگی ورژن 1.23 ناراضی هستن و دلایلش چی می تونه باشه
🔵 https://www.gingerbill.org/article/2024/06/17/go-iterator-design/
🟢 یه سری انتی پترن های عمومی که توی وب اپلیکیشن های گولنگ باید مدنظر قرار داد
🔵 https://threedots.tech/post/common-anti-patterns-in-go-web-applications/
🟢 اگر میخوای در مورد context ها توی گولنگ بیشتر بدونی این مقاله خوبیه
🔵 https://blog.meain.io/2024/golang-context/
#golang_weekly
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
🟢 توی این مقاله میگه چرا مردم اکثر از ویژگی ورژن 1.23 ناراضی هستن و دلایلش چی می تونه باشه
🔵 https://www.gingerbill.org/article/2024/06/17/go-iterator-design/
🟢 یه سری انتی پترن های عمومی که توی وب اپلیکیشن های گولنگ باید مدنظر قرار داد
🔵 https://threedots.tech/post/common-anti-patterns-in-go-web-applications/
🟢 اگر میخوای در مورد context ها توی گولنگ بیشتر بدونی این مقاله خوبیه
🔵 https://blog.meain.io/2024/golang-context/
#golang_weekly
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
❤4🕊1🏆1🍓1
اگر دنبال اطلاعاتی همچون استان ها و شهرستان های ایران به همراه مختصات جغرافیایی و پیش شماره تلفن می باشید
این گزینه خوبیه
https://github.com/shimadotdev/iran-regions/blob/main/resources/json/data.json
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
این گزینه خوبیه
https://github.com/shimadotdev/iran-regions/blob/main/resources/json/data.json
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍6
✍️ Massimo Dev
منظور از gRPC چیه؟
ساختار gRPC یه جور تکنولوژی و ابزار برای برنامهنویسهاست که کمک میکنه دو تا برنامه یا سرویس مختلف بتونن با هم حرف بزنن، حتی اگه روی سرورهای مختلفی باشن. انگار که این دو تا برنامه دارن تو یه اتاق با همدیگه صحبت میکنن، ولی در واقع هر کدومشون تو یه شهر دیگهن.
✳️ چطوری کار میکنه؟
فرض کن دو تا برنامه داریم، یکی که میخواد یه کار خاص انجام بده و یکی دیگه که قراره اون کار رو براش انجام بده:
1. تعریف کارها:
- اول از همه، باید تعریف کنیم که چه کارهایی باید انجام بشه. مثلاً برنامه A میخواد از برنامه B بپرسه که "اسم من چیه؟" و برنامه B باید جواب بده "اسم تو فلانه."
2. ارتباطات رو تنظیم میکنیم:
- باید یه روش ارتباطی مشخص کنیم که این دو تا برنامه چجوری باید با هم حرف بزنن. اینجا از gRPC استفاده میکنیم که یه جور زبان مشترکه برای ارتباط بین این برنامهها.
3. تولید کدهای ارتباطی:
- خود gRPC بهصورت خودکار کدهایی رو تولید میکنه که این برنامهها بتونن راحت با هم ارتباط برقرار کنن. این کدها مثل پلهایی میمونن که ارتباط بین دو طرف رو برقرار میکنن.
4. اجرای سرویس:
- حالا برنامه B که قراره جواب بده، یه سرویس رو راه میندازه و گوش به زنگ میشه تا وقتی برنامه A ازش سوال میپرسه، جواب بده.
5. فراخوانی سرویس:
- برنامه A میاد و از طریق این پلهای ارتباطی که gRPC ساخته، سوالش رو میپرسه و برنامه B جوابش رو میده.
🚦چرا gRPC خوبه؟
1. سریع و کارآمد:
- خود gRPC خیلی سریعه و از روشهای پیشرفته برای ارسال و دریافت دادهها استفاده میکنه که باعث میشه ارتباطات سریع و بدون معطلی باشن. در واقع فشرده سازی به خاطر شیوه ارسال داده (یه جور زیپ کردن) باعث میشه خیلی سریع بفرسته اطلاعات رو.
2. پشتیبانی از زبانهای مختلف:
- با gRPC میتونی برنامههایی که با زبانهای برنامهنویسی مختلف نوشته شدن رو به هم وصل کنی. مثلاً یه برنامه با #پایتون و یه برنامه با #جاوا .
3. کم کردن کدهای اضافی:
- خود gRPC کدهای لازم برای ارتباط رو تولید میکنه و نیاز نیست برنامهنویسها خودشون این کدها رو بنویسن، که این باعث میشه خطاها کمتر بشن و کارها سریعتر پیش برن.
4. استریمینگ:
- ابزار gRPC میتونه دادهها رو به صورت پیوسته و دنبالهدار بفرسته و بگیره، که این خیلی به درد برنامههایی میخوره که نیاز دارن دائم اطلاعات بفرستن و بگیرن، مثل استریمهای ویدیو.
5. سازگاری و همخوانی:
- سرویسهای gRPC راحت با هم کار میکنن و نیاز نیست نگرانی زیادی بابت ناسازگاریهای مختلف داشته باشی.
به طور کلی، gRPC یه ابزار عالیه برای اینکه برنامهها و سرویسهای مختلف بتونن به راحتی و با سرعت بالا با هم ارتباط برقرار کنن، حتی اگه از زبانها و تکنولوژیهای مختلفی استفاده کنن.
#طراحی_سیستم #دیتابیس #مهندس_نرم_افزار #سرور
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
منظور از gRPC چیه؟
ساختار gRPC یه جور تکنولوژی و ابزار برای برنامهنویسهاست که کمک میکنه دو تا برنامه یا سرویس مختلف بتونن با هم حرف بزنن، حتی اگه روی سرورهای مختلفی باشن. انگار که این دو تا برنامه دارن تو یه اتاق با همدیگه صحبت میکنن، ولی در واقع هر کدومشون تو یه شهر دیگهن.
✳️ چطوری کار میکنه؟
فرض کن دو تا برنامه داریم، یکی که میخواد یه کار خاص انجام بده و یکی دیگه که قراره اون کار رو براش انجام بده:
1. تعریف کارها:
- اول از همه، باید تعریف کنیم که چه کارهایی باید انجام بشه. مثلاً برنامه A میخواد از برنامه B بپرسه که "اسم من چیه؟" و برنامه B باید جواب بده "اسم تو فلانه."
2. ارتباطات رو تنظیم میکنیم:
- باید یه روش ارتباطی مشخص کنیم که این دو تا برنامه چجوری باید با هم حرف بزنن. اینجا از gRPC استفاده میکنیم که یه جور زبان مشترکه برای ارتباط بین این برنامهها.
3. تولید کدهای ارتباطی:
- خود gRPC بهصورت خودکار کدهایی رو تولید میکنه که این برنامهها بتونن راحت با هم ارتباط برقرار کنن. این کدها مثل پلهایی میمونن که ارتباط بین دو طرف رو برقرار میکنن.
4. اجرای سرویس:
- حالا برنامه B که قراره جواب بده، یه سرویس رو راه میندازه و گوش به زنگ میشه تا وقتی برنامه A ازش سوال میپرسه، جواب بده.
5. فراخوانی سرویس:
- برنامه A میاد و از طریق این پلهای ارتباطی که gRPC ساخته، سوالش رو میپرسه و برنامه B جوابش رو میده.
🚦چرا gRPC خوبه؟
1. سریع و کارآمد:
- خود gRPC خیلی سریعه و از روشهای پیشرفته برای ارسال و دریافت دادهها استفاده میکنه که باعث میشه ارتباطات سریع و بدون معطلی باشن. در واقع فشرده سازی به خاطر شیوه ارسال داده (یه جور زیپ کردن) باعث میشه خیلی سریع بفرسته اطلاعات رو.
2. پشتیبانی از زبانهای مختلف:
- با gRPC میتونی برنامههایی که با زبانهای برنامهنویسی مختلف نوشته شدن رو به هم وصل کنی. مثلاً یه برنامه با #پایتون و یه برنامه با #جاوا .
3. کم کردن کدهای اضافی:
- خود gRPC کدهای لازم برای ارتباط رو تولید میکنه و نیاز نیست برنامهنویسها خودشون این کدها رو بنویسن، که این باعث میشه خطاها کمتر بشن و کارها سریعتر پیش برن.
4. استریمینگ:
- ابزار gRPC میتونه دادهها رو به صورت پیوسته و دنبالهدار بفرسته و بگیره، که این خیلی به درد برنامههایی میخوره که نیاز دارن دائم اطلاعات بفرستن و بگیرن، مثل استریمهای ویدیو.
5. سازگاری و همخوانی:
- سرویسهای gRPC راحت با هم کار میکنن و نیاز نیست نگرانی زیادی بابت ناسازگاریهای مختلف داشته باشی.
به طور کلی، gRPC یه ابزار عالیه برای اینکه برنامهها و سرویسهای مختلف بتونن به راحتی و با سرعت بالا با هم ارتباط برقرار کنن، حتی اگه از زبانها و تکنولوژیهای مختلفی استفاده کنن.
#طراحی_سیستم #دیتابیس #مهندس_نرم_افزار #سرور
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
🔥12👍3🕊1🏆1💊1
✍️ Massimo Dev
تفاوت Kafka و RabbitMQ چیه؟
🔵 کافکا یا Kafka
کافکا یه پلتفرم استریمینگ توزیعشده است که برای حجم بالای داده، تاخیر پایین و تحملپذیری در برابر خرابی طراحی شده. اول توسط لینکدین توسعه داده شد و الان یه پروژه اپن سورس از بنیاد آپاچی است.
✳️ معماری کافکا بر اساس یه سرویس لاگ توزیعشده و پارتیشنبندی شده کار میکنه. پیامها تو تاپیکها (موضوعات) سازماندهی میشن و هر تاپیک به پارتیشنها تقسیم میشه. تولیدکنندهها پیامها رو به تاپیکها میفرستن و مصرفکنندهها پیامها رو از تاپیکها میخونن.
مزایا
🔺حجم بالا: کافکا میتونه میلیونها پیام در ثانیه رو پردازش کنه.
🔹مقیاسپذیری: معماری توزیعشده کافکا اجازه میده با اضافه کردن نودها و پارتیشنها مقیاس رو بالا برد.
🔹دوام: پیامها روی دیسک نوشته میشن و بین چند نود تکرار میشن، پس خیلی پایدارن.
🔹پردازش استریم: کافکا با فریمورکهای پردازش استریم مثل فیلینک و استورم خوب کار میکنه.
🔹گروههای مصرفکننده: کافکا اجازه میده چند مصرفکننده از یه تاپیک بخونن و بار رو به طور مساوی توزیع کنن.
معایب
🔻راهاندازی پیچیده: کافکا نیاز به تنظیمات و پیکربندی دقیق داره، پس راهاندازی اولیهاش پیچیدهس.
🔻نگهداری: مدیریت و نگهداری کلاسترهای کافکا پیچیدهس و نیاز به تخصص داره.
🔻تاخیر: کافکا بیشتر برای حجم بالا بهینه شده و ممکنه تاخیر بیشتری نسبت به بعضی سیستمهای دیگه داشته باشه.
🔵 ربیت یا RabbitMQ
ربیتامکیو یه بروکر پیام هست که پروتکل AMQP رو پیادهسازی میکنه.
✳️ ربیتامکیو از معماری مبتنی بر بروکر استفاده میکنه که در اون تولیدکنندهها پیامها رو به اکسچنجها میفرستن و اکسچنجها اونها رو بر اساس قوانین مسیریابی به صفها میفرستن. مصرفکنندهها پیامها رو از این صفها میخونن.
مزایا
🔹سهولت استفاده: ربیتامکیو برای راهاندازی و استفاده آسونه.
🔹انعطافپذیری: از چندین پروتکل پیامرسانی (AMQP، MQTT، STOMP) و الگوهای مختلف (pub-sub، درخواست-پاسخ) پشتیبانی میکنه.
🔹تاخیر پایین: ربیتامکیو برای پیامرسانی با تاخیر پایین بهینه شده.
🔹تحویل قابل اعتماد: ویژگیهایی مثل تاییدیه پیام و ماندگاری برای اطمینان از تحویل پیام داره.
معایب
🔻مقیاسپذیری: ربیتامکیو میتونه مقیاس افقی داشته باشه، ولی به اندازه کافکا در پردازش حجم خیلی بالا کارآمد نیست.
🔻نقطه شکست واحد یا Single Point of Failure: معماری ربیتامکیو میتونه دچار نقطه شکست واحد بشه، البته کلاسترینگ میتونه اینو کاهش بده.
🔻عملکرد: ربیتامکیو ممکنه تو پردازش حجم بالای پیامها به اندازه کافکا کارآمد نباشه.
🔻ترتیب پیامها: اطمینان از ترتیب دقیق پیامها تو سناریوهای مسیریابی پیچیده میتونه چالشبرانگیز باشه.
موارد استفاده هرکدوم رو در ادامه میگم:
کافکا
1. استفاده از Event Sourcing: ضبط و پردازش جریان پیوسته رویدادها.
2. جمع اوری Log Aggregation: جمعآوری لاگها از منابع مختلف برای نظارت و تحلیل.
3. جمعآوری متریکها: جمعآوری متریکها از برنامههای توزیعشده برای تحلیل در زمان واقعی.
4. خطوط داده یا Data Pipeline: انتقال حجم بالای داده بین سیستمها یا مراحل پردازش.
ربیتامکیو
1. درخواست-پاسخ: پیادهسازی ارتباط همزمان بین سرویسها.
2. پیامرسانی Real-time: پیامرسانی با تاخیر پایین برای برنامههای نیازمند بهروزرسانیهای زمان واقعی.
3. برنامههای IoT: مدیریت ارتباط بین دستگاههای IoT و سیستمهای پشتیبان.
مشتی باشید!
#کافکا #ربیت #سیستم_دیزاین
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
تفاوت Kafka و RabbitMQ چیه؟
🔵 کافکا یا Kafka
کافکا یه پلتفرم استریمینگ توزیعشده است که برای حجم بالای داده، تاخیر پایین و تحملپذیری در برابر خرابی طراحی شده. اول توسط لینکدین توسعه داده شد و الان یه پروژه اپن سورس از بنیاد آپاچی است.
✳️ معماری کافکا بر اساس یه سرویس لاگ توزیعشده و پارتیشنبندی شده کار میکنه. پیامها تو تاپیکها (موضوعات) سازماندهی میشن و هر تاپیک به پارتیشنها تقسیم میشه. تولیدکنندهها پیامها رو به تاپیکها میفرستن و مصرفکنندهها پیامها رو از تاپیکها میخونن.
مزایا
🔺حجم بالا: کافکا میتونه میلیونها پیام در ثانیه رو پردازش کنه.
🔹مقیاسپذیری: معماری توزیعشده کافکا اجازه میده با اضافه کردن نودها و پارتیشنها مقیاس رو بالا برد.
🔹دوام: پیامها روی دیسک نوشته میشن و بین چند نود تکرار میشن، پس خیلی پایدارن.
🔹پردازش استریم: کافکا با فریمورکهای پردازش استریم مثل فیلینک و استورم خوب کار میکنه.
🔹گروههای مصرفکننده: کافکا اجازه میده چند مصرفکننده از یه تاپیک بخونن و بار رو به طور مساوی توزیع کنن.
معایب
🔻راهاندازی پیچیده: کافکا نیاز به تنظیمات و پیکربندی دقیق داره، پس راهاندازی اولیهاش پیچیدهس.
🔻نگهداری: مدیریت و نگهداری کلاسترهای کافکا پیچیدهس و نیاز به تخصص داره.
🔻تاخیر: کافکا بیشتر برای حجم بالا بهینه شده و ممکنه تاخیر بیشتری نسبت به بعضی سیستمهای دیگه داشته باشه.
🔵 ربیت یا RabbitMQ
ربیتامکیو یه بروکر پیام هست که پروتکل AMQP رو پیادهسازی میکنه.
✳️ ربیتامکیو از معماری مبتنی بر بروکر استفاده میکنه که در اون تولیدکنندهها پیامها رو به اکسچنجها میفرستن و اکسچنجها اونها رو بر اساس قوانین مسیریابی به صفها میفرستن. مصرفکنندهها پیامها رو از این صفها میخونن.
مزایا
🔹سهولت استفاده: ربیتامکیو برای راهاندازی و استفاده آسونه.
🔹انعطافپذیری: از چندین پروتکل پیامرسانی (AMQP، MQTT، STOMP) و الگوهای مختلف (pub-sub، درخواست-پاسخ) پشتیبانی میکنه.
🔹تاخیر پایین: ربیتامکیو برای پیامرسانی با تاخیر پایین بهینه شده.
🔹تحویل قابل اعتماد: ویژگیهایی مثل تاییدیه پیام و ماندگاری برای اطمینان از تحویل پیام داره.
معایب
🔻مقیاسپذیری: ربیتامکیو میتونه مقیاس افقی داشته باشه، ولی به اندازه کافکا در پردازش حجم خیلی بالا کارآمد نیست.
🔻نقطه شکست واحد یا Single Point of Failure: معماری ربیتامکیو میتونه دچار نقطه شکست واحد بشه، البته کلاسترینگ میتونه اینو کاهش بده.
🔻عملکرد: ربیتامکیو ممکنه تو پردازش حجم بالای پیامها به اندازه کافکا کارآمد نباشه.
🔻ترتیب پیامها: اطمینان از ترتیب دقیق پیامها تو سناریوهای مسیریابی پیچیده میتونه چالشبرانگیز باشه.
موارد استفاده هرکدوم رو در ادامه میگم:
کافکا
1. استفاده از Event Sourcing: ضبط و پردازش جریان پیوسته رویدادها.
2. جمع اوری Log Aggregation: جمعآوری لاگها از منابع مختلف برای نظارت و تحلیل.
3. جمعآوری متریکها: جمعآوری متریکها از برنامههای توزیعشده برای تحلیل در زمان واقعی.
4. خطوط داده یا Data Pipeline: انتقال حجم بالای داده بین سیستمها یا مراحل پردازش.
ربیتامکیو
1. درخواست-پاسخ: پیادهسازی ارتباط همزمان بین سرویسها.
2. پیامرسانی Real-time: پیامرسانی با تاخیر پایین برای برنامههای نیازمند بهروزرسانیهای زمان واقعی.
3. برنامههای IoT: مدیریت ارتباط بین دستگاههای IoT و سیستمهای پشتیبان.
مشتی باشید!
#کافکا #ربیت #سیستم_دیزاین
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍7🍾3🔥1
بهترین ابزار برای چک کردن داکر فایل از لحاظ امنیتی و لینتری
۱. Hadolint
این Hadolint یک لینتر برای Dockerfileها است که به بررسی مشکلات سینتکس، بهینهسازی و امنیتی فایلهای Docker میپردازد.
۲. Trivy
این Trivy یک ابزار اسکن امنیتی برای کانتینرها است که به بررسی آسیبپذیریهای شناختهشده در تصاویر Docker میپردازد.
۳. Docker Bench for Security
این Docker Bench for Security یک اسکریپت تست امنیتی است که به ارزیابی تنظیمات Docker در برابر بهترین شیوههای امنیتی پرداخته و گزارشی از نقاط ضعف موجود ارائه میدهد.
۴. Clair
این Clair یک ابزار تحلیل و اسکن امنیتی تصاویر کانتینری است که به شناسایی آسیبپذیریهای امنیتی در تصاویر Docker میپردازد.
۵. Snyk
این Snyk یک ابزار اسکن امنیتی برای شناسایی و رفع آسیبپذیریهای موجود در تصاویر Docker است
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
۱. Hadolint
این Hadolint یک لینتر برای Dockerfileها است که به بررسی مشکلات سینتکس، بهینهسازی و امنیتی فایلهای Docker میپردازد.
۲. Trivy
این Trivy یک ابزار اسکن امنیتی برای کانتینرها است که به بررسی آسیبپذیریهای شناختهشده در تصاویر Docker میپردازد.
۳. Docker Bench for Security
این Docker Bench for Security یک اسکریپت تست امنیتی است که به ارزیابی تنظیمات Docker در برابر بهترین شیوههای امنیتی پرداخته و گزارشی از نقاط ضعف موجود ارائه میدهد.
۴. Clair
این Clair یک ابزار تحلیل و اسکن امنیتی تصاویر کانتینری است که به شناسایی آسیبپذیریهای امنیتی در تصاویر Docker میپردازد.
۵. Snyk
این Snyk یک ابزار اسکن امنیتی برای شناسایی و رفع آسیبپذیریهای موجود در تصاویر Docker است
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍8❤1🎉1
What is the primary purpose of Go's 'reflect' package?
Anonymous Quiz
4%
To perform complex mathematical operations
86%
To provide reflection to inspect the type of variables at runtime
4%
To manage memory more efficiently
6%
To handle all error reporting in Go
🔥5👍2💅2🕊1💋1💊1
ابزار pgTAP یک چارچوب تست برای PostgreSQL است که به شما اجازه میدهد تستهای واحدی برای دیتابیس و کوئریهای SQL خود بنویسید. در زیر نمونهای از تست pgTAP برای تست یک کوئری SQL آمده است.
نصب pgTAP
قبل از هر چیز، باید pgTAP را نصب کنید. اگر هنوز pgTAP را نصب نکردهاید، میتوانید آن را با استفاده از دستورات زیر نصب کنید:
ایجاد جدول و دادهها
فرض کنید ما یک جدول به نام best_programmers داریم که میخواهیم کوئریهای مربوط به آن را تست کنیم.
نوشتن تستها با pgTAP
حالا میتوانیم تستهای خود را با استفاده از pgTAP بنویسیم. در اینجا چند تست نمونه برای کوئریهای SQL مختلف آورده شده است.
تست برای بررسی تعداد رکوردها:
تست برای بررسی مقدار خاص در یک ستون:
تست برای بررسی تعداد کل رکوردها:
تست برای بررسی کوئری پیچیدهتر:
اجرای تستها
برای اجرای تستها، میتوانید از ابزار pg_prove استفاده کنید که به همراه pgTAP ارائه میشود. دستورات زیر را در ترمینال اجرا کنید:
این دستورات تستهای نوشتهشده را روی دیتابیس شما اجرا میکند و نتایج تستها را نمایش میدهد.
توضیحات:
اBEGIN و ROLLBACK: این دستورات برای اجرای تستها در یک تراکنش استفاده میشوند تا دیتابیس شما در حین تست تغییر نکند.
اplan(n): تعداد تستهایی که قصد دارید اجرا کنید را مشخص میکند.
اis(expr, expected, message): این تابع بررسی میکند که نتیجه expr برابر با expected است یا نه و یک پیام مرتبط نمایش میدهد.
اhasnt_null(table, condition, message): این تابع بررسی میکند که هیچ رکوردی در جدول مشخص شده بر اساس شرط داده شده نال نباشد.
اfinish(): پایان تستها را مشخص میکند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
نصب pgTAP
قبل از هر چیز، باید pgTAP را نصب کنید. اگر هنوز pgTAP را نصب نکردهاید، میتوانید آن را با استفاده از دستورات زیر نصب کنید:
CREATE EXTENSION pgtap;
ایجاد جدول و دادهها
فرض کنید ما یک جدول به نام best_programmers داریم که میخواهیم کوئریهای مربوط به آن را تست کنیم.
CREATE TABLE best_programmers (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
rank INTEGER NOT NULL
);
INSERT INTO best_programmers (name, rank) VALUES
('Alice', 1),
('Bob', 2),
('Charlie', 3);
نوشتن تستها با pgTAP
حالا میتوانیم تستهای خود را با استفاده از pgTAP بنویسیم. در اینجا چند تست نمونه برای کوئریهای SQL مختلف آورده شده است.
تست برای بررسی تعداد رکوردها:
-- Load the pgTAP functions
BEGIN;
SELECT plan(1);
-- Check the number of records in the table
SELECT hasnt_null('best_programmers', 'rank IS NOT NULL', 'All programmers have a rank');
SELECT finish();
ROLLBACK;
تست برای بررسی مقدار خاص در یک ستون:
BEGIN;
SELECT plan(1);
-- Check if 'Alice' has the rank 1
SELECT is(
(SELECT rank FROM best_programmers WHERE name = 'Alice'),
1,
'Alice should have rank 1'
);
SELECT finish();
ROLLBACK;
تست برای بررسی تعداد کل رکوردها:
BEGIN;
SELECT plan(1);
-- Check the total number of records in the table
SELECT is(
(SELECT COUNT(*) FROM best_programmers),
3,
'Total number of programmers should be 3'
);
SELECT finish();
ROLLBACK;
تست برای بررسی کوئری پیچیدهتر:
BEGIN;
SELECT plan(1);
-- Check if the top-ranked programmer is 'Alice'
SELECT is(
(SELECT name FROM best_programmers ORDER BY rank LIMIT 1),
'Alice',
'The top-ranked programmer should be Alice'
);
SELECT finish();
ROLLBACK;
اجرای تستها
برای اجرای تستها، میتوانید از ابزار pg_prove استفاده کنید که به همراه pgTAP ارائه میشود. دستورات زیر را در ترمینال اجرا کنید:
pg_prove -d your_database_name your_test_file.sql
این دستورات تستهای نوشتهشده را روی دیتابیس شما اجرا میکند و نتایج تستها را نمایش میدهد.
توضیحات:
اBEGIN و ROLLBACK: این دستورات برای اجرای تستها در یک تراکنش استفاده میشوند تا دیتابیس شما در حین تست تغییر نکند.
اplan(n): تعداد تستهایی که قصد دارید اجرا کنید را مشخص میکند.
اis(expr, expected, message): این تابع بررسی میکند که نتیجه expr برابر با expected است یا نه و یک پیام مرتبط نمایش میدهد.
اhasnt_null(table, condition, message): این تابع بررسی میکند که هیچ رکوردی در جدول مشخص شده بر اساس شرط داده شده نال نباشد.
اfinish(): پایان تستها را مشخص میکند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍6🍓1🍾1💅1💊1
✍️در HashiCorp Vault، انواع مختلفی از دادههای محرمانه (secrets) را میتوان مدیریت کرد. هر نوع دادهی محرمانه (secret) توسط یک نوع خاص از "secret engine" مدیریت میشود. در زیر به بررسی برخی از انواع مهم دادههای محرمانه در Vault و secret engineهای مرتبط با آنها میپردازیم:
1. Key/Value Secrets
این نوع از دادههای محرمانه برای ذخیرهسازی جفت کلید/مقدار (key-value pairs) استفاده میشود.
Secret Engine: kv
نسخهها: kv-v1 و kv-v2
کاربرد: ذخیرهسازی تنظیمات پیکربندی، متغیرهای محیطی، و سایر دادههای ساده.
2. Database Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به پایگاههای داده استفاده میشود.
Secret Engine: database
کاربرد: ایجاد و مدیریت اعتبارنامههای موقت برای پایگاههای دادههای مختلف مانند MySQL، PostgreSQL، و غیره.
3. AWS Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به سرویسهای AWS استفاده میشود.
Secret Engine: aws
کاربرد: ایجاد و مدیریت اعتبارنامههای IAM برای دسترسی به سرویسهای AWS.
4. Cubbyhole Secrets
این نوع از دادههای محرمانه برای ذخیرهسازی دادههایی استفاده میشود که فقط برای عمر یک توکن خاص معتبر هستند.
Secret Engine: cubbyhole
کاربرد: ذخیرهسازی دادههای موقت و توکنها.
5. PKI (Public Key Infrastructure) Secrets
این نوع از دادههای محرمانه برای مدیریت گواهینامههای SSL/TLS و CA (Certificate Authority) استفاده میشود.
Secret Engine: pki
کاربرد: ایجاد، مدیریت و امضای گواهینامههای دیجیتال.
6. Transit Secrets
این نوع از دادههای محرمانه برای رمزنگاری دادهها به صورت در حال عبور (encryption as a service) استفاده میشود.
Secret Engine: transit
کاربرد: رمزنگاری و رمزگشایی دادهها بدون ذخیرهسازی دادههای رمزنگاری شده.
7. Identity Secrets
این نوع از دادههای محرمانه برای مدیریت هویتها و نقشها استفاده میشود.
Secret Engine: identity
کاربرد: ایجاد و مدیریت هویتها، گروهها و نقشها.
8. SSH Secrets
این نوع از دادههای محرمانه برای مدیریت کلیدهای SSH و ارائه دسترسی SSH استفاده میشود.
Secret Engine: ssh
کاربرد: ایجاد و مدیریت کلیدهای SSH و دسترسی SSH به سیستمها.
9. TOTP (Time-based One-Time Password) Secrets
این نوع از دادههای محرمانه برای تولید رمزهای یکبار مصرف مبتنی بر زمان استفاده میشود.
Secret Engine: totp
کاربرد: ایجاد و مدیریت رمزهای یکبار مصرف برای احراز هویت دو مرحلهای.
10. Consul Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به Consul استفاده میشود.
Secret Engine: consul
کاربرد: ایجاد و مدیریت اعتبارنامههای موقت برای دسترسی به Consul.
11. Active Directory Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به Active Directory استفاده میشود.
Secret Engine: ad
کاربرد: ایجاد و مدیریت اعتبارنامههای Active Directory.
هر یک از این secret engineها قابلیتها و تنظیمات خاص خود را دارند که به شما امکان میدهد دادههای محرمانه مختلف را به صورت امن مدیریت و کنترل کنید.
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
1. Key/Value Secrets
این نوع از دادههای محرمانه برای ذخیرهسازی جفت کلید/مقدار (key-value pairs) استفاده میشود.
Secret Engine: kv
نسخهها: kv-v1 و kv-v2
کاربرد: ذخیرهسازی تنظیمات پیکربندی، متغیرهای محیطی، و سایر دادههای ساده.
2. Database Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به پایگاههای داده استفاده میشود.
Secret Engine: database
کاربرد: ایجاد و مدیریت اعتبارنامههای موقت برای پایگاههای دادههای مختلف مانند MySQL، PostgreSQL، و غیره.
3. AWS Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به سرویسهای AWS استفاده میشود.
Secret Engine: aws
کاربرد: ایجاد و مدیریت اعتبارنامههای IAM برای دسترسی به سرویسهای AWS.
4. Cubbyhole Secrets
این نوع از دادههای محرمانه برای ذخیرهسازی دادههایی استفاده میشود که فقط برای عمر یک توکن خاص معتبر هستند.
Secret Engine: cubbyhole
کاربرد: ذخیرهسازی دادههای موقت و توکنها.
5. PKI (Public Key Infrastructure) Secrets
این نوع از دادههای محرمانه برای مدیریت گواهینامههای SSL/TLS و CA (Certificate Authority) استفاده میشود.
Secret Engine: pki
کاربرد: ایجاد، مدیریت و امضای گواهینامههای دیجیتال.
6. Transit Secrets
این نوع از دادههای محرمانه برای رمزنگاری دادهها به صورت در حال عبور (encryption as a service) استفاده میشود.
Secret Engine: transit
کاربرد: رمزنگاری و رمزگشایی دادهها بدون ذخیرهسازی دادههای رمزنگاری شده.
7. Identity Secrets
این نوع از دادههای محرمانه برای مدیریت هویتها و نقشها استفاده میشود.
Secret Engine: identity
کاربرد: ایجاد و مدیریت هویتها، گروهها و نقشها.
8. SSH Secrets
این نوع از دادههای محرمانه برای مدیریت کلیدهای SSH و ارائه دسترسی SSH استفاده میشود.
Secret Engine: ssh
کاربرد: ایجاد و مدیریت کلیدهای SSH و دسترسی SSH به سیستمها.
9. TOTP (Time-based One-Time Password) Secrets
این نوع از دادههای محرمانه برای تولید رمزهای یکبار مصرف مبتنی بر زمان استفاده میشود.
Secret Engine: totp
کاربرد: ایجاد و مدیریت رمزهای یکبار مصرف برای احراز هویت دو مرحلهای.
10. Consul Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به Consul استفاده میشود.
Secret Engine: consul
کاربرد: ایجاد و مدیریت اعتبارنامههای موقت برای دسترسی به Consul.
11. Active Directory Secrets
این نوع از دادههای محرمانه برای مدیریت اعتبارنامههای دسترسی به Active Directory استفاده میشود.
Secret Engine: ad
کاربرد: ایجاد و مدیریت اعتبارنامههای Active Directory.
هر یک از این secret engineها قابلیتها و تنظیمات خاص خود را دارند که به شما امکان میدهد دادههای محرمانه مختلف را به صورت امن مدیریت و کنترل کنید.
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍2🔥1💋1💅1
📌 Staff Software Engineer (Golang)
📝 Visa Sponsorship: ✅
🌍 Relocation Package: ✅
🏢 Company: kiwi.com
📍 Location: CZECHIA
⌨️ Category: #Programming
🔗 Tags: #golang #containerization #scrum
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
📝 Visa Sponsorship: ✅
🌍 Relocation Package: ✅
🏢 Company: kiwi.com
📍 Location: CZECHIA
⌨️ Category: #Programming
🔗 Tags: #golang #containerization #scrum
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍5💅1
Which statement best describes a goroutine in Go?
Anonymous Quiz
3%
A simpler form of a thread
9%
A process that runs independently of others
88%
A lightweight thread managed by the Go runtime
👍1🍾1💋1
✍️تفاوتهای کلیدی context.WithTimeout و context.WithDeadline
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🔻نوع ورودی زمان:
WithTimeout
یک مدت زمان (Duration) دریافت میکند.
WithDeadline
یک زمان مشخص (Time) دریافت میکند.
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🔻سناریوی استفاده:
WithTimeout
برای تعیین مدت زمان ثابت از لحظه ایجاد زمینه مفید است.
🔻کاربرد اصلی:
استفاده از context.WithTimeout زمانی مناسب است که بخواهید یک مدت زمان ثابت (مانند 5 ثانیه) از زمان حال را تعیین کنید تا عملیات پس از این مدت زمان لغو شود.
🔻سناریوهای معمول:
زمانی که میخواهید یک عملیات شبکهای یا درخواست HTTP را محدود به یک مدت زمان مشخص کنید.
برای تعیین مهلت زمانی برای انجام کارهایی که نباید بیش از یک مدت زمان مشخص طول بکشند.
مناسب برای عملیاتهایی که مدت زمان آنها از زمان شروع عملیات محاسبه میشود.
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
WithDeadline
برای تنظیم یک زمان پایان دقیق مفید است.
🔻کاربرد اصلی:
استفاده از context.WithDeadline زمانی مناسب است که بخواهید یک زمان دقیق در آینده (مثلاً ساعت 3 بعد از ظهر) را تعیین کنید تا عملیات پس از آن زمان لغو شود.
🔻سناریوهای معمول:
زمانی که میخواهید یک عملیات تا یک زمان خاص در آینده به پایان برسد، مانند پایان روز کاری.
برای همگامسازی با زمانبندیهای خارجی یا ضربالاجلهای دقیق.
مناسب برای عملیاتهایی که زمان پایان آنها باید دقیقاً در یک زمان خاص در آینده تعیین شود.
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💜جمعبندی
انتخاب بین context.WithTimeout و context.WithDeadline بستگی به نیاز شما دارد. اگر به یک مدت زمان ثابت برای عملیات نیاز دارید، از WithTimeout استفاده کنید. اگر نیاز دارید عملیات تا یک زمان دقیق در آینده به پایان برسد، از WithDeadline استفاده کنید.
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🔻نوع ورودی زمان:
WithTimeout
یک مدت زمان (Duration) دریافت میکند.
WithDeadline
یک زمان مشخص (Time) دریافت میکند.
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🔻سناریوی استفاده:
WithTimeout
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
برای تعیین مدت زمان ثابت از لحظه ایجاد زمینه مفید است.
🔻کاربرد اصلی:
استفاده از context.WithTimeout زمانی مناسب است که بخواهید یک مدت زمان ثابت (مانند 5 ثانیه) از زمان حال را تعیین کنید تا عملیات پس از این مدت زمان لغو شود.
🔻سناریوهای معمول:
زمانی که میخواهید یک عملیات شبکهای یا درخواست HTTP را محدود به یک مدت زمان مشخص کنید.
برای تعیین مهلت زمانی برای انجام کارهایی که نباید بیش از یک مدت زمان مشخص طول بکشند.
مناسب برای عملیاتهایی که مدت زمان آنها از زمان شروع عملیات محاسبه میشود.
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
WithDeadline
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)
برای تنظیم یک زمان پایان دقیق مفید است.
🔻کاربرد اصلی:
استفاده از context.WithDeadline زمانی مناسب است که بخواهید یک زمان دقیق در آینده (مثلاً ساعت 3 بعد از ظهر) را تعیین کنید تا عملیات پس از آن زمان لغو شود.
🔻سناریوهای معمول:
زمانی که میخواهید یک عملیات تا یک زمان خاص در آینده به پایان برسد، مانند پایان روز کاری.
برای همگامسازی با زمانبندیهای خارجی یا ضربالاجلهای دقیق.
مناسب برای عملیاتهایی که زمان پایان آنها باید دقیقاً در یک زمان خاص در آینده تعیین شود.
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
💜جمعبندی
انتخاب بین context.WithTimeout و context.WithDeadline بستگی به نیاز شما دارد. اگر به یک مدت زمان ثابت برای عملیات نیاز دارید، از WithTimeout استفاده کنید. اگر نیاز دارید عملیات تا یک زمان دقیق در آینده به پایان برسد، از WithDeadline استفاده کنید.
➖➖➖➖➖➖➖➖
👑 @gopher_academy | 💸 Donate | 💋 Boost
👍6🔥2🏆1