Event-Driven Architectures Done Right, Apache Kafka

سخنرانی تیم برگلوند در دووکس لهستان ۲۰۲۱، یک بررسی عمیق از معماری‌های مبتنی بر رویداد (EDA) را ارائه داد، به ویژه در زمینه‌ی آپاچی کافکا. این سخنرانی شامل موضوعات گسترده‌ای از اصول ابتدایی EDAs تا چالش‌ها و بهترین شیوه‌های پیاده‌سازی آن‌ها بود. در اینجا خلاصه‌ای مفصل از سخنرانی او آورده شده است:مقدمه‌ای بر معماری مبتنی بر رویداد (EDA):برگلوند با اشاره به علاقه‌ی رو به رشد در EDAs شروع کرد و توجه داشت که این موضوع برای بسیاری از توسعه‌دهندگان نسبتاً تازه است. او تأکید کرد که در حالی که صنعت هنوز در حال یادگیری در مورد EDAs است، از تجربیات اولیه‌ی به‌کارگیری آن‌ها درس‌های ارزشمندی به دست آمده است. او تأکید کرد که بیشتر و بیشتر افراد در مورد EDAs هیجان‌زده هستند، اما مهم است که بدانیم اکثر توسعه‌دهندگان هنوز در حال ساخت اولین سیستم‌های مبتنی بر رویداد خود هستند که می‌تواند چالش‌برانگیز باشد.یک سیستم فروشگاهی مرجع - EDA با کافکا:برگلوند از یک سیستم فروشگاهی فرضی برای توضیح EDAs استفاده کرد. این سیستم شامل یک رابط کاربری وب برای ثبت سفارشات و مدیریت حساب کاربری بود، هر یک با پایگاه داده‌ی محلی خود. او توضیح داد که چگونه سفارشات پردازش و به عنوان رویدادها در یک موضوع کافکا ثبت می‌شوند، که یک جزء حیاتی در EDAs برای حفظ ثبت دائمی رویدادها است. این گزارش رویداد نه صرفاً یک صف که پیام‌ها پس از مصرف از بین می‌روند بلکه یک ثبت دائمی از رویدادها است. او همچنین توضیح داد که چگونه خدماتی مانند پرداخت‌ها و حمل و نقل با این رویدادها به صورت ناهمزمان تعامل دارند، که بر اهمیت عملیات ناهمزمان در EDAs تأکید دارد.عملیات ناهمزمان و به اشتراک‌گذاری داده:یک جنبه‌ی کلیدی از EDAs که برگلوند بر آن تأکید کرد، اهمیت عملیات ناهمزمان بود. برای مثال، او یک سناریو را توضیح داد که در آن سرویس حمل و نقل به اطلاعات کاربر برای پردازش یک سفارش نیاز دارد. به جای انجام یک تماس مستقیم و همزمان با سرویس کاربر، سرویس حمل و نقل از طریق یک مکانیزم مبتنی بر رویداد به این اطلاعات دسترسی پیدا می‌کند. این کار با انتشار رویدادها به یک changelog هر زمان که یک کاربر ایجاد، به‌روزرسانی یا حذف می‌شود، انجام می‌شود و به سرویس حمل و نقل امکان می‌دهد تا یک فروشگاه کلید-مقدار خود را از داده‌های کاربر نگه دارد.چالش‌ها و اشتباهات در EDAs:برگلوند پنج روش اصلی را برای سوء استفاده یا سوء تفاهم احتمالی در EDAs شناسایی کرد: اشتباه در کاربرد پارادایم مبتنی بر رویداد، اجتناب بیش از حد از پایگاه داده‌ها، مدیریت نادرست طرح‌بندی، بیش از حد سفارشی کردن اجزایی که از گزارش‌های رویداد می‌خوانند، و اشتباه در تخمین مقیاس مورد نیاز سیستم. او در مورد رویکرد یک اندازه برای همه هشدار داد و بر نیاز به دیدگاه متعادل هنگام اتخاذ EDAs تأکید کرد.تعادل بین سیستم‌های قدیمی و جدید:بخش قابل توجهی از سخنرانی برگلوند به همزیستی سیستم‌های جدید مبتنی بر رویداد با سیستم‌های میراثی، از جمله پایگاه داده‌های سنتی اختصاص یافت. او توضیح داد که پارادایم‌های قدیمی با ظهور فناوری‌های جدید ناپدید نمی‌شوند؛ بلکه اغلب با یکدیگر همزیستی کرده و یکدیگر را تکمیل می‌کنند. او در مورد نقش ابزارهای تغییر داده در این زمینه صحبت کرد و تأکید کرد که پایگاه‌های داده همچنان مرتبط و ضروری هستند، حتی در زمینه‌یEDAمدیریت طرح‌بندی و مفهوم شبکه داده:برگلوند بر اهمیت طرح‌بندی در EDAs تأکید کرد و ایده‌ی رد کردن طرح‌بندی در دنیای محوریت رویداد را رد کرد. او مفهوم شبکه داده را معرفی کرد و برای مالکیت دامنه‌ی داده و در نظر گرفتن داده به عنوان یک محصول تبلیغ کرد. این رویکرد، به گفته‌ی او، برای مدیریت داده در یک EDA حیاتی است، زیرا به مدیریت تنش بین داده‌های ثابت ('چه هست') و رویدادهای پویا ('چه اتفاق می‌افتد') کمک می‌کند. او تأکید کرد که صرف نظر از اینکه سیستم‌ها بر رویدادها یا داده‌های ثابت تمرکز دارند، درک و مدیریت طرح‌بندی حیاتی است. او همچنین اشاره کرد که شبکه داده این دیدگاه را به دنیای تحلیلی منتقل می‌کند و پیشنهاد می‌کند که کاربرد اصول EDA فراتر از سیستم‌های عملیاتی است.سخنرانی تیم برگلوند در دووکس لهستان ۲۰۲۱، نگاهی جامع به معماری‌های مبتنی بر رویداد ارائه داد، با تمرکز خاص بر آپاچی کافکا. او اصول و شیوه‌هایی که زیربنای EDAs هستند را روشن کرد، چالش‌ها و مشکلات معمول را بررسی کرد و بر اهمیت مدیریت طرح‌بندی تأکید کرد. بینش‌های او در مورد تعادل بین پیاده‌سازی‌های جدید EDA با سیستم‌های میراثی موجود و نقش شبکه داده در مدیریت داده در زمینه‌ی رویداد‌محور، راهنمایی‌های ارزشمندی برای توسعه‌دهندگان و معمارانی که در نظر دارند یا با EDAs کار می‌کنند، ارائه داد. https://www.youtube.com/watch?v=A_mstzRGfIE