я читаю Проектирование надежности сайта, книга о том, как Google управляет своей программной инфраструктурой. В главе 2 есть раздел, в котором описывается время жизни запроса к сервису Google. Основные моменты:
[...] сначала пользователь указывает в своем браузере на shakespeare.google.com. Чтобы получить соответствующий IP-адрес, устройство пользователя разрешает адрес со своим DNS-сервером (1).
[...] Браузер подключается к HTTP-серверу на [решенный] IP. Этот сервер (названный Google Frontend или GFE) является обратный прокси, который завершает TCP-соединение (2). GFE ищет, какая услуга требуется [...], и отправляет этому серверу RPC, содержащий HTTP-запрос (3).
[...] Серверная часть передает protobuf, содержащий результаты, на внешний сервер Shakespeare, который собирает HTML и возвращает ответ пользователю.
Вот схема процесса:
Меня смущает та часть, где обратный прокси завершает TCP-соединение. Если TCP-соединение разорвано, как вообще можно отправить ответ клиенту? В тексте говорится, что интерфейсный сервер (на картинке с именем Application Frontend) возвращает ответ пользователю. Как это может быть, если у внешнего сервера нет открытого соединения с клиентом? Возможно, я неправильно понял, и автор хотел сказать, что обратный прокси завершает TCP-соединение после он пишет ответ фронтенд-сервера клиенту? Это объяснение соответствовало бы определению обратного прокси.
TL; DR: Может кто-нибудь объяснить, как отклик достается клиенту?
«Завершить» в этом случае - это когда клиентский запрос получен и перенаправлен во внешний интерфейс приложения. Приложение возвращает свой ответ, который затем отправляется в качестве ответа клиенту, поэтому правильно сказать, что запрос из вашего браузера достигает GFE на вашей диаграмме, поскольку TCP-пакеты переписываются для передачи в сеть Google, направляемую в запрошенное приложение.