请考虑以下应用程序:访问远程HTTPS服务器,在服务器上的URL上发送JSON格式请求的POST并接收JSON格式的答案。该服务器不支持HTTP/2多路复用。
有很多请求,工作负载千差万别(从空闲到数百TPS)。 JSON消息的顺序为1 KB。客户端和服务器通过证书+私钥进行身份验证。可以认为这些请求是独立的(特别是,对于使用相同客户端证书打开的所有HTTPS通道,服务器将请求视为相同)。
HTTP / 1.1不允许通过同一连接的 * 多个并发POST请求。因此,吞吐量不能超过 N /(Tr + Ts) TPS,其中 N 是打开的HTTPS / TLS通道正在使用中, Tr 是网络往返延迟, Ts 是处理时间服务器端(由于数据库访问和其他因素,在低负载下约为30毫秒)。打开HTTPS连接至少要花费 4Tr ,并且双方的CPU时间都相当大。似乎需要一些东西来管理客户端的HTTPS连接池。
通常如何处理此问题?
什么是常见的库或后台守护程序/服务,它们会根据需要自动打开新的HTTPS连接,并在可能的情况下重新使用它们?
如果能在服务器无响应时检测到该错误,并以不同的URL处理回退到备用服务器,并在再次启动时返回到主服务器,那就很好了。
注意:下一步将是负载平衡,但是我的负载平衡层必须在某种程度上处理请求之间的关联性,因为它们不是完全独立的(服务器会可靠地检测到将依赖的请求发送到错误的服务器,虽然)。