Gateway Aggregation Pattern زمانی کاربردی هست که کلاینت برای انجام عملیاتی ، نیاز داره تا چندین سرویس رو در backend فراخونی کنه . عموما این مسئله در معماری مایکروسرویس (Microservice architecture) نمود بیشتری داره . در این حالت توسعه دهنده با ارائه ی یک gateway و تجمیع چندین درخواست در قالب یک درخواست ، این مسئله رو حل میکنه .
دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
به تصویر بالا دقت کنید ، برنامه ی ما برای انجام عملیاتی به سه تا سرویس نیاز داره ، و به هرکدوم درخواست جداگانه ای ارسال میکنه (1,2,3) و جواب هرکدام از سرویس ها رو جداگانه میگیره (4,5,6) و عملیات مورد نظرش رو به پایان میبره
اگر تغییری در ساختار هرکدوم از سرویس ها ایجاد بشه ، نیاز هست که client ما متناسب با تغییرات هر سرویس بروز رسانی بشه ، یا اگر تعداد درخواست ها از سمت کلاینت افزایش پیدا کنه ، میتونه باعث بروز مشکل در پاسخدهی سرویس ها بشه و بدلیل وابستگی مستقیم client به سرویس های backend، بهینه سازی سرویس ها دشوار میشه
برای حل این مشکل و کاهش ارتباط های متعدد client با سرویس ها ، ما از یک gateway استفاده میکنیم که کلاینت بصورت مستقیم با اون درگیر هست و وظیفه ی برقراری ارتباط با سرویس ها برعهده ی gateway مربوطه هست . به تصویر زیر دقت کنین:
در ساختار بالا ، دیگه خبری از ارتباط مستقیم client با سرویس ها نیست و ارتباط از طریق gateway برقرار میشه .
مواردی که بایستی در پیاده سازی این الگو مد نظر قرار بدیم:
- نباید در پیاده سازی Gateway ، وابستگی (Coupling) بین سرویس ها ایجاد بشه
- بهتر هست که gateway نزدیک به سرویس ها باشه تا حتی الامکان تاخیر در پاسخدهنی سرویس ها کاهش پیدا کنه
- بهتره در پیاده سازی gateway به شکلی عمل بشه تا در صورتی که یکی از سرویس ها از دسترس خارج شد ، اختلالی در عملکرد سیستم ایجاد نشه (مثلا اگر سرویسی به نام UserService داریم که وظیفه ی ارائه اطلاعات کاربر رو داره و از دسترس خارج شده ، با اضافه کردن یک سیستم caching به gateway میشه از اختلال پیش اومده جلوگیری کرد)
- ممکن هست تعداد درخواست ها به gateway افزایش چشمگیری پیدا کنه ، بهتر هست در طراحی gatewayبصورتی عمل بشه تا امکان scaling براش فراهم باشه
- حتما برای درخواست های ارسالی به سرویس ها timeout مشخص بشه ، تا در صورتی که در زمان مشخص شده جوابی ارسال نشد ، در صورت امکان از داده های cache شده استفاده بشه تا کارایی و پاسخ دهی سیستم کاهش پیدا نکنه
امیدوارم که مورد استفاده تون قرار بگیره