ochinchina / thriftproxy

a thrift proxy for thrift binary protocol
Apache License 2.0
16 stars 7 forks source link

关于thriftproxy一些问题咨询 #12

Open e421083458 opened 4 years ago

e421083458 commented 4 years ago

关于thriftproxy一些问题咨询: 1、thriftproxy相对于 tcpproxy 优势是啥呢?你是读取的 message 然后你又发送出去了感觉没啥特别之处啊。能说一下有啥特殊管控之处吗? 2、thriftproxy发起一个请求时都是NewClient的,这里需要做个请求连接池,提高相应速率吗?

ochinchina commented 4 years ago

如果你的系统只有一个thrift server,tcpproxy和thriftproxy在功能上是等价的。但是如果有系统中有多个功能相同的thrift server, 如果没有thrift proxy,client程序需要跟每个thrift server都建立TCP连接,一个请求发往哪一个thrift server完全由client自己控制,比较繁琐,容易出错。有了thrift proxy,client程序只需跟thift proxy建立TCP连接,由thrift proxy跟后端的一堆thrift server建立连接,一个thrift请求会round-robin地分发给后端的某一个thrift server处理。如果在处理一个请求的时候,thrift server挂了,thrift proxy会把这个未能完成的请求转发给其他的thrift server处理。

NewClient生成的对象代表一个thrift client,它是一个TCP长连接,不是每个thrift请求都会建立新的连接的。

如果你的系统是部署在Kubernetes环境中,thrift proxy可以自动发现后端的thrift server。如果后端的thrift server个数调整了,thrift proxy也会自动发现这个变化并做出调整。

e421083458 commented 4 years ago

我理解你说的thrift proxy,主要是做tcp连接池提高效率以及thriftp server容错处理。你的解包也是为了做容错处理而设置的。如果容易单服务器错误的话。其实也可以不解包。直接用tcp吧? NewClient生成的长连接,这个是不是要考虑定时检活?

ochinchina commented 4 years ago

如果只有一个服务器的话,直接用tcp就ok。 对生成的到服务端的长连接tcp没有方法检活。所以另外设计了liveness机制来检查服务端的状态。

e421083458 commented 4 years ago

长连接tcp没有方法检活,是因为终端服务器没法直接发ping类似的请求,如果发了任意请求。可能会导致长连接断掉是吧? liveness是从链接池里取链接去请求,如果挂了直接剔除吗?

ochinchina commented 4 years ago

如果发出的请求不是thrift格式,连接会断掉的。liveness的IP是链接池里的IP,端口和协议是配置的