Skip to content

Latest commit

 

History

History
141 lines (98 loc) · 20.2 KB

File metadata and controls

141 lines (98 loc) · 20.2 KB

خلاصه دوره: Microservices: Clean Architecture, DDD, SAGA, Outbox & Kafka

این سند، نکات کلیدی دوره را برای مرور سریع و یادگیری خلاصه می‌کند. اگر فرصت داری، دیدن خود دوره را هم توصیه می‌کنم.

قبل از شروع

  • من نکات مهم دوره‌های مفید را خلاصه می‌کنم تا بتوانی سریع مرور و یادگیری کنی.
  • کافی است روی لینک‌های Ask AI کلیک کنی و درباره هر موضوعی که خواستی بیشتر عمیق شوی.

AI-Powered buttons

Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)

Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes

Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps

موضوع ۱: مقدمه و ساختار دوره

  • خلاصه: در شروع دوره، یک نمای کلی از مفاهیمی که قرار است یاد بگیری ارائه می‌شود؛ مثل ساختن microservices با Spring Boot، استفاده از Clean Architecture و Hexagonal Architecture برای نگه‌داری و توسعه‌پذیری بهتر، و به‌کارگیری اصول Domain-Driven Design (DDD). همین‌طور الگوهایی مثل SAGA برای تراکنش‌های توزیع‌شده، Outbox برای ارسال مطمئن eventها، CQRS برای جدا کردن خواندن و نوشتن، و استفاده از Kafka به‌عنوان event bus. در نهایت، همه چیز روی Kubernetes و Google Kubernetes Engine (GKE) دیپلوی می‌شود.
  • مثال: فرض کن یک سیستم سفارش غذا داریم که سرویس‌های order، payment و restaurant از طریق eventهای Kafka با هم حرف می‌زنند. دوره قدم‌به‌قدم همین سیستم را می‌سازد تا نشان بدهد این الگوها چطور چالش‌های دنیای واقعی در سیستم‌های توزیع‌شده را حل می‌کنند.
  • لینک برای جزییات بیشتر: Ask AI: Introduction and Course Structure

موضوع ۲: نمای کلی پروژه

  • خلاصه: در این بخش، پروژه‌ی سیستم سفارش غذا شکسته می‌شود به microserviceهای مختلف مثل order، payment، restaurant و customer و توضیح داده می‌شود که چطور از طریق eventهای Kafka با هم در ارتباط هستند. همچنین کل فلو از لحظه ثبت سفارش تا تأیید نهایی، به‌همراه مدیریت پرداخت و اعتبارسنجی رستوران توضیح داده می‌شود؛ و این‌که چطور الگوی SAGA برای حفظ سازگاری بین سرویس‌ها استفاده می‌شود.
  • مثال: وقتی کاربر سفارشی ثبت می‌کند، سرویس order یک event روی topic مربوط به درخواست پرداخت منتشر می‌کند؛ سرویس payment آن را مصرف می‌کند، پرداخت را انجام می‌دهد و نتیجه را از طریق یک topic دیگر برمی‌گرداند و وضعیت سفارش آپدیت می‌شود. این مدل choreography باعث می‌شود سیستم حتی در صورت بروز خطا، در وضعیت سازگار باقی بماند.
  • لینک برای جزییات بیشتر: Ask AI: Project Overview

موضوع ۳: آماده‌سازی محیط توسعه

  • خلاصه: این بخش روی آماده‌کردن محیط توسعه تمرکز دارد؛ با ابزارهایی مثل Java 17، Maven، IntelliJ، Git، Docker، Postman و ابزارهای مدیریت Kafka. با این setup می‌توانی microserviceها را راحت‌تر بسازی، تست کنی و اجرا کنی.
  • مثال: نصب Docker Desktop به تو اجازه می‌دهد یک cluster محلی Kubernetes راه بیندازی و یک محیط شبیه production روی سیستم خودت داشته باشی تا دیپلوی‌کردن سرویس‌ها را واقعی‌تر تست کنی.
  • لینک برای جزییات بیشتر: Ask AI: Setting Up the Environment

موضوع ۴: Clean Architecture و Hexagonal Architecture

  • خلاصه: این بخش توضیح می‌دهد که چطور این دو معماری، منطق اصلی کسب‌وکار (domain) را از زیرساخت (مثل دیتابیس، message broker و… ) جدا می‌کنند تا کد تست‌پذیر و قابل تغییر بماند. در Hexagonal (الگوی ports and adapters)، ورودی‌ها و خروجی‌ها از طریق interfaceها تعریف می‌شوند و در Clean Architecture، وابستگی‌ها همیشه از لایه‌های بیرونی به سمت هسته‌ی domain هستند (dependency inversion).
  • مثال: در سرویس order، در لایه‌ی domain فقط portها برای دسترسی به داده و ارسال/دریافت messageها تعریف می‌شوند؛ پیاده‌سازی آن‌ها در ماژول‌های جدا (adapterها) قرار می‌گیرد. به این شکل، اگر دیتابیس را عوض کنی، هسته‌ی منطقی سیستم دست‌نخورده باقی می‌ماند.
  • لینک برای جزییات بیشتر: Ask AI: Clean and Hexagonal Architectures

