دوره آموزشی Event-Driven Architecture - مفاهیم و مقدمات

  • دسته بندی
    معماری نرم افزار
  • مدت دوره
    45 ساعت
  • جلسات دوره
    15 جلسه 3 ساعته
  • نحوه برگزاری
    آنلاین
  • تاریخ شروع
    13 دی 1401
  • هزینه دوره
    4.000.000 تومان
  • ثبت نام
  • معرفی دوره
    در 2 دهه گذشته، شاهد افزایش نیاز به طراحی سیستم های توزیع شده و در نتیجه آن، جدی تر شدن دغدغه هایی مثل Scalability، Availability و ... بوده ایم. البته، این دغدغه ها همیشه مورد توجه معماران و طراحان نرم افزار بوده اند اما، فراگیری بیشتر این نیازها باعث پررنگ شدن این مفاهیم و بعضا باعث تئوریزه شدن سبک ها و مفاهیم جدید طراحی گردید. ظهور و یا فراگیر شدن Event-Driven Architecture (به اختصار EDA) را میتوان حاصل این اتفاق دانست. EDA یک سبک معماری توزیع و Asynchronous است که جهت تولید نرم افزارهایی با مشخصه¬های کیفی ذکر شده مورد استفاده قرار میگیرد. این سبک معماری نه تنها مشخصه هایی مانند Scalability و Availability را در نظر می گیرد، بلکه طراح یا معمار را قادر میسازد تا به بسیاری از مسائل دیگر مانند Elasticity، Resiliency، Adaptability، Composability و ... بهتر رسیدگی کند. EDA را میتوان به عنوان یک سبک معماری مستقل و هم میتوان به عنوان سبکی ترکیبی با معماری های دیگر (برای مثال Event-Driven Microservices Architecture) مورد بررسی و استفاده قرار دارد.

    در این دوره آموزشی به مفاهیم و مقدمات Event-Driven Architecture در قالب تئوری و عملی میپردازیم و مخاطب را با نگاه Event-Driven و Asynchronous آشنا میکنیم. هدف اصلی این دوره، آشنا کردن مخاطب با EDA و ایجاد تغییر الگوی فکری در مخاطب جهت استفاده از نگاه EDA به بسیاری از مسائل طراحی و معماری است. همانطور که از اسم دوره پیداست، این دوره، بخش اول و مقدماتی این مبحث بوده و به همین دلیل بیشتر بر روی مفاهیم پایه ای و بنیادین EDA تمرکز میکند و بسیاری از مفاهیم پیشرفته (مانند Streaming، Complex Event Processing، امنیت در معماری EDA، مانیتورینگ و ...) را پوشش نمی دهد و یا نهایتا به معرفی آنها اکتفا میکند. همینطور به علت محدودیت دسترسی حجم زیادی از مخاطبین به سرویس های Cloud (مانند AWS و Azure)، مجموعه ابزارهای ارائه شده توسط این سرویس ها (مانند Amazon EventBridge، Amazon SNS و ... ) در کلاس بررسی نمی شوند.

  • مفاهیم اولیه
    • تعریف Flow و Flow Interaction
    • تعریف Producer یا Source
    • تعریف Consumer یا Receiver
    • تعریف Message, Command و Event
    • تعریف Stream
    • تفاوت بین Data Stream و Event Stream
    • Event-Driven Architecture (EDA) چیست؟
    • نگاهی بر راه حل¬های Integration در دنیای قبل از Event-Driven Architecture
    • مفهوم Contextual Architecture
    • تعریف Composability در Contextual Architecture
    • آشنایی با Serverless Architecture
      • نگاهی بر Serverless Architecture
      • تعریف FaaS یا Function-as-a-Service
  • Event-Driven Architecture
    • بررسی Event-Driven Architecture به عنوان یک سبک معماری
      • EDA به عنوان یک سبک معماری مستقل
      • به شکل ترکیب با سبک های معماری دیگر (مانند Event-Driven Microservices Architecture )
    • بررسی Topology های متفاوت EDA
      • Broker Topology
      • Mediator Topology
    • بررسی مشخصه های کیفی EDA ها
      • Scalability
      • Adaptability
      • Performance
      • Coupling
      • Responsiveness
      • Evolutionary
      • Elasticity
  • CAP Theorem
    • بررسی Terminology
      • Consistency
      • Availability
      • Partition Tolerance
    • Trade-off در حوزه Consistency و Availability
      • تعریف Best-Effort Availability و Best-Effort Consistency
      • بررسی رویکرد Strong Consistency – Bes-Effort Availability
      • بررسی رویکرد Availability Guarantee – Best-Effort Consistency
    • بررسی مدل ACID و BASE از منظر Consistency-Availability
    • بررسی ابعاد Partitioning
      • Data Partitioning
      • Operational Partitioning
      • Functional Partitioning
      • User Partitioning
      • Hierarchical Partitioning
    • مدیریت تاثیرات Partitioning در طراحی
      • تعریف Partition Mode
      • شناسایی صریح Partition Mode و تاثیرات آن بر Consistency و Availability
      • استراتژی های مختلف در طراحی مکانیزم های Compensation و Recovery
      • استراتژی های مختلف در انجام عملیات ها در Partition Mode
  • Consistency
    • تعریف مفهوم Consistency
    • بررسی Consistency Models
    • ابعاد مختلف Consistency
      • Staleness
      • Ordering
    • زوایای مختلف Consistency
      • Data-Centric View
      • Client-Centric View
    • بررسی Guarantees و Consistency Models
      • Monotonic Writes Consistency (MRC)
      • Monotonic Writes Consistency (MWC)
      • Read Your Writes Consistency (RYWC)
      • Write Follows Read Consistency (WFRC)
  • مفاهیم Messaging
    • تعریف Messaging و Messaging System
    • مفاهیم پایه ای Messaging
      • Message
      • Channel
      • Multi-Step Delivery
      • Routing
      • Transformation
      • Endpoints
    • برخی از انواع Channel
      • Point-to-Point Channel
      • Pub-Sub Channel
      • Invalid Message Channel
      • Dead Letter Channel
    • Delivery Guarantees
      • At-most-once delivery
      • At-least-once delivery
      • Exactly-once delivery
      • بررسی تفاوت Exactly-once delivery و Exactly-once Processing
    • مفهوم Channel Adapter و Messaging Bridge
    • مفاهیم Pull Model و Push Model
    • بررسی الگوی Pipes & Filters و کاربرد آن در Messaging System
    • بررسی Outbox و کاربرد آن
    • Timeout-based Delivery
    • Event-delivery patterns
      • Request Callback
      • Producer-Consumer
      • Publisher-Subscriber
      • Fire and Forget
      • Store and Forward
      • Polling
    • Message Identifier و Correlation Identifier در پیام ها
    • مدیریت پیام های منقضی شده (Stale) با Message Expiration
    • ارسال پیام های حجیم و کاربرد Message Sequence
    • تغییر و تبدیل Message ها
      • کاربرد Envelope Wrapper ها در ارسال و دریافت پیام
      • Content Enricher ها و تکمیل داده های پیام
      • Content Filter ها و حذف داده های غیرضروری پیام
      • مدیریت پیام های حجیم با Claim Check
      • Normalizer ها و یکسان سازی پیام های متفاوت
      • Message Mappers و ارتباط بین Domain Event ها و Integration Event ها
    • Idempotency
      • تعریف Idempotency و Idempotent Receiver
      • روش های مختلف پیاده سازی Idempotency
        • Explicit De-Duping
        • Semantic De-Duping
      • روش های تسهیل Idempotency در طراحی Event ها
      • رویکرد AOP در پیاده سازی Idempotent Receiver
    • Competing Consumers و پردازش موازی پیام ها
  • الگوهای Message Routing
    • مفهوم و اهمیت Routing
    • بررسی مفهوم Predictive Routing
    • بررسی مفهوم Reactive filtering
    • Content-based Router
    • Message Filter
      • بررسی مفهوم Null Channel
      • Stateless Message Filters
      • Stateful Message Filters
    • Dynamic Router
    • Recipient List
    • Dynamic Recipient List
    • Splitter
      • Static Splitter
    • Aggregator
    • استراتژی های Aggregation
      • Wait for All
      • Time Out
      • First Best
      • Time Out with Override
      • External Event
    • Re-sequencer
    • Composed Message Processor
    • Scatter-Gather
    • Priority Queue Pattern
    • Routing Slip
    • Process Manager
  • Transaction ها و Workflow ها در EDA
    • نگاهی بر الگوی Saga
    • نگاهی بر ابعاد مختلف Saga
      • انواع Communication (Sync و Async)
      • انواع Consistency (Atomic و Eventual)
      • انواع Coordination (Orchestration و Choreography)
    • بررسی انواع Saga (SAO, SAC, SEO و ... )
    • مدیریت State در Saga ها
      • مفهوم State Saga Machine
  • Contract ها در EDA
    • بررسی انواع Contract
      • Loose Contracts
      • Strict Contracts
    • بررسی Stamp Coupling و مزایا و معایب آن
    • نقش Stamp Coupling در پیاده¬سازی Workflow به شکل Choreography
    • بررسی روش Type Based Versioning
    • نگاهی بر تکنیک Double Writing
    • بررسی تکنیک Up-Casting و Down-Casting
    • بررسی مفهوم Weak Schema و روش های آن
      • Mapping
      • Wrapper
    • Schema Negotiation و تعامل سرویس¬ها در مورد تغییرات Schema
    • Backward Compatibility و Forward Compatibility در Schema پیام ها
  • آشنایی با Streaming و Event Processing
    • تعریف Stream و Continuous Event Streams
    • تعریف Event Stream Processing
    • نگاهی بر تاریخچه Event Streaming
    • مفهوم Unified Log
    • انواع پردازش Event Stream ها
    • تعریف Complex Event Processing (CEP)
    • مفهوم Stateful Stream Processing
    • نگاهی بر ابزار Kafka و Kafka Streams و کاربرد آن در Streaming
  • نگاهی اجمالی بر برخی ابزارها، پروتکل ها و فریم ورک ها
    • AMQP (بر اساس استاندارد ISO/IEC 19464:2014)
      • نگاهی بر ساختار پروتکل AMQP
      • مفهوم Frame در AMQP
      • ساختار Frame ها در AMQP (Frame Type, Frame Payload, ...)
      • انواع Frame در AMQP
        • Header Frame
        • Method Frame
        • Body Frame
        • Content Frame
        • Heartbeat Frame
      • Type ها در AMQP
        • Type System
        • Type Encoding
        • Type Notation
      • کارکرد Connection و Session در AMQP
      • فرمت پیام ها، Delivery State ها در AMQP
    • Rabbit MQ
      • بررسی RabbitMQ و تاریخچه آن
      • مفهوم Queue، Exchange و Binding در RabbitMQ
      • انواع Exchange در RabbitMQ
        • Direct
        • Topic
        • Fanout
        • Headers
      • Durability در RabbitMQ
    • Apache Kafka
      • بررسی ساختار و معماری Apache Kafka
      • Kafka به عنوان ابزار Messaging
      • Kafka به عنوان ابزار Streaming
      • بررسی Delivery Guarantee ها در Apache Kafka
      • Producer ها و Consumer ها در Kafka
      • Topic ها در Kafka
      • Kafka Streams
      • KSQL
    • NServiceBus – MassTransit
      • بررسی اکوسیستم .NET و فریم ورک¬های موجود
      • بررسی ابزار NServiceBus و MassTransit و مقایسه آن ها
      • استفاده از Transport های مختلف
      • نحوه پیاده سازی Handler ها
      • Saga و انواع مختلف پیاده سازی آن
      • Routing Slip و انواع مختلف پیاده سازی آن
  • مباحث دوره در تمام زبان های برنامه نویسی شیءگرا قابل استفاده می باشند و مباحث و کدهای مطرح شده، وابستگی به زبان و یا پلتفرم خاصی ندارند. پیاده سازی مباحث این دوره در کلاس با زبان #C صورت میگیرد اما به دلیل عدم وابستگی به زبان، برنامه نویسان با تخصص در همه زبان های شیءگرا میتوانند در این دوره شرکت کنند.
  • دوره DDD و ES-CQRS
    از آنجا که در دوره های DDD و Event Sourcing / CQRS به بررسی برخی مفاهیم مانند تفکیک اجزای یک نرم افزار، Integration و برخی تکنیک های آن، Messaging و بعضی از الگوها و ابزارهای آن، مفاهیم Domain Event و Integration Event، موضوع Event Versioning و ... پرداخته ایم، پیشنهاد می شود مخاطبینی که قصد شرکت در این دوره را دارند، در دوره های فوق شرکت کرده باشند و یا به صورت مطالعه شخصی، با این مباحث آشنایی لازم را داشته باشند.