Как использовать Express и GRPC в одном и том же сервисе в Google Cloud Run без конфликта портов

У меня есть микросервис NodeJS, размещенный в Google Cloud Run.

В сервисе есть как экспресс-сервер для пользовательских маршрутов, так и сервер gRPC для связи с другими внутренними микросервисами.

Ниже мой код:

....
//For the express server I am using an hard coded port because of port conflict with grpc server port
const app = express();
const hardCodedPort=3000; //I can't use process.env.PORT here because grpc server below needs it
app.listen(hardCodedPort);
......

//For grpc I am NOT using an hardcoded port, I am listening to the port provided by Cloud Run as shown below
gRPCServer.bindAsync(`0.0.0.0:${process.env.PORT}`, grpc.ServerCredentials.createInsecure(), () => {
      gRPCServer.start();
});

Теперь, из-за того, что Cloud Run может запускать очень много экземпляров вышеуказанной службы, не столкнусь ли я с конфликтом портов для моего экспресс-сервера, поскольку он всегда прослушивает жестко закодированный порт?

Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Интерфейс Cloud Run (GFE) поддерживает только два порта: 80 и 443. Если клиент подключается к порту 80, он будет перенаправлен на порт 443. Другими словами, ваша служба Cloud Run может поддерживать только один внутренний номер порта, который по умолчанию 8080 (настраивается). Ваше приложение может прослушивать соединения только на одном порту.

Я понимаю. Это означает, что я не могу одновременно прослушивать экспресс-сервер и сервер grpc в одной службе?

ololo 11.11.2022 10:31

@user15155716 user15155716 — номер порта, который прослушивает ваша служба Cloud Run, не является общедоступным, поэтому конфликт между несколькими экземплярами контейнера отсутствует. Ваше приложение может прослушивать только один порт TCP. GFE — это прокси, который переводит порт 443 во внутренний номер порта вашей службы, который может быть только одним номером порта.

John Hanley 11.11.2022 10:32

@user15155716 user15155716 - TCP поддерживает только одного прослушивателя на номер порта.

John Hanley 11.11.2022 10:33

Другие вопросы по теме