LearnByLearn📖
اولین قسمت از تراکنش ها: Pessimistic 🆚 Optimistic قبلش اینو بگم اگه دوست داشتید این پلی لیست مفاهیم دیتابیس رو که قسمت چهارمش ACID هست رو مطالعه کنید بدون هیچ بحث اضافه دیگه ای بریم سر اصل مطلب ✅ توی Pessimistic Concurrency Control دیتابیس به صورت خیلی…
🤩 دومین قسمت از تراکنش ها OutBox Pattern
فرض کنید یک سیستم توزیع شده(distributed) فروشگاهی داریم که شامل یک بروکر هست، حالا یا ربیت یا کافکا یا هرچی و این وسط یک دیتابیسم داریم
حالا توی این سیستم ما، وقتی سفارشی ثبت میشه باید دوتا اتفاق بیوفته:
☝️یکی اینکه اون سفارش توی دیتابیس ثبت بشه.
☝️یکی دیگه اینکه event مربوط به اون سفارش توسط broker ما منتشر یا publish بشه و سایر سرویس هارو از این eventمطلع کنه
✅مثلا سرویس نوتیفیکیشن وقتی event ثبت سفارش رو دریافت کرد یه پیام بفرسته به کاربر یا مثلا سرویس انبار داری هم مطلع بشه که سفارش ثبت شده و کارای اداریشو انجام بدین
اینجا ما دوتا سناریو داریم
✅سناریو اول
سفارشمون کاملا موفقیت آمیز توی دیتابیس ثبت شد اما درست قبل از ارسال به بروکر ، سرور کرش میکنه یا چه میدونم network دچار مشکل میشه(اونم تو ایران که یه لحظه هم اینترنتا قطع نمیشن 😊)
ای داد بیداد سفارش توی دیتابیس ثبت شده ولی هیچ پیامی به سرویس های دیگه(نوتیفیکیشن و انبار) ارسال نشده 😨!!!!
✅سناریو دوم
فرض کن پیام موفقیت امیز توسط broker ارسال شده ولی حین ثبت، سرور دیتابیس دچار مشکل شده و rollback میخوره و سفارشمون توی دیتابیس نمیشینه
از طرفی پیام ثبت موفق امیزش هم توسط بروکر ارسال شده !!!!
پس سرویس های دیگه فکر میکنن سفارشی ثبت شده درحالی که هیچی ثبت نشده🤥
راه حل چیه 🤔
✅راه حل اینه یه دلال داده رو بیاریم توی کار که اسم این دلال outbox هست، این outbox یه جدول توی دیتابیسه که رابط بین دیتابیس سفارشات ما و بروکرمون هست
✅درواقع وقتی سفارش ثبت میشه، outbox میگه آقا پیام ثبت سفارش رو مستقیم نده به بروکر، بیا مستقیم بدش به خودم بعد من میدمش بروکر که پابلیشش کنه
✅حالا ارتباط بین outbox و بروکر چطوری برقرار میشه؟
یه worker این وسط به صورت دوره ای هی میاد جدول outbox رو چک میکنه و رکورد های جدول رو میخونه و میفرسته به broker
بعدش اون رکورد طبق سیاست های توسعه دهنده یا از outbox حذف میشه یا به عنوان successful تگ میخوره که یعنی پردازش شده
✅اینطوری اگر پردازش پیام دچار مشکل بشه، پیام توی Outbox باقی می مونه و دوباره توسط اون worker پردازش میشه پس تضمین ارسال دقیق یکبار (Exactly Once Delivery)هم برای ما فراهم میشه
دیگه نه نگران از دست دادن داده هات باش و ناهماهنگی بین سرویس ها
لینک همین مقاله توی لینکدین 👈🏻 لینک
مخصلیم❤️
@LearnByLearn
#outbox_pattern
فرض کنید یک سیستم توزیع شده(distributed) فروشگاهی داریم که شامل یک بروکر هست، حالا یا ربیت یا کافکا یا هرچی و این وسط یک دیتابیسم داریم
حالا توی این سیستم ما، وقتی سفارشی ثبت میشه باید دوتا اتفاق بیوفته:
☝️یکی اینکه اون سفارش توی دیتابیس ثبت بشه.
☝️یکی دیگه اینکه event مربوط به اون سفارش توسط broker ما منتشر یا publish بشه و سایر سرویس هارو از این eventمطلع کنه
✅مثلا سرویس نوتیفیکیشن وقتی event ثبت سفارش رو دریافت کرد یه پیام بفرسته به کاربر یا مثلا سرویس انبار داری هم مطلع بشه که سفارش ثبت شده و کارای اداریشو انجام بدین
اینجا ما دوتا سناریو داریم
✅سناریو اول
سفارشمون کاملا موفقیت آمیز توی دیتابیس ثبت شد اما درست قبل از ارسال به بروکر ، سرور کرش میکنه یا چه میدونم network دچار مشکل میشه(اونم تو ایران که یه لحظه هم اینترنتا قطع نمیشن 😊)
ای داد بیداد سفارش توی دیتابیس ثبت شده ولی هیچ پیامی به سرویس های دیگه(نوتیفیکیشن و انبار) ارسال نشده 😨!!!!
✅سناریو دوم
فرض کن پیام موفقیت امیز توسط broker ارسال شده ولی حین ثبت، سرور دیتابیس دچار مشکل شده و rollback میخوره و سفارشمون توی دیتابیس نمیشینه
از طرفی پیام ثبت موفق امیزش هم توسط بروکر ارسال شده !!!!
پس سرویس های دیگه فکر میکنن سفارشی ثبت شده درحالی که هیچی ثبت نشده🤥
راه حل چیه 🤔
✅راه حل اینه یه دلال داده رو بیاریم توی کار که اسم این دلال outbox هست، این outbox یه جدول توی دیتابیسه که رابط بین دیتابیس سفارشات ما و بروکرمون هست
✅درواقع وقتی سفارش ثبت میشه، outbox میگه آقا پیام ثبت سفارش رو مستقیم نده به بروکر، بیا مستقیم بدش به خودم بعد من میدمش بروکر که پابلیشش کنه
✅حالا ارتباط بین outbox و بروکر چطوری برقرار میشه؟
یه worker این وسط به صورت دوره ای هی میاد جدول outbox رو چک میکنه و رکورد های جدول رو میخونه و میفرسته به broker
بعدش اون رکورد طبق سیاست های توسعه دهنده یا از outbox حذف میشه یا به عنوان successful تگ میخوره که یعنی پردازش شده
✅اینطوری اگر پردازش پیام دچار مشکل بشه، پیام توی Outbox باقی می مونه و دوباره توسط اون worker پردازش میشه پس تضمین ارسال دقیق یکبار (Exactly Once Delivery)هم برای ما فراهم میشه
دیگه نه نگران از دست دادن داده هات باش و ناهماهنگی بین سرویس ها
لینک همین مقاله توی لینکدین 👈🏻 لینک
مخصلیم❤️
@LearnByLearn
#outbox_pattern
👍5