علی شکرالهی
بنیانگذار توسینسو و توسعه دهنده

بررسی کاربرد Gateway Aggregation Pattern در معماری مایکروسرویس

Gateway Aggregation Pattern زمانی کاربردی هست که کلاینت برای انجام عملیاتی ، نیاز داره تا چندین سرویس رو در backend فراخونی کنه . عموما این مسئله در معماری مایکروسرویس (Microservice architecture) نمود بیشتری داره . در این حالت توسعه دهنده با ارائه ی یک gateway و تجمیع چندین درخواست در قالب یک درخواست ، این مسئله رو حل میکنه .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

بررسی کاربرد Gateway Aggregation Pattern در معماری مایکروسرویس

به تصویر بالا دقت کنید ، برنامه ی ما برای انجام عملیاتی به سه تا سرویس نیاز داره ، و به هرکدوم درخواست جداگانه ای ارسال میکنه (1,2,3) و جواب هرکدام از سرویس ها رو جداگانه میگیره (4,5,6) و عملیات مورد نظرش رو به پایان میبره

اگر تغییری در ساختار هرکدوم از سرویس ها ایجاد بشه ، نیاز هست که client ما متناسب با تغییرات هر سرویس بروز رسانی بشه ، یا اگر تعداد درخواست ها از سمت کلاینت افزایش پیدا کنه ، میتونه باعث بروز مشکل در پاسخدهی سرویس ها بشه و بدلیل وابستگی مستقیم client به سرویس های backend، بهینه سازی سرویس ها دشوار میشه

برای حل این مشکل و کاهش ارتباط های متعدد client با سرویس ها ، ما از یک gateway استفاده میکنیم که کلاینت بصورت مستقیم با اون درگیر هست و وظیفه ی برقراری ارتباط با سرویس ها برعهده ی gateway مربوطه هست . به تصویر زیر دقت کنین:

بررسی کاربرد Gateway Aggregation Pattern در معماری مایکروسرویس

در ساختار بالا ، دیگه خبری از ارتباط مستقیم client با سرویس ها نیست  و ارتباط از طریق gateway برقرار میشه .

مواردی که بایستی در پیاده سازی این الگو مد نظر قرار بدیم:

  1. نباید در پیاده سازی Gateway ، وابستگی (Coupling) بین سرویس ها ایجاد بشه
  2. بهتر هست که gateway نزدیک به سرویس ها باشه تا حتی الامکان تاخیر در پاسخدهنی سرویس ها کاهش پیدا کنه
  3. بهتره در پیاده سازی gateway به شکلی عمل بشه تا در صورتی که یکی از سرویس ها از دسترس خارج شد ، اختلالی در عملکرد سیستم ایجاد نشه (مثلا اگر سرویسی به نام UserService داریم که وظیفه ی ارائه اطلاعات کاربر رو داره و از دسترس خارج شده ، با اضافه کردن یک سیستم caching به gateway میشه از اختلال پیش اومده جلوگیری کرد)
  4. ممکن هست تعداد درخواست ها به gateway افزایش چشمگیری پیدا کنه ، بهتر هست در طراحی gatewayبصورتی عمل بشه تا امکان scaling براش فراهم باشه
  5. حتما برای درخواست های ارسالی به سرویس ها timeout مشخص بشه ، تا در صورتی که در زمان مشخص شده جوابی ارسال نشد ، در صورت امکان از داده های cache شده استفاده بشه تا کارایی و پاسخ دهی سیستم کاهش پیدا نکنه

امیدوارم که مورد استفاده تون قرار بگیره 


علی شکرالهی
علی شکرالهی

بنیانگذار توسینسو و توسعه دهنده

علی شکرالهی، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس موبایل، مهندسی نرم افزار از دانشگاه آزاد اسلامی واحد کرج ، بیش از 15 سال سابقه ی فعالیت های حرفه ای و آموزشی

نظرات