Singleton Apache Thrift客户端比多个客户端实例更好吗?

时间:2017-02-28 13:56:12

标签: c# client-server thrift

我有一个thrift服务器应用程序和另一个通过apache thrift与之通信的客户端应用程序。

3个问题:

1 - 在我的客户端应用程序中,在创建thrift客户端并打开传输进行通信时,通过保持传输,最好是在整个应用程序生命周期中使用相同的客户端并作为单例传输(也称为始终打开)打开,或者最好创建一个新客户端,打开传输,然后在每次调用thrift服务器时关闭它?

2 - 为什么?

3 - 在性能方面,它是否会改变任何事情(考虑通过同一客户端打开和关闭传输和数据吞吐量的开销)?

1 个答案:

答案 0 :(得分:3)

' 1& ' 2。具有I / O堆栈(proto / trans)的单个Thrift客户端表示单个连接。设置和拆卸相对昂贵的连接,所以如果你经常使用客户端,保持它通常是一个好主意。但是,客户端对象通常不是线程安全的,因此如果您的应用程序是多线程的,则需要管理对客户端的访问,以便序列化RPC请求/响应操作。

' 3。如果经常发出RPC请求,打开和关闭连接会增加很多开销,所以通常最好保持连接打开。另一方面,如果您很少发出RPC请求,那么保持连接打开会在您不使用它们时占用服务器上的资源,因此最好为每个稀疏请求打开和关闭。

我在真空中的建议是每个独立的线程创建一个客户端,但真正的答案是试验每个案例并测量结果,选择最快/最便宜的结果。