یک اپلیکیشن موبایل داریم که به صورت مستقیم با سه سرویس بکاند زیر در ارتباطه:
- UserService
- OrderService
- PaymentService
قراره اسپرینت بعدی یک سرویس جدید به اسم NotificationService هم به این مجموعه اضافه بشه. مشکل اینجاست که تیم موبایل همین الان هم زیر بار پیچیدگیهای بالا قرار داره و حسابی از حجم سرویسها کلافه شده و هر سرویس جدیدی که اضافه میشه، باید کارهای زیر رو از اول براش انجام بدن:
- وایتلیست کردن دامنه سرویس جدید.
- پیادهسازی احراز هویت.
- ارور هندلینگ.
و به طور کلی با جزئیات سرویس جدید درگیر میشن.
در واقع بخشی از مسئولیت مسیریابی و هماهنگی بین سرویسها که بهتره سمت بکاند انجام بشه به کلاینت موبایل منتقل شده.
حالا از شما خواسته شده قبل از اضافه شدن NotificationService، وابستگی کلاینت موبایل به سرویسهای مختلف رو کاهش بدید.
کدوم راهکار زیر رو انتخاب میکنید؟
1- یک Load Balancer جلوی همه سرویسها قرار میدیم تا کلاینت فقط با یک IP واحد در ارتباط باشه و توزیع ترافیک توسط Load Balancer انجام بشه.
2- به سمت GraphQL Federation میریم تا کلاینت بتونه از طریق یک Schema یکپارچه به دادههای موردنیاز خود دسترسی داشته باشه.
3- یک API Gateway اضافه میکنیم تا همه درخواستهای کلاینت از یک سرور واحد عبور کنند و بقیه سرویسها پشت Gateway مخفی بشن.
4- یک BFF (Backend for Frontend) برای اپلیکیشن موبایل ایجاد میکنیم تا نیازهای این کلاینت از طریق یک لایه اختصاصی تأمین بشه.


