2017-11-13 2 views
2

私たちは双方向ストリーミングエンドポイントと単項エンドポイントを持つpythonでgrpcサービスを構築しています。Grpcサーバースケーリング(双方向無限ストリーミング)

タイムアウトがなく、ストリームが期待どおりに動作するようにストリームを永久に保存したい場合は、展開にkubernatesとdockerを使用しています。

しかし、私たちはサービスのスケーリングの問題、無限のストリーミングgrpcサーバの規模をどのように調整するか、いくつかの要求に基づいてスケールすることはできませんが、要求は1つしかなく、フレームとしてデータが送信されます。

このサービスをどのように拡張できますか?今すぐワーカースレッドプール内の最大スレッド数は100です。

1つの簡単な解決策は、CPU負荷とメモリ使用量に基づいて最大ワーカースレッドに高い数値とスケールを与えることです。

これを行うにはより良い方法があります。

+0

@nathanielmanistaatgoogleこれに関するご提案はありますか?これは正しい使用法ですか? – Samarendra

答えて

1

今のところ私たちは良い答えがありません:RPCあたりのスレッドの仮定はかなり早く深くgRPC Pythonに組み込まれました。「どちらの側にも「長寿命のRPCは使用例です。

私たちはより良い解決策に取り組んでいますが、今後はそうなるでしょう。

ワーカースレッドの数を増やすことは、間違いなく正解と思われます。あなたのスレッドがほとんどの時間アイドル状態になるので、それがどのように機能するか聞くのは非常に興味があります(そうですか?)。

多分のオプションはうまく働くかもしれないfutures.ThreadPoolExecutorのインタフェースを実装していますが、それは実際には非常に多くのより多くのRPCサービスを提供するためにいくつかの洗練された内部の多重化を行うオブジェクトを設計するだろうとしてみてください。それはan idea that I've had on my mind for a whileですが、自分自身をテストすることに慣れていません。

+0

現在、私たちが持っているオプションは、より多くのスレッドにまたがり、開いている接続の数に基づいてサービスを拡張することですが、最小スレッドが複数の接続を処理できるように多重化を行うことができれば面白いでしょう。それを探検する – Samarendra