networking - 如何管理 HTTPS 连接池?
问题描述
考虑一个访问远程 HTTPS 服务器、在服务器上的 URL 发送 JSON 格式请求的 POST 并接收 JSON 格式答案的应用程序。服务器不支持HTTP/2多路复用。
有许多请求,工作负载变化很大(从空闲到数百 TPS)。JSON 消息的大小为 1 kbyte。客户端和服务器通过证书+私钥进行身份验证。这些请求可以被认为是独立的(特别是,对于使用相同客户端证书打开的所有 HTTPS 通道,服务器将请求视为相同)。
HTTP/1.1 不允许*多个并发 POST 请求通过同一个连接。因此吞吐量不能超过N/(Tr+Ts) TPS,其中N是打开的 HTTPS/TLS 通道使用的数量,Tr是网络往返延迟,Ts是服务器端的处理时间(在由于数据库访问和其他因素,在低负载下大约 30 毫秒)。打开一个 HTTPS 连接至少要花费4 Tr,并且双方都有相当大的 CPU 时间。看起来需要一些东西来管理客户端的 HTTPS 连接池。
这个问题一般是怎么处理的?
什么是常见的库或后台守护程序/服务,根据需要自动打开新的 HTTPS 连接,尽可能重用它们?
如果在服务器变得无响应时检测到它会很好,并处理回退到不同 URL 的备份服务器,当它再次启动时返回到主服务器。
注意:下一步将是负载平衡,但是我的负载平衡层必须在一定程度上处理请求之间的关联,因为它们不是完全独立的(尽管服务器可靠地检测到将依赖请求发送到错误的服务器)。
[*] 由于RFC 2616的解释方式,有人告诉我.
解决方案
推荐阅读
- java - 如何在spring boot中自动设置基本url的后缀
- sql-server - 链接服务器连接错误(Microsoft SQL Server,错误:7303)
- laravel - laravel api 电子邮件验证链接给出未经身份验证的错误
- python - 在python中比较日期
- laravel - 命名空间 laravel/eloquent 迁移表条目
- docker - 如何修复 gitlab-ci 中的“sqlite3.OperationalError:无法打开数据库文件”错误?
- python - 使用重复单元格值作为键将 pandas DataFrame 转换为字典
- zpl - 数据矩阵代码分隔符 Zebra 打印机
- flutter - 如何从名为 Next 的“bottomNavigationBar”按钮滑动到下一个选项卡?
- tcl - 如何使用 tcl 从路径中删除最后一个子目录?