При первом подходе (API-шлюз для внутренних и внешних вызовов) есть две проблемы, которые вы можете рассмотреть:
1) Нагрузка на службу шлюза станет выше.Если внутренние службы в среднем делают один вызов любой другой внутренней службе, нагрузка на службу шлюза удвоится.Это может привести к дополнительной задержке не только из-за дополнительного скачка, но и из-за того, что каждый запрос должен согласовываться через дополнительную нагрузку на службу шлюза.Это заставит вас наращивать аппаратное обеспечение шлюза (горизонтальное или вертикальное) без ощутимой выгоды.
2) Как только нагрузка поднимется выше и достигнет пиковой емкости экземпляров службы шлюза, эти экземпляры могут начать исчерпыватьих ресурсы, особенно потоки обработки или потоки, которые делают вызовы.В общем, эта ситуация может быть обработана путем сброса нагрузки или регулирования некоторых новых запросов.Это может означать, что мы можем обслуживать только процент запросов, пока нагрузка не снизится.Однако в нашем случае затрагиваются не только новые запросы, но и все те старые запросы в полете, которые ожидают освобождения ресурсов службы Gateway для внутренних вызовов, также блокируются навсегда до истечения времени ожидания, так как эти запросыждем себя, чтобы завершить.В итоге мы имеем тупиковую систему, которая вообще не будет обслуживать запросы, пока нагрузка не снизится.Если тайм-ауты не реализованы должным образом, они могут даже навсегда зайти в тупик и потребовать повторного использования экземпляров.
В любом случае, это некоторые проблемы, которые нам необходимо решить при разработке микро-сервисов, но в этом случае мы можем избежать этихвопросы.