صابر طباطبائی یزدی
صابر طباطبائی یزدی
خواندن ۳ دقیقه·۷ ساعت پیش

چالش های معماری میکروسرویس


در معماری میکروسرویس فرض شماره یک درخواست ها برای یک گیت وی بروکر ارسال میشه بسته به نوع درخواست که از نوع برگشت به میکروسرویس قبلی یا صدا زدن مستقیم بروکر در هنگام خطاست تصمیم میگیریم که حالت های مختلف داشته باشیم این روش معمول است


بله، در معماری میکروسرویس‌ها، استفاده از یک API Gateway یا گیت وی بروکر برای مدیریت درخواست‌ها و هدایت آن‌ها به سرویس‌های مختلف یکی از روش‌های معمول است. فرض شما به نظر منطقی می‌رسد و معمولاً در این نوع معماری‌ها از گیت وی‌ها به منظور انجام کارهایی مثل:

  1. هدایت درخواست‌ها: گیت وی معمولاً درخواست‌ها را بر اساس نوع و مسیرشان به میکروسرویس‌های مختلف هدایت می‌کند.
  2. مدیریت خطاها: در صورتی که خطایی در درخواست‌ها رخ دهد، گیت وی می‌تواند بسته به سیاست‌های تعریف شده، درخواست را به یکی از حالت‌های مختلف (مثلاً برگشت به سرویس قبلی، ارسال خطا به کاربر، یا درخواست مجدد) هدایت کند.
  3. ارسال مستقیم به بروکر: اگر نیاز باشد که درخواست به طور مستقیم به یک بروکر (مانند Kafka یا RabbitMQ) ارسال شود، این کار ممکن است در هنگام خطا یا نیاز به پردازش خاص انجام شود.

این ساختار به شما کمک می‌کند تا کنترل بیشتری بر نحوه برقراری ارتباط بین میکروسرویس‌ها و مدیریت درخواست‌ها و خطاها داشته باشید. در واقع، معماری گیت وی بروکر یکی از راه‌های موثر برای مدیریت پیچیدگی‌های سیستم‌های میکروسرویس است.


حالا اگر اینطور باشه بعضی از انواع درخواست خطا را به میکروسرویس قبلی برمیگردانند بعضی دیگر هم بروکر را صدا میزنند هم به میکروسرویس قبلی برمیگردانند در این صورت دو درخواست به بروکر برمیگردد آیا میتواند دومی را تشخیص دهد و اسکیپ کند


بله، امکان تشخیص درخواست دوم و اجتناب از ارسال مجدد به بروکر وجود دارد. برای پیاده‌سازی چنین منطقی، می‌توانید چند روش مختلف را به کار بگیرید:

  1. استفاده از شناسه یکتای درخواست (Request ID): هر درخواست می‌تواند یک شناسه یکتا (مثلاً یک request_id) داشته باشد که به همراه درخواست‌های مختلف ارسال شود. این شناسه می‌تواند برای شناسایی درخواست‌هایی که قبلاً به بروکر ارسال شده‌اند، استفاده شود. در این صورت، اگر یک درخواست دوباره با همان شناسه یکتا به میکروسرویس ارسال شود، سیستم می‌تواند تشخیص دهد که این درخواست قبلاً پردازش شده و نیاز به ارسال دوباره به بروکر نیست.
  2. حالت‌های مختلف خطا: می‌توانید خطاهای مختلف را به دسته‌های خاصی تقسیم کنید و هر دسته را با یک رفتار خاص مرتبط کنید. مثلاً برای یک نوع خطا، درخواست به بروکر و میکروسرویس قبلی ارسال می‌شود، اما برای نوع دیگری فقط به میکروسرویس قبلی برگشت داده می‌شود. در این حالت، در صورتی که خطای مشابهی دوباره پیش بیاید، گیت وی می‌تواند با استفاده از حالت‌های خطا، درخواست را به بروکر ارسال نکند.
  3. حافظه وضعیت (Stateful Tracking): در برخی معماری‌ها، گیت وی یا سیستم مدیریت درخواست‌ها ممکن است وضعیت درخواست‌ها را ذخیره کرده و پیگیری کند. به این معنی که اگر یک درخواست قبلاً به بروکر ارسال شده باشد، سیستم قادر است که این وضعیت را بررسی کرده و از ارسال دوباره به بروکر جلوگیری کند.
  4. پالیسی‌های مدیریت تراکنش (Transaction Policies): اگر در سیستم شما تراکنش‌های پیچیده‌ای بین میکروسرویس‌ها وجود دارد، می‌توانید از یک پالیسی تراکنشی استفاده کنید که تعیین کند که یک درخواست با وضعیت خطا باید به بروکر یا میکروسرویس قبلی بازگشت داده شود. در این حالت، اگر وضعیت درخواست دوباره همان وضعیت خطا باشد، از ارسال دوباره به بروکر جلوگیری می‌شود.

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

میکروسرویسapi gatewayبروکرbrokerrabbitmq
برنامه نویس.42ساله. از مدرک MCSD دات نت سال 2002 شروع کردم البته بعد از لیسانس و تمام عمرم رو در مدیریت با ابزار های شیرپوینت و MSPS و CRM و غیره گذراندم.https://zil.ink/sabert
شاید از این پست‌ها خوشتان بیاید