Функция Google Cloud: получить регион запроса

avatar
Jadson Lucena
1 июля 2021 в 16:15
154
1
0

Я разрабатываю API на PHP. Мне нужно знать, в каком регионе запрашивается этот API. Если возможно, с минимальной задержкой (Хотя я ничего не нашел, чтобы помочь с этим).

Для этого я использую глобальный балансировщик нагрузки с CDN в своей облачной функции.

Я попытался просмотреть заголовки запросов и переменные среды, но ничего не напоминает мне о регионе, где глобальный балансировщик нагрузки с CDN кэширует API.

С этого момента я очень благодарен за любую помощь...

Источник
guillaume blaquiere
1 июля 2021 в 19:11
0

Просто уточню: вам нужен регион запрашивающего? Или балансировщика нагрузки? Или из CDN? Или облачных функций (если развертывать в нескольких регионах)?

Jadson Lucena
1 июля 2021 в 20:08
0

Я пытаюсь увидеть, из какого региона работает кеш API. Потому что GCP сообщает, что при использовании глобального балансировщика нагрузки с cdn копия облачной функции кэшируется во всех регионах. Таким образом, когда пользователь запрашивает API, у него будет минимальное время отклика.

guillaume blaquiere
1 июля 2021 в 21:07
0

Это не совсем точно! Ответ Cloud Functions кэшируется, если установлен заголовок управления кэшем. Если это так, ответ кэшируется, и при следующем выполнении точного запроса содержимое будет обслуживаться из кэша. Но будьте осторожны, если у вас есть запрос в Европе и такой же в США, оба запросят ваши облачные функции и сохранят результат в кеше CDN региона. CDN не синхронизированы по всему миру. 2-й пользователь в том же регионе, что и 1-й, будет иметь минимальную задержку, а не в разных регионах.

guillaume blaquiere
1 июля 2021 в 21:08
0

А поскольку запросы обслуживаются из кеша, вы увидите только первый запрос, который создаст кеш. Последующий запрос неизвестен облачным функциям, поскольку обслуживается из кеша, а не из самой функции.

Jadson Lucena
1 июля 2021 в 22:10
0

Я понимаю ваше объяснение. Но остается вопрос: есть ли какие-либо заголовки, переменные среды или что-то еще, что я могу активировать, чтобы определить, откуда обслуживается кеш?

guillaume blaquiere
2 июля 2021 в 07:07
0

Потому что вам нужно ловить эту информацию на стороне клиента (в браузере пользователя)?

Jadson Lucena
2 июля 2021 в 10:43
0

Я на самом деле пытаюсь получить эту информацию в API

guillaume blaquiere
2 июля 2021 в 12:18
0

Что вы имеете в виду под "в API"? В коде облачных функций?

Jadson Lucena
2 июля 2021 в 12:42
0

Да, в php-коде, работающем в облачной функции

guillaume blaquiere
2 июля 2021 в 13:32
0

Прочтите мой предыдущий комментарий. Вы получите только 1-й запрос. последующие будут кешироваться, и вы их не получите -> это принцип CDN: обслуживать напрямую, не связываясь с бэкэндом

Jadson Lucena
3 июля 2021 в 01:06
0

Итак, что вы предлагаете в случае, когда вам нужно знать ближайший к пользователю регион?

Ответы (1)

avatar
guillaume blaquiere
3 июля 2021 в 15:51
0

Если вы хотите узнать регион пользователя в своем бэкэнде при обработке запроса, вы не можете использовать CDN. Вам необходимо разрешить отправку всех запросов в ваши облачные функции.

Если вы хотите иметь наименьшую задержку, вы можете развернуть одну и ту же функцию в нескольких (всех?) регионах GCP и поставить перед ними Load Balancer с бессерверным NEG.

Таким образом, запрос будет обслуживаться ближе всего к запрашивающему, и вы сможете получить IP-адрес запрашивающего и определить по нему регион. Вы также можете полагаться на регионы Cloud Functions, чтобы знать, какой регион обрабатывает запрос пользователя, не зная точного местоположения IP-адреса пользователя.

Jadson Lucena
10 августа 2021 в 15:17
0

Я исследовал пользовательские заголовки и сознательно нашел этот ресурс: cloud.google.com/load-balancing/docs/… По-видимому, это позволяет вам определять динамические заголовки http с использованием предопределенных переменных Google: cloud.google.com/load-balancing/docs/…