我们在Node.js灵活环境中的Google App Engine上托管了一个项目,用于从传感器收集数据。
我们收到大约10个POST /collect
个请求/秒,大小可能非常不同,但99%的时间都是非常小的请求(大约100B到12MB)。
查看收集的数据,我们发现每隔一段时间(显然每天5-6次)我们会错过一些数据。
在投资时,我们将代理(仍在App Engine上),我们称之为 PROXY 在我们的服务器前面,我们称之为 SERVER ,以便成为能够跟踪全流程并查看我们可能遇到的所有错误和问题。
我们注意到,当数据丢失时, PROXY 已将数据发送到 SERVER 并收到502 Bad Gateway,这会显示在 PROXY < / strong>的日志(在我们在请求到达代理时以及服务器回复代理时打印的代理中):
07:11:15.000 SENSOR_ID response: 502 Bad Gateway
07:11:15.000 SENSOR_ID request
然后我们浏览了 SERVER 的日志,发现在同一时间戳,我们得到以下内容:
07:11:15.000 [error] 32#32: *84209 upstream prematurely closed connection while reading response header from upstream, client: 130.211.1.151, server: , request: "POST /collect HTTP/1.1", upstream: "http://172.17.0.1:8080/collect", host: "ourprojectid.appspot.com"
我们的第一个假设是,有大量数据的大请求导致服务器因任何原因而失败,但事实并非如此,而是这些失败事件与请求的大小之间没有关联。 / p>
我们正在使用的堆栈:App Engine实例(在nginx上运行)和Nodejs Flexible Environment。
我们没有任何线索可以进一步调查。