我在读站点可靠性工程,一本关于 Google 如何管理其软件基础设施的书。第 2 章有一节描述了对 Google 服务发出请求的生命周期。主要内容如下:
[...] 首先,用户将浏览器指向 shakespeare.google.com。为了获取相应的 IP 地址,用户的设备会使用其 DNS 服务器 (1) 解析该地址。
[...] 浏览器连接到 [ 上的 HTTP 服务器已解决的] IP。此服务器(称为 Google Frontend,简称 GFE)是终止 TCP 连接的反向代理(2)GFE 查找需要哪个服务 [...] 并向该服务器发送包含 HTTP 请求的 RPC(3)。
[...] 后端将包含结果的 protobuf 交给莎士比亚前端服务器,组装 HTML 并将答案返回给用户。
我对反向代理终止 TCP 连接的部分感到困惑。如果 TCP 连接终止,怎么能将响应发送回客户端呢?文本说前端服务器(在名为应用程序前端的图片中)将响应返回给用户。这怎么可能呢,因为前端服务器与客户端没有打开连接?也许我误解了,作者想说反向代理终止 TCP 连接后将前端服务器的响应写入客户端?这个解释符合反向代理的定义。
总结:有人可以解释一下响应是如何到达客户端的吗?
答案1
在这种情况下,“终止”是指接收客户端请求并将其转发到应用程序前端。应用程序返回其响应,然后将其作为响应发送给客户端,因此可以说,来自浏览器的查询只会到达您图表中的 GFE,因为 TCP 数据包被重写以传递到 Google 的网络,并被定向到请求的应用程序。