我想在发送请求时尽可能重用与上游主机的连接,但是我不确定我的实现是否符合Envoy的线程模型,因此我只是想获得一些反馈,然后再继续。
我现在已经通过以下方式实现了它:在每个下游请求中,我尝试查看是否已经与我们要发送到的主机建立了连接,如果存在,我只是使用该连接,如果没有,则创建一个新连接并将其存储在地图中,以便以后可以重新使用。
但是,如果我正确理解了线程模型,则连接应仅绑定到一个工作线程,而我在上面解释的实现似乎违反了该规则,对吗? (因为任何辅助线程都可以获取存储的连接。)
Redis过滤器示例似乎重用了连接,并且似乎使用TLS来做到这一点(它分配了一个插槽并将其设置为ThreadLocalObject,该ThreadLocalObject保留实现以发送请求和缓存连接)。
虽然插槽的主要目的不是将全局信息(例如,配置更改,集群成员资格更改等)传播到工作线程吗?如果是这样,我们为什么要使用它来处理单个请求?
我只是想找到解决此问题的最佳方法,如果能得到一些建议,我将不胜感激。