موضوع ۵: طراحی و ساخت ماژول‌های سرویس Order

  • خلاصه: این قسمت روی طراحی سرویس order با استفاده از Clean Architecture تمرکز می‌کند؛ ماژول‌هایی برای domain، application، data access و messaging ساخته می‌شود. این جداسازی باعث می‌شود وابستگی‌ها همیشه به سمت هسته‌ی دامنه باشند و منطق کسب‌وکار مستقل و تمیز باقی بماند.
  • مثال: ماژول domain شامل entityها، value objectها و portهاست؛ ماژول data access پیاده‌سازی persistence با Postgres را دارد؛ در زمان اجرا هم با استفاده از dependency injection این دو به‌هم وصل می‌شوند، بدون این‌که coupling سفت و سختی بینشان ایجاد شود.
  • لینک برای جزییات بیشتر: Ask AI: Designing and Creating Order Service Modules

موضوع ۶: Domain-Driven Design (DDD)

  • خلاصه: در این بخش الگوهای تاکتیکی DDD مثل aggregate، entity، value object، domain service و domain event به‌کار گرفته می‌شوند تا مدل دامنه‌ی کسب‌وکار، واضح و قابل مدیریت شود؛ مخصوصاً وقتی چند bounded context مختلف داریم.
  • مثال: aggregate مربوط به سفارش، شامل entity سفارش و آیتم‌های آن و همچنین اطلاعات پرداخت است؛ value objectها برای داده‌های تغییرناپذیر (مثل مقدار پول) استفاده می‌شوند و domain eventها سرویس‌های دیگر را زمانی که سفارشی ایجاد می‌شود یا وضعیتش عوض می‌شود، باخبر می‌کنند.
  • لینک برای جزییات بیشتر: Ask AI: Domain-Driven Design (DDD)

موضوع ۷: Apache Kafka

  • خلاصه: این قسمت وارد جزئیات Kafka می‌شود؛ این‌که topic، producer، consumer و partition چیست و چطور می‌توان با partitioning به scale و تحمل‌پذیری خطا رسید.
  • مثال: مثلاً یک topic به نام payment-request داریم که سرویس order روی آن eventهای درخواست پرداخت را publish می‌کند؛ سرویس payment به‌عنوان consumer آن را می‌خواند، منطق پرداخت را انجام می‌دهد و نتیجه را از طریق یک topic دیگر برمی‌گرداند.
  • لینک برای جزییات بیشتر: Ask AI: Apache Kafka

موضوع ۸: پیاده‌سازی سرویس‌های Payment و Restaurant

  • خلاصه: در این بخش سرویس‌های payment و restaurant مشابه سرویس order طراحی و پیاده‌سازی می‌شوند؛ با تمرکز روی منطق دامنه‌ی مخصوص خودشان، مدیریت eventها و ارتباط با Kafka در مراحل مختلف SAGA.
  • مثال: سرویس payment eventهای سفارش را دریافت می‌کند، پرداخت را در دیتابیس محلی خودش ثبت می‌کند و سپس یک event جدید برای اعلام موفقیت یا شکست پرداخت منتشر می‌کند؛ سرویس restaurant بر اساس موجودی و وضعیت رستوران، سفارش را تأیید یا رد می‌کند.
  • لینک برای جزییات بیشتر: Ask AI: Implementing Payment and Restaurant Services

موضوع ۹: الگوی SAGA برای تراکنش‌های توزیع‌شده

  • خلاصه: این بخش نشان می‌دهد چطور از الگوی SAGA برای مدیریت تراکنش‌های توزیع‌شده بین چند microservice استفاده کنیم؛ با رویکرد choreography مبتنی بر eventها، هم مراحل اصلی فرآیند و هم مراحل rollback در صورت خطا مدیریت می‌شود.
  • مثال: اگر پرداخت ناموفق باشد، یک chain از eventها باعث می‌شود وضعیت سفارش به cancelled تغییر کند و تمام اقدامات وابسته برگردانده شوند؛ اگر همه‌ی مراحل موفق باشند، سفارش در نهایت به حالت approved می‌رسد.
  • لینک برای جزییات بیشتر: Ask AI: SAGA Architecture Pattern

موضوع ۱۰: الگوی Outbox

  • خلاصه: در Outbox pattern هدف این است که ذخیره‌سازی داده در دیتابیس و ارسال event به Kafka به‌صورت اتمیک انجام شود. برای این کار، event ابتدا در یک جدول Outbox همراه با تراکنش اصلی ذخیره می‌شود و بعد یک process یا scheduler آن را خوانده و روی Kafka publish می‌کند.
  • مثال: بعد از ذخیره‌ی سفارش در دیتابیس، یک رکورد event در جدول Outbox درج می‌شود؛ اگر تراکنش دیتابیس commit شود، آن event هم قطعاً ذخیره شده است. سپس یک job دوره‌ای این جدول را می‌خواند و eventها را به Kafka ارسال می‌کند تا هیچ eventی از دست نرود.
  • لینک برای جزییات بیشتر: Ask AI: Outbox Architecture Pattern

موضوع ۱۱: الگوی CQRS

  • خلاصه: در CQRS (Command Query Responsibility Segregation)، مدل نوشتن (command/write) و مدل خواندن (query/read) از هم جدا می‌شوند تا هم scale بهتری بگیری و هم بتوانی مدل‌های read را به شکل بهینه برای نیازهای مختلف طراحی کنی. همگام‌سازی بین این دو معمولاً با eventها انجام می‌شود.
  • مثال: سرویس customer وقتی مشتری جدیدی ساخته می‌شود، یک event ایجاد می‌کند؛ سرویس order این event را مصرف می‌کند و یک read model محلی از مشتری‌ها نگه می‌دارد تا برای queryهای سریع، لازم نباشد هر بار مستقیماً به سرویس customer مراجعه کند.
  • لینک برای جزییات بیشتر: Ask AI: CQRS Architecture Pattern

موضوع ۱۲: مفاهیم پایه Kubernetes و دیپلوی محلی

  • خلاصه: این قسمت مفاهیم اصلی Kubernetes مثل pod، deployment و service را معرفی می‌کند؛ سپس با استفاده از Docker Desktop یک cluster محلی راه می‌افتد و سرویس‌ها، Kafka و Postgres روی آن دیپلوی می‌شوند.
  • مثال: برای سرویس order یک فایل deployment (YAML) ساخته می‌شود که image مربوط به Docker و متغیرهای محیطی لازم را مشخص می‌کند؛ با اجرای دستور kubectl apply، چند replica از سرویس اجرا شده و در صورت نیاز scale می‌گیرند.
  • لینک برای جزییات بیشتر: Ask AI: Kubernetes Basics and Local Deployment

موضوع ۱۳: دیپلوی روی Google Kubernetes Engine (GKE)

  • خلاصه: در این بخش، یک cluster روی GKE ساخته می‌شود، imageها به Artifact Registry push می‌شوند، Kafka، Postgres و microserviceها روی cluster دیپلوی می‌شوند و در نهایت هم scale افقی (horizontal scaling) اضافه می‌شود.
  • مثال: با استفاده از ابزار خط فرمان gcloud یک cluster ساخته می‌شود، imageها tag می‌شوند و به Artifact Registry push می‌شوند؛ سپس همان manifestهای Kubernetes روی GKE اعمال می‌شوند و با استفاده از Horizontal Pod Autoscaler، تعداد replicaها بر اساس مصرف CPU به‌صورت خودکار بالا و پایین می‌رود.
  • لینک برای جزییات بیشتر: Ask AI: Deploying to Google Kubernetes Engine (GKE)

موضوع ۱۴: گام‌های بعدی و جمع‌بندی

  • خلاصه: در پایان، دوره روی موضوعات تکمیلیِ مناسب محیط production مثل امنیت، observability، tracing و استفاده از API Gateway تأکید می‌کند و پیشنهاد می‌دهد برای عمیق‌تر شدن سراغ دوره‌های پیشرفته‌تر (مثلاً روی event-driven microservices و Elasticsearch) بروی.
  • مثال: برای آماده‌سازی کامل سیستم برای production، می‌توانی علاوه بر این معماری، از logging و tracing توزیع‌شده (مثلاً با ترکیب Kafka و Elasticsearch) استفاده کنی تا هم خطاها را راحت‌تر ردیابی کنی و هم بتوانی روی eventها و لاگ‌ها جست‌وجوی قدرتمندی داشته باشی.
  • لینک برای جزییات بیشتر: Ask AI: Next Steps and Conclusion

لینک اصلی دوره در Udemy


درباره خلاصه‌کننده

من «Ali Sol» هستم، یک Backend Developer. برای آشنایی بیشتر: