Forwarded from Learning With M (Masoud DaneshPour)
امروز میخوام در مورد Exchange ها در RabbitMQ براتون بگم. Exchange ها مثل پستچیهای پیامرسان عمل میکنن و تصمیم میگیرن پیامها رو چطوری به صفها (Queue) برسونن. بیاید ببینیم هر کدوم چیکار میکنن:
Direct Exchange 🎯
کارش چیه؟
پیامها رو فقط به صفهایی میفرسته که کلید مسیریابی (Routing Key) دقیقاً همون چیزی باشه که تعیین کردیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو دقیقاً به یک صف خاص برسونیم. مثلاً پیامهای "سفارش جدید" فقط به صف "پردازش سفارش" برن.
مثال:
Routing Key: order.created ➡️ Queue: order_queue
Fanout Exchange 📢
کارش چیه؟
پیامها رو به همه صفهای متصل شده میفرسته، بدون توجه به کلید مسیریابی.
کی استفاده کنیم؟
وقتی میخوایم یک پیام رو به چندین صف ارسال کنیم. مثلاً ارسال اطلاعرسانی به همه گروه های کاربران.
مثال:
پیام: "تخفیف ویژه!" ➡️ Queue: user_group1_queue, user_group2_queue, user_group3_queue
Topic Exchange 🌐
کارش چیه؟
پیامها رو بر اساس الگوهای کلید مسیریابی ارسال میکنه. مثلاً میتونیم از wildcard (* و #) استفاده کنیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو بر اساس موضوعهای مختلف دستهبندی کنیم. مثلاً خطاهای سیستم (error.*) یا لاگهای عمومی (log.#).
مثال:
Routing Key: error.database ➡️ Queue: error_queue
Direct Exchange 🎯
کارش چیه؟
پیامها رو فقط به صفهایی میفرسته که کلید مسیریابی (Routing Key) دقیقاً همون چیزی باشه که تعیین کردیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو دقیقاً به یک صف خاص برسونیم. مثلاً پیامهای "سفارش جدید" فقط به صف "پردازش سفارش" برن.
مثال:
Routing Key: order.created ➡️ Queue: order_queue
Fanout Exchange 📢
کارش چیه؟
پیامها رو به همه صفهای متصل شده میفرسته، بدون توجه به کلید مسیریابی.
کی استفاده کنیم؟
وقتی میخوایم یک پیام رو به چندین صف ارسال کنیم. مثلاً ارسال اطلاعرسانی به همه گروه های کاربران.
مثال:
پیام: "تخفیف ویژه!" ➡️ Queue: user_group1_queue, user_group2_queue, user_group3_queue
Topic Exchange 🌐
کارش چیه؟
پیامها رو بر اساس الگوهای کلید مسیریابی ارسال میکنه. مثلاً میتونیم از wildcard (* و #) استفاده کنیم.
کی استفاده کنیم؟
وقتی میخوایم پیامها رو بر اساس موضوعهای مختلف دستهبندی کنیم. مثلاً خطاهای سیستم (error.*) یا لاگهای عمومی (log.#).
مثال:
Routing Key: error.database ➡️ Queue: error_queue
👍2❤1
Forwarded from Yaser Moradi
سلام به همگی!
لینک پادکست اخیرم تو رادیو بیدار
چرا C# .NET یکی از بهترین گزینهها، هم برای Cross platform development و هم full-stack development هست؟
https://www.youtube.com/watch?v=8pS0yCrVsT4&t=433s
امکانات پروژه اپن سورس bit Boilerplate که کمک میکنه به داشتن یه تجربه عالی برای زدن هر نوعی از اپ با C#, HTML, CSS
https://www.youtube.com/watch?v=8pS0yCrVsT4&t=1408s
نحوه شروع به کار عملی با bit Boilerplate
https://www.youtube.com/watch?v=8pS0yCrVsT4&t=2402s
چند دمو از خروجی bit Boilerplate
سایت SEO-Friendly مبتنی بر Blazor WebAssembly با حجم کمتر از ۲.۵ مگ
https://bitplatform.dev
یه ادمین پنل خفن برای Android, iOS, Windows, macOS, Web
https://adminpanel.bitplatform.dev
کلی کمپوننت باحال و سریع و سبک برای Blazor
https://blazorui.bitplatform.dev
نسخه خیلی اولیه از یه E-Commerece مبتنی بر Blazor WebAssembly، سریع و سبک
https://sales.bitplatform.dev
لینک پادکست اخیرم تو رادیو بیدار
چرا C# .NET یکی از بهترین گزینهها، هم برای Cross platform development و هم full-stack development هست؟
https://www.youtube.com/watch?v=8pS0yCrVsT4&t=433s
امکانات پروژه اپن سورس bit Boilerplate که کمک میکنه به داشتن یه تجربه عالی برای زدن هر نوعی از اپ با C#, HTML, CSS
https://www.youtube.com/watch?v=8pS0yCrVsT4&t=1408s
نحوه شروع به کار عملی با bit Boilerplate
https://www.youtube.com/watch?v=8pS0yCrVsT4&t=2402s
چند دمو از خروجی bit Boilerplate
سایت SEO-Friendly مبتنی بر Blazor WebAssembly با حجم کمتر از ۲.۵ مگ
https://bitplatform.dev
یه ادمین پنل خفن برای Android, iOS, Windows, macOS, Web
https://adminpanel.bitplatform.dev
کلی کمپوننت باحال و سریع و سبک برای Blazor
https://blazorui.bitplatform.dev
نسخه خیلی اولیه از یه E-Commerece مبتنی بر Blazor WebAssembly، سریع و سبک
https://sales.bitplatform.dev
YouTube
پادکست شماره ۹۶ رادیو بیدار bit platform Future of C# development توسط یاسر مرادی
07:13 Why C# Excels in Cross-Platform & Full-Stack Development?
23:28 bitPlatform & bit Boilerplate: Features That Supercharge Development
40:02 Getting Started with bit Boilerplate: A Hands-On Guide
اپیزود ۹۶ رادیو بیدار BIDAR.ca
این جلسه با حضور یاسر…
23:28 bitPlatform & bit Boilerplate: Features That Supercharge Development
40:02 Getting Started with bit Boilerplate: A Hands-On Guide
اپیزود ۹۶ رادیو بیدار BIDAR.ca
این جلسه با حضور یاسر…
❤6
Forwarded from refhub
مهندسان عزیز روزتون مبارک
به مناسبت روز مهندس، یه کد تخفیف 30 درصدی براتون گذاشتیم
اولش باSOFTDAY شروع میشه، اما برای ادامه ش باید معمای زیر رو حل کنید :
یه برنامهنویس داره یه تابع رمزنگاری مینویسه. این تابع یه رشته میگیره و سه مرحله داره:
1- جمع مقدار ASCII همهی کاراکترهای رشته رو حساب میکنه.
2- عدد بهدستاومده رو در خودش ضرب میکنه (به توان ۲ میرسونه).
3- از نتیجه، یه عدد فیبوناچی پیدا میکنه که ازش بزرگتر یا مساویشه، بعد اختلافشون رو حساب میکنه.
اگه ورودی تابع کلمهی 'Debug' باشه، خروجی عددش چیه؟ این عدد، سه رقم آخر کد تخفیفت میشه!
با ❤️ رفهاب
https://RefHub.ir
به مناسبت روز مهندس، یه کد تخفیف 30 درصدی براتون گذاشتیم
اولش با
یه برنامهنویس داره یه تابع رمزنگاری مینویسه. این تابع یه رشته میگیره و سه مرحله داره:
1- جمع مقدار ASCII همهی کاراکترهای رشته رو حساب میکنه.
2- عدد بهدستاومده رو در خودش ضرب میکنه (به توان ۲ میرسونه).
3- از نتیجه، یه عدد فیبوناچی پیدا میکنه که ازش بزرگتر یا مساویشه، بعد اختلافشون رو حساب میکنه.
اگه ورودی تابع کلمهی 'Debug' باشه، خروجی عددش چیه؟ این عدد، سه رقم آخر کد تخفیفت میشه!
با ❤️ رفهاب
https://RefHub.ir
👍1
امروز میخوام یه گنجینهی واقعی رو بهتون معرفی کنم. اگر دنبال یادگیری مهارتهای جدید تو دنیای تکنولوژی هستید، این ریپوها مال شماست!
مایکروسافت یه عالمه دورهی رایگان و جذاب برای مبتدیها تدارک دیده، اونم تو زمینههای مختلف! بیاین یه نگاهی بهشون بندازیم:
هوش مصنوعی:
هوش مصنوعی برای مبتدیان (AI-For-Beginners): صفر تا صد هوش مصنوعی رو یاد بگیر!
https://github.com/microsoft/AI-For-Beginners
هوش مصنوعی مولد برای مبتدیان (generative-ai-for-beginners): دنیای جذاب هوش مصنوعی مولد رو کشف کن.
https://github.com/microsoft/generative-ai-for-beginners
هوش مصنوعی مولد برای مبتدیان با دات نت (generative-ai-for-beginners-dotnet): هوش مصنوعی مولد با دات نت رو تجربه کن.
https://github.com/microsoft/Generative-AI-for-beginners-dotnet
ایجنتهای هوش مصنوعی برای مبتدیان (ai-agents-for-beginners): ساختن ایجنت های هوش مصنوعی رو یاد بگیر.
https://github.com/microsoft/ai-agents-for-beginners
کتاب آشپزی سمانتیک کرنل (SemanticKernelCookBook): با سمانتیک کرنل کار کن.
https://github.com/microsoft/SemanticKernelCookBook
توسعه وب:
توسعه وب برای مبتدیان (Web-Dev-For-Beginners): از صفر تا یه توسعهدهندهی وب حرفهای!
https://github.com/microsoft/Web-Dev-For-Beginners
آشنایی با جاوا اسکریپت و نود برای مبتدیان (beginners-intro-javascript-node): جاوا اسکریپت و نود جی اس رو یاد بگیر.
https://github.com/microsoft/beginners-intro-javascript-node
یادگیری ماشین:
یادگیری ماشین برای مبتدیان (ML-For-Beginners): یادگیری ماشین رو ساده و جذاب یاد بگیر.
https://github.com/microsoft/ML-For-Beginners
علم داده:
علم داده برای مبتدیان (Data-Science-For-Beginners): علم داده رو با مثالهای عملی یاد بگیر.
https://github.com/microsoft/Data-Science-For-Beginners
اینترنت اشیا:
اینترنت اشیا برای مبتدیان (IoT-For-Beginners): وارد دنیای هیجانانگیز اینترنت اشیا شو!
https://github.com/microsoft/IoT-For-Beginners
بقیه موارد:
بش برای مبتدیان (bash-for-beginners): کار با خط فرمان لینوکس رو یاد بگیر.
https://github.com/microsoft/bash-for-beginners
پلتفرم پاور برای مبتدیان (Power-Platform-For-Beginners): با پلتفرم پاور برنامه نویسی بدون کد رو تجربه کن.
https://github.com/microsoft/Power-Platform-For-Beginners
سری آموزش راست برای مبتدیان (beginners-series-rust): برنامه نویسی با زبان راست رو یاد بگیر.
https://github.com/microsoft/beginners-series-rust
سری آموزش بلاکچین برای مبتدیان (beginners-series-blockchain): با بلاکچین اشنا بشو.
https://github.com/microsoft/beginners-series-blockchain
این ریپوها پر از مطالب آموزشی، پروژههای عملی و تمرینهای جذابن.
#یادگیری #برنامه_نویسی #هوش_مصنوعی #مایکروسافت #رایگان
مایکروسافت یه عالمه دورهی رایگان و جذاب برای مبتدیها تدارک دیده، اونم تو زمینههای مختلف! بیاین یه نگاهی بهشون بندازیم:
هوش مصنوعی:
هوش مصنوعی برای مبتدیان (AI-For-Beginners): صفر تا صد هوش مصنوعی رو یاد بگیر!
https://github.com/microsoft/AI-For-Beginners
هوش مصنوعی مولد برای مبتدیان (generative-ai-for-beginners): دنیای جذاب هوش مصنوعی مولد رو کشف کن.
https://github.com/microsoft/generative-ai-for-beginners
هوش مصنوعی مولد برای مبتدیان با دات نت (generative-ai-for-beginners-dotnet): هوش مصنوعی مولد با دات نت رو تجربه کن.
https://github.com/microsoft/Generative-AI-for-beginners-dotnet
ایجنتهای هوش مصنوعی برای مبتدیان (ai-agents-for-beginners): ساختن ایجنت های هوش مصنوعی رو یاد بگیر.
https://github.com/microsoft/ai-agents-for-beginners
کتاب آشپزی سمانتیک کرنل (SemanticKernelCookBook): با سمانتیک کرنل کار کن.
https://github.com/microsoft/SemanticKernelCookBook
توسعه وب:
توسعه وب برای مبتدیان (Web-Dev-For-Beginners): از صفر تا یه توسعهدهندهی وب حرفهای!
https://github.com/microsoft/Web-Dev-For-Beginners
آشنایی با جاوا اسکریپت و نود برای مبتدیان (beginners-intro-javascript-node): جاوا اسکریپت و نود جی اس رو یاد بگیر.
https://github.com/microsoft/beginners-intro-javascript-node
یادگیری ماشین:
یادگیری ماشین برای مبتدیان (ML-For-Beginners): یادگیری ماشین رو ساده و جذاب یاد بگیر.
https://github.com/microsoft/ML-For-Beginners
علم داده:
علم داده برای مبتدیان (Data-Science-For-Beginners): علم داده رو با مثالهای عملی یاد بگیر.
https://github.com/microsoft/Data-Science-For-Beginners
اینترنت اشیا:
اینترنت اشیا برای مبتدیان (IoT-For-Beginners): وارد دنیای هیجانانگیز اینترنت اشیا شو!
https://github.com/microsoft/IoT-For-Beginners
بقیه موارد:
بش برای مبتدیان (bash-for-beginners): کار با خط فرمان لینوکس رو یاد بگیر.
https://github.com/microsoft/bash-for-beginners
پلتفرم پاور برای مبتدیان (Power-Platform-For-Beginners): با پلتفرم پاور برنامه نویسی بدون کد رو تجربه کن.
https://github.com/microsoft/Power-Platform-For-Beginners
سری آموزش راست برای مبتدیان (beginners-series-rust): برنامه نویسی با زبان راست رو یاد بگیر.
https://github.com/microsoft/beginners-series-rust
سری آموزش بلاکچین برای مبتدیان (beginners-series-blockchain): با بلاکچین اشنا بشو.
https://github.com/microsoft/beginners-series-blockchain
این ریپوها پر از مطالب آموزشی، پروژههای عملی و تمرینهای جذابن.
#یادگیری #برنامه_نویسی #هوش_مصنوعی #مایکروسافت #رایگان
GitHub
GitHub - microsoft/AI-For-Beginners: 12 Weeks, 24 Lessons, AI for All!
12 Weeks, 24 Lessons, AI for All! Contribute to microsoft/AI-For-Beginners development by creating an account on GitHub.
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
“آنچه که در جستن آنی، آنی
وانچه که در طلب آنی، آنی”
- مولانا
وانچه که در طلب آنی، آنی”
- مولانا
🔥3😱2
Media is too big
VIEW IN TELEGRAM
ابزار /trae.ai یه IDE رایگان و جایگزین Cursor هست. بهصورت کاملاً رایگان و بدون محدودیت به Cloud 3.7 دسترسی دارین!
https://www.trae.ai/
https://www.trae.ai/
❤4
Big Archive for System Design – 2024 Edition (Completely Free) is now available!
The PDF contains 𝐀𝐋𝐋 of our technical posts with diagrams published in 2024.
What’s included in the PDF?
- REST API Vs. GraphQL
- Linux file system explained
- My recommended materials for cracking your next technical interview
- How Git Commands work
- Top 4 Most Popular Use Cases for UDP
- How Does a Typical Push Notification System Work?
- How can Cache Systems go wrong? 20
- REST API Cheatsheet
- Top 8 Programming Paradigms
- Data Pipelines
- API Vs SDK
- Key Use Cases for Load Balancers
- And many hundreds more
The PDF contains 𝐀𝐋𝐋 of our technical posts with diagrams published in 2024.
What’s included in the PDF?
- REST API Vs. GraphQL
- Linux file system explained
- My recommended materials for cracking your next technical interview
- How Git Commands work
- Top 4 Most Popular Use Cases for UDP
- How Does a Typical Push Notification System Work?
- How can Cache Systems go wrong? 20
- REST API Cheatsheet
- Top 8 Programming Paradigms
- Data Pipelines
- API Vs SDK
- Key Use Cases for Load Balancers
- And many hundreds more
👍3
DotNet | دات نت
Big Archive for System Design – 2024 Edition (Completely Free) is now available! The PDF contains 𝐀𝐋𝐋 of our technical posts with diagrams published in 2024. What’s included in the PDF? - REST API Vs. GraphQL - Linux file system explained - My recommended…
System Design PDFs (2024 Edition - Latest).pdf
49.2 MB
👍4
Coding Interview Patterns: Nail Your Next Coding Interview
Coding interviews are tough, and they're only getting tougher, typically demanding months of preparation. What we all want is a way to master algorithms and data structures without having to spend countless hours sifting through endless, unfocussed resources. Introducing "Coding Interview Patterns," your complete guide to mastering the key patterns needed to ace your next coding interview.
What’s inside?
An insider’s perspective on what interviewers are truly looking for and why.
101 real coding interview problems with detailed solutions.
Intuitive explanations that guide you through each problem as if you were solving it in a live interview.
1000+ diagrams to illustrate key concepts and patterns.
Table of Contents
Chapter 1: Two Pointers
Chapter 2: Hash Maps and Sets
Chapter 3: Linked Lists
Chapter 4: Fast and Slow Pointers
Chapter 5: Sliding Windows
Chapter 6: Binary Search
Chapter 7: Stacks
Chapter 8: Heaps
Chapter 9: Intervals
Chapter 10: Prefix Sums
Chapter 11: Trees
Chapter 12: Tries
Chapter 13: Graphs
Chapter 14: Backtracking
Chapter 15: Dynamic Programming
Chapter 16: Greedy
Chapter 17: Sort and Search
Chapter 18: Bit Manipulation
Chapter 19: Math and Geometry
Coding interviews are tough, and they're only getting tougher, typically demanding months of preparation. What we all want is a way to master algorithms and data structures without having to spend countless hours sifting through endless, unfocussed resources. Introducing "Coding Interview Patterns," your complete guide to mastering the key patterns needed to ace your next coding interview.
What’s inside?
An insider’s perspective on what interviewers are truly looking for and why.
101 real coding interview problems with detailed solutions.
Intuitive explanations that guide you through each problem as if you were solving it in a live interview.
1000+ diagrams to illustrate key concepts and patterns.
Table of Contents
Chapter 1: Two Pointers
Chapter 2: Hash Maps and Sets
Chapter 3: Linked Lists
Chapter 4: Fast and Slow Pointers
Chapter 5: Sliding Windows
Chapter 6: Binary Search
Chapter 7: Stacks
Chapter 8: Heaps
Chapter 9: Intervals
Chapter 10: Prefix Sums
Chapter 11: Trees
Chapter 12: Tries
Chapter 13: Graphs
Chapter 14: Backtracking
Chapter 15: Dynamic Programming
Chapter 16: Greedy
Chapter 17: Sort and Search
Chapter 18: Bit Manipulation
Chapter 19: Math and Geometry
❤4
DotNet | دات نت
Coding Interview Patterns: Nail Your Next Coding Interview Coding interviews are tough, and they're only getting tougher, typically demanding months of preparation. What we all want is a way to master algorithms and data structures without having to spend…
Alex_Xu,_Shaun_Gunawardane_Coding_Interview_Patterns_Nail_Your_Next.pdf
66.2 MB
https://www.instructa.ai/en/ai-prompts/next-15-coding-standards
از این قسمت میتونین به Cursor یک سری Rule بدین و میتونین خودتون بر اساس پروژه هم Customize کنین، بعد از این به بعد توی جنریت کردن کد این نکات رو در نظر میگیره، مثلا قوانين که تو ESLint تعریف میکنین میتونین اینجا هم بیارین و ازش استفاده کنین خوبیش اینه به صورت General هم میتونین بزارین توی ریپو تا بقیه هم ازش استفاده کنن.
توی این لینک هم کلی Structure و پیاده سازی سرویس های مختلف دیگه هست که به نظرم جالبه میتونه کمک کنه.
https://www.instructa.ai/en/ai-prompts?framework=next
و اینم برای یک سری Rule های کار با Sonnet 3.7 هست :
https://www.instructa.ai/en/ai-prompts/claude-sonnet-37-best-practices
از این قسمت میتونین به Cursor یک سری Rule بدین و میتونین خودتون بر اساس پروژه هم Customize کنین، بعد از این به بعد توی جنریت کردن کد این نکات رو در نظر میگیره، مثلا قوانين که تو ESLint تعریف میکنین میتونین اینجا هم بیارین و ازش استفاده کنین خوبیش اینه به صورت General هم میتونین بزارین توی ریپو تا بقیه هم ازش استفاده کنن.
توی این لینک هم کلی Structure و پیاده سازی سرویس های مختلف دیگه هست که به نظرم جالبه میتونه کمک کنه.
https://www.instructa.ai/en/ai-prompts?framework=next
و اینم برای یک سری Rule های کار با Sonnet 3.7 هست :
https://www.instructa.ai/en/ai-prompts/claude-sonnet-37-best-practices
Instructa Courses
Next.js 15 AI Prompt by Kevin Kern
Comprehensive rules and best practices for Next.js 15 development, covering project structure, TypeScript usage, and more
👍3
Forwarded from Software Philosophy
آشنایی با Outbox Pattern و اهمیت آن در سیستمهای توزیعشده
آیا تاکنون در توسعهی یک سیستم توزیعشده با این دغدغه مواجه شدهاید که هنگام ثبت تغییرات در پایگاه داده و همزمان ارسال پیام (رویداد) به یک سرویس دیگر (مانند RabbitMQ یا Kafka)، ممکن است یکی از این مراحل با موفقیت انجام شود و دیگری با شکست روبهرو گردد؟ در چنین شرایطی، بخشی از دادهها بهروز میشود اما سرویسهای مصرفکننده از این تغییرات بیخبر میمانند و هماهنگی میان بخشهای مختلف سیستم از بین میرود.
مشکل اصلی کجاست؟
بهطور معمول، اگر در حین بهروزرسانی یک موجودیت در پایگاه داده بخواهیم یک رویداد نیز به سیستم دیگری ارسال کنیم و مراحل دیتابیس و ارسال پیام در یک تراکنش مجزا یا بهصورت ناهمزمان انجام شوند، احتمال از دست رفتن یا عدم ارسال پیام وجود دارد. این امر ممکن است به ناسازگاری در دادهها و عملکرد سرویسهای وابسته منجر شود.
راهحل چیست؟
در اینجاست که الگوی Outbox وارد عمل میشود. این الگو پیشبینی میکند که ابتدا همهی رویدادهایی که قرار است برای سیستمهای دیگر ارسال شوند در جدولی اختصاصی (Outbox Table) در همان پایگاه دادهی اصلی ذخیره شوند. این کار همزمان با تراکنش بهروزرسانی سایر دادهها صورت میگیرد، بهطوریکه اگر عملیات اصلی موفق باشد، اطلاعات رویداد نیز قطعاً ثبت میشود.
سپس چه میشود؟
یک فرایند مجزا (Outbox Process) بهطور مستمر این جدول را بررسی میکند و رویدادهای ثبتشده را به پیامرسان (Message Broker) ارسال میکند. در صورت موفقیت در ارسال، رکورد مربوطه از جدول Outbox حذف میشود و بدین ترتیب از ارسال مجدد ناخواسته جلوگیری میگردد. اگر هم پیامرسان در لحظه غیرفعال باشد یا خطایی رخ دهد، رکورد رویداد کماکان در پایگاه داده باقی میماند تا در تلاش بعدی مجدداً ارسال شود.
مزایای Outbox Pattern
۱. جلوگیری از ناسازگاری دادهها: با انجام ثبت رویداد و تغییرات داده در یک تراکنش واحد، احتمال بروز تناقض در دادهها کاهش مییابد.
۲. اطمینان از عدم از دست رفتن رویدادها: حتی اگر زیرساخت ارتباطی یا پیامرسان موقتاً از دسترس خارج شود، پیام در Outbox محفوظ میماند و پس از بازگشت سرویس، ارسال خواهد شد.
۳. مقیاسپذیری بالا: افزودن سرویسهای جدید یا گسترش زیرساخت پیامرسانی تحت تأثیر این الگو بهراحتی امکانپذیر است، چرا که شیوهی ثبت و ارسال رویدادها مشخص و یکپارچه است.
در واقع Outbox Pattern راهکاری قدرتمند و مطمئن برای ساخت سیستمهای توزیعشده و مبتنی بر رویداد است و کمک میکند دغدغهی شکست ارسال پیام و ناسازگاری دادهها برطرف شود.
🔗 برای مطالعه بیشتر میتوانید به این لینک مراجعه نمایید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#هوتن_همتی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
___________
آیا تاکنون در توسعهی یک سیستم توزیعشده با این دغدغه مواجه شدهاید که هنگام ثبت تغییرات در پایگاه داده و همزمان ارسال پیام (رویداد) به یک سرویس دیگر (مانند RabbitMQ یا Kafka)، ممکن است یکی از این مراحل با موفقیت انجام شود و دیگری با شکست روبهرو گردد؟ در چنین شرایطی، بخشی از دادهها بهروز میشود اما سرویسهای مصرفکننده از این تغییرات بیخبر میمانند و هماهنگی میان بخشهای مختلف سیستم از بین میرود.
مشکل اصلی کجاست؟
بهطور معمول، اگر در حین بهروزرسانی یک موجودیت در پایگاه داده بخواهیم یک رویداد نیز به سیستم دیگری ارسال کنیم و مراحل دیتابیس و ارسال پیام در یک تراکنش مجزا یا بهصورت ناهمزمان انجام شوند، احتمال از دست رفتن یا عدم ارسال پیام وجود دارد. این امر ممکن است به ناسازگاری در دادهها و عملکرد سرویسهای وابسته منجر شود.
راهحل چیست؟
در اینجاست که الگوی Outbox وارد عمل میشود. این الگو پیشبینی میکند که ابتدا همهی رویدادهایی که قرار است برای سیستمهای دیگر ارسال شوند در جدولی اختصاصی (Outbox Table) در همان پایگاه دادهی اصلی ذخیره شوند. این کار همزمان با تراکنش بهروزرسانی سایر دادهها صورت میگیرد، بهطوریکه اگر عملیات اصلی موفق باشد، اطلاعات رویداد نیز قطعاً ثبت میشود.
سپس چه میشود؟
یک فرایند مجزا (Outbox Process) بهطور مستمر این جدول را بررسی میکند و رویدادهای ثبتشده را به پیامرسان (Message Broker) ارسال میکند. در صورت موفقیت در ارسال، رکورد مربوطه از جدول Outbox حذف میشود و بدین ترتیب از ارسال مجدد ناخواسته جلوگیری میگردد. اگر هم پیامرسان در لحظه غیرفعال باشد یا خطایی رخ دهد، رکورد رویداد کماکان در پایگاه داده باقی میماند تا در تلاش بعدی مجدداً ارسال شود.
مزایای Outbox Pattern
۱. جلوگیری از ناسازگاری دادهها: با انجام ثبت رویداد و تغییرات داده در یک تراکنش واحد، احتمال بروز تناقض در دادهها کاهش مییابد.
۲. اطمینان از عدم از دست رفتن رویدادها: حتی اگر زیرساخت ارتباطی یا پیامرسان موقتاً از دسترس خارج شود، پیام در Outbox محفوظ میماند و پس از بازگشت سرویس، ارسال خواهد شد.
۳. مقیاسپذیری بالا: افزودن سرویسهای جدید یا گسترش زیرساخت پیامرسانی تحت تأثیر این الگو بهراحتی امکانپذیر است، چرا که شیوهی ثبت و ارسال رویدادها مشخص و یکپارچه است.
در واقع Outbox Pattern راهکاری قدرتمند و مطمئن برای ساخت سیستمهای توزیعشده و مبتنی بر رویداد است و کمک میکند دغدغهی شکست ارسال پیام و ناسازگاری دادهها برطرف شود.
🔗 برای مطالعه بیشتر میتوانید به این لینک مراجعه نمایید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#هوتن_همتی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
___________
Baeldung on Computer Science
Outbox Pattern in Microservices | Baeldung on Computer Science
Learn how to implement the Outbox Pattern for microservices.
در ادامه یک راهنمای کامل و بهبود یافته برای استفاده رایگان از Cursor ارائه شده است. لطفاً مراحل زیر را به ترتیب با دقت دنبال کنید:
---
گام ۱: خروج از حساب کاربری Cursor
1. خروج از حساب (Logout):
ابتدا از حساب کاربری Cursor خود خارج شوید. این کار تضمین میکند که تنظیمات قبلی یا اطلاعات ورود مانع روند ثبتنام جدید نشوند.
2. راهاندازی مجدد برنامه:
پس از خروج، برنامه Cursor را دوباره اجرا کنید تا مطمئن شوید در وضعیت خارج از حساب هستید.
---
گام ۲: اجرای PowerShell
1. باز کردن PowerShell:
برنامه Windows PowerShell را اجرا کنید. این محیط به شما امکان میدهد تا دستورات خط فرمان را وارد کرده و اسکریپتهای لازم را اجرا کنید.
2. اجرای اسکریپت نصب:
در پنجره PowerShell، دستور زیر را وارد کنید:
توضیح:
دستور irm مخفف Invoke-RestMethod است که فایل اسکریپت نصب را از گیتهاب دانلود میکند.
عملگر | خروجی دستور اول را به دستور دوم (که در اینجا liex است) میدهد.
با اجرای این دستور، اسکریپت نصب اجرا شده و فرآیند تنظیمات اولیه آغاز میشود.
---
گام ۳: ثبتنام جدید در Cursor
1. انتخاب گزینه ثبتنام:
پس از اجرای موفق اسکریپت، در منوی ارائه شده گزینه "Cursor New Register" را انتخاب کنید.
2. شروع فرآیند ثبتنام توسط ربات:
به محض انتخاب گزینه، ربات به صورت خودکار فعال شده و تلاش میکند شما را در سیستم ثبت کند.
3. نکات مهم در این مرحله:
فعال بودن فیلترشکن:
مطمئن شوید فیلترشکن (VPN) شما فعال است. این امر به دلیل محدودیتهای جغرافیایی و دسترسی به سرورهای مورد نیاز ضروری است.
تأیید عدم ربات بودن:
قبل از کلیک روی دکمه مربوط به ربات، گزینه "من ربات نیستم" را فعال کنید. این اقدام از بروز خطاهای احتمالی در فرآیند ثبتنام جلوگیری میکند.
---
گام ۴: تکمیل ثبتنام و استفاده از Cursor
1. تغییر شناسه دستگاه:
پس از تکمیل فرآیند ثبتنام، شناسه (Machine ID) دستگاه شما تغییر میکند. این تغییر به معنای موفقیتآمیز بودن ثبتنام و فعال شدن خدمات رایگان Cursor است.
2. استفاده از نسخه جدید Cursor:
حالا میتوانید از امکانات و ویژگیهای جدید Cursor بهره ببرید.
3. پیشنهاد مهم:
توصیه میشود پس از تکمیل ثبتنام، از بهروزرسانی (Update) خودداری کنید تا تنظیمات و دسترسی رایگان شما حفظ شود.
---
با دنبال کردن دقیق مراحل فوق، میتوانید به راحتی از نسخه رایگان Cursor استفاده کرده و از امکانات آن لذت ببرید.
---
گام ۱: خروج از حساب کاربری Cursor
1. خروج از حساب (Logout):
ابتدا از حساب کاربری Cursor خود خارج شوید. این کار تضمین میکند که تنظیمات قبلی یا اطلاعات ورود مانع روند ثبتنام جدید نشوند.
2. راهاندازی مجدد برنامه:
پس از خروج، برنامه Cursor را دوباره اجرا کنید تا مطمئن شوید در وضعیت خارج از حساب هستید.
---
گام ۲: اجرای PowerShell
1. باز کردن PowerShell:
برنامه Windows PowerShell را اجرا کنید. این محیط به شما امکان میدهد تا دستورات خط فرمان را وارد کرده و اسکریپتهای لازم را اجرا کنید.
2. اجرای اسکریپت نصب:
در پنجره PowerShell، دستور زیر را وارد کنید:
irm https://raw.githubusercontent.com/yeongpin/cursor-free-vip/main/scripts/install.ps1 | iex
توضیح:
دستور irm مخفف Invoke-RestMethod است که فایل اسکریپت نصب را از گیتهاب دانلود میکند.
عملگر | خروجی دستور اول را به دستور دوم (که در اینجا liex است) میدهد.
با اجرای این دستور، اسکریپت نصب اجرا شده و فرآیند تنظیمات اولیه آغاز میشود.
---
گام ۳: ثبتنام جدید در Cursor
1. انتخاب گزینه ثبتنام:
پس از اجرای موفق اسکریپت، در منوی ارائه شده گزینه "Cursor New Register" را انتخاب کنید.
2. شروع فرآیند ثبتنام توسط ربات:
به محض انتخاب گزینه، ربات به صورت خودکار فعال شده و تلاش میکند شما را در سیستم ثبت کند.
3. نکات مهم در این مرحله:
فعال بودن فیلترشکن:
مطمئن شوید فیلترشکن (VPN) شما فعال است. این امر به دلیل محدودیتهای جغرافیایی و دسترسی به سرورهای مورد نیاز ضروری است.
تأیید عدم ربات بودن:
قبل از کلیک روی دکمه مربوط به ربات، گزینه "من ربات نیستم" را فعال کنید. این اقدام از بروز خطاهای احتمالی در فرآیند ثبتنام جلوگیری میکند.
---
گام ۴: تکمیل ثبتنام و استفاده از Cursor
1. تغییر شناسه دستگاه:
پس از تکمیل فرآیند ثبتنام، شناسه (Machine ID) دستگاه شما تغییر میکند. این تغییر به معنای موفقیتآمیز بودن ثبتنام و فعال شدن خدمات رایگان Cursor است.
2. استفاده از نسخه جدید Cursor:
حالا میتوانید از امکانات و ویژگیهای جدید Cursor بهره ببرید.
3. پیشنهاد مهم:
توصیه میشود پس از تکمیل ثبتنام، از بهروزرسانی (Update) خودداری کنید تا تنظیمات و دسترسی رایگان شما حفظ شود.
---
با دنبال کردن دقیق مراحل فوق، میتوانید به راحتی از نسخه رایگان Cursor استفاده کرده و از امکانات آن لذت ببرید.
❤2👍1
Forwarded from thisisnabi.dev [Farsi]
لابلای تموم خستگیاتون، این ویدیو رو هم ببینید.
https://www.youtube.com/watch?v=xtxfrxf0mfE
جذاب بود :)
کلا من مفاهیم فرایند توسعه نرم افزار و معماری نرم افزار رو خیلی دوست دارم از تجربیات دیگران استفاده کنم تا کتاب بخونم. (می دونمم کتاب از آسمون نیومده و بخشیش تجربه هست)
هر چند کتاب های پایه رو هم 4، پنج جلدی مطالعه کردم ولی خب این مدل کنفرانس ها بیشتر بهم حال میده.
https://www.youtube.com/watch?v=xtxfrxf0mfE
جذاب بود :)
کلا من مفاهیم فرایند توسعه نرم افزار و معماری نرم افزار رو خیلی دوست دارم از تجربیات دیگران استفاده کنم تا کتاب بخونم. (می دونمم کتاب از آسمون نیومده و بخشیش تجربه هست)
هر چند کتاب های پایه رو هم 4، پنج جلدی مطالعه کردم ولی خب این مدل کنفرانس ها بیشتر بهم حال میده.
👍5
در طراحی API، صفحهبندی (Pagination) برای مدیریت دادههای بزرگ و بهبود عملکرد بسیار مهم است. در اینجا شش تکنیک رایج برای صفحهبندی در API ها آورده شده است:
---
1. صفحهبندی بر اساس آفسِت (Offset-based Pagination)
در این روش از پارامترهای آفست (offset) و حد (limit) برای تعیین نقطه شروع و تعداد رکوردهایی که باید بازگردانده شوند، استفاده میشود.
مثال:
GET /orders?offset=0&limit=3
مزایا:
ساده برای پیادهسازی و فهم.
معایب:
برای آفستهای بزرگ، ممکن است عملکرد کاهش یابد، زیرا باید رکوردهای زیادی را جستجو کرده و از آنها عبور کنید.
---
2. صفحهبندی بر اساس کَرسور (Cursor-based Pagination)
در این روش از یک کرسور (یک شناسه منحصر به فرد) برای مشخص کردن موقعیت در دیتاست استفاده میشود. این کرسور معمولاً به صورت یک رشته رمزگذاری شده است که به یک رکورد خاص اشاره میکند.
مثال:
GET /orders?cursor=xxx
مزایا:
برای دیتاستهای بزرگ کارآمدتر است، زیرا نیازی به جستجو و عبور از رکوردها نیست.
معایب:
پیچیدهتر در پیادهسازی و درک.
---
3. صفحهبندی بر اساس صفحه (Page-based Pagination)
در این روش، شماره صفحه و اندازه هر صفحه مشخص میشود.
مثال:
GET /items?page=2&size=3
مزایا:
پیادهسازی و استفاده آسان است.
معایب:
مشابه صفحهبندی آفسِت، برای شماره صفحههای بزرگ ممکن است مشکلات عملکردی داشته باشد.
---
4. صفحهبندی بر اساس کلید (Keyset-based Pagination)
در این روش از یک کلید (معمولاً کلید اصلی یا یک ستون ایندکسشده دیگر) برای فیلتر کردن دیتاست استفاده میشود.
مثال:
GET /items?after_id=102&limit=3
مزایا:
برای دیتاستهای بزرگ کارآمد است و مشکلات عملکردی آفسِت را برطرف میکند.
معایب:
نیاز به یک کلید منحصر به فرد و ایندکسشده دارد و پیادهسازی پیچیدهتر است.
---
5. صفحهبندی بر اساس زمان (Time-based Pagination)
در این روش از تاریخ و زمان برای صفحهبندی رکوردها استفاده میشود.
مثال:
GET /items?start_time=xxx&end_time=yyy
مزایا:
برای دیتاستهایی که بر اساس زمان مرتب شدهاند مفید است. این روش از اضافه شدن رکوردهای جدید جلوگیری میکند.
معایب:
نیاز به یک تاریخ/زمان قابل اعتماد و ثابت دارد.
---
6. صفحهبندی ترکیبی (Hybrid Pagination)
در این روش از ترکیب چند تکنیک صفحهبندی برای بهرهبرداری از مزایای آنها استفاده میشود.
مثال:
GET /items?cursor=abc&start_time=xxx&end_time=yyy
مزایا:
میتواند بهترین عملکرد و انعطافپذیری را برای دیتاستهای پیچیده ارائه دهد.
معایب:
پیادهسازی پیچیدهتر است و نیاز به طراحی دقیق دارد.
---
این روشها به شما کمک میکنند تا با توجه به نیازهای مختلف پروژهتان، صفحهبندی بهینه و کارآمدی در API ها پیادهسازی کنید.
🎺 برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامهنویسی، به کانال ما بپیوندید!
📚💻 @dotnetcode🖥 👨💻
---
1. صفحهبندی بر اساس آفسِت (Offset-based Pagination)
در این روش از پارامترهای آفست (offset) و حد (limit) برای تعیین نقطه شروع و تعداد رکوردهایی که باید بازگردانده شوند، استفاده میشود.
مثال:
GET /orders?offset=0&limit=3
مزایا:
ساده برای پیادهسازی و فهم.
معایب:
برای آفستهای بزرگ، ممکن است عملکرد کاهش یابد، زیرا باید رکوردهای زیادی را جستجو کرده و از آنها عبور کنید.
---
2. صفحهبندی بر اساس کَرسور (Cursor-based Pagination)
در این روش از یک کرسور (یک شناسه منحصر به فرد) برای مشخص کردن موقعیت در دیتاست استفاده میشود. این کرسور معمولاً به صورت یک رشته رمزگذاری شده است که به یک رکورد خاص اشاره میکند.
مثال:
GET /orders?cursor=xxx
مزایا:
برای دیتاستهای بزرگ کارآمدتر است، زیرا نیازی به جستجو و عبور از رکوردها نیست.
معایب:
پیچیدهتر در پیادهسازی و درک.
---
3. صفحهبندی بر اساس صفحه (Page-based Pagination)
در این روش، شماره صفحه و اندازه هر صفحه مشخص میشود.
مثال:
GET /items?page=2&size=3
مزایا:
پیادهسازی و استفاده آسان است.
معایب:
مشابه صفحهبندی آفسِت، برای شماره صفحههای بزرگ ممکن است مشکلات عملکردی داشته باشد.
---
4. صفحهبندی بر اساس کلید (Keyset-based Pagination)
در این روش از یک کلید (معمولاً کلید اصلی یا یک ستون ایندکسشده دیگر) برای فیلتر کردن دیتاست استفاده میشود.
مثال:
GET /items?after_id=102&limit=3
مزایا:
برای دیتاستهای بزرگ کارآمد است و مشکلات عملکردی آفسِت را برطرف میکند.
معایب:
نیاز به یک کلید منحصر به فرد و ایندکسشده دارد و پیادهسازی پیچیدهتر است.
---
5. صفحهبندی بر اساس زمان (Time-based Pagination)
در این روش از تاریخ و زمان برای صفحهبندی رکوردها استفاده میشود.
مثال:
GET /items?start_time=xxx&end_time=yyy
مزایا:
برای دیتاستهایی که بر اساس زمان مرتب شدهاند مفید است. این روش از اضافه شدن رکوردهای جدید جلوگیری میکند.
معایب:
نیاز به یک تاریخ/زمان قابل اعتماد و ثابت دارد.
---
6. صفحهبندی ترکیبی (Hybrid Pagination)
در این روش از ترکیب چند تکنیک صفحهبندی برای بهرهبرداری از مزایای آنها استفاده میشود.
مثال:
GET /items?cursor=abc&start_time=xxx&end_time=yyy
مزایا:
میتواند بهترین عملکرد و انعطافپذیری را برای دیتاستهای پیچیده ارائه دهد.
معایب:
پیادهسازی پیچیدهتر است و نیاز به طراحی دقیق دارد.
---
این روشها به شما کمک میکنند تا با توجه به نیازهای مختلف پروژهتان، صفحهبندی بهینه و کارآمدی در API ها پیادهسازی کنید.
📚💻 @dotnetcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
Forwarded from thisisnabi.dev [Farsi]
سلام دوستان
ما برای یک استارت آپ در حوزه فین تک در حال جذب نیروی Backend در 2 سطح Senior و Mid هستیم.
اگر دوست داشتید می تونید برام رزومه بفرستید که من معرفیتون کنم.
دارن کارشون رو from scratch بالا میارن.
1. Senior .NET Developer
2. .NET Developer
🪖 امکان ریموت ندارند
@thisisnabi
ما برای یک استارت آپ در حوزه فین تک در حال جذب نیروی Backend در 2 سطح Senior و Mid هستیم.
اگر دوست داشتید می تونید برام رزومه بفرستید که من معرفیتون کنم.
دارن کارشون رو from scratch بالا میارن.
1. Senior .NET Developer
2. .NET Developer
🪖 امکان ریموت ندارند
@thisisnabi
Forwarded from TondTech (مسعود بیگی)
برای یکی از چند تا شرکت بزرگ اکوسیستم، دوستانم در حال تیم سازی هستند. اگر در حوزه دات نت مید (d3 به بالا) تا تک لید هستید و دوست دارید این فرصت رو بررسی کنید، رزومه تون رو برام بفرستین
برای سنجش خودتون نگاهی به این فریم ورک بندازید:
https://github.com/jorgef/engineeringladders
@Merkousha
برای سنجش خودتون نگاهی به این فریم ورک بندازید:
https://github.com/jorgef/engineeringladders
@Merkousha