2017-04-06 11 views
0

私は株式市場分析のために大きなデータアプリケーションを構築しています。 1日あたり約5TBのレコード。私はGolangを使ってデータ変換/計算とCassandra/MySQLの保存を行っています。しかし、PythonはPandas、Sparkなどのデータ解析には非常に優れたライブラリを持っていますが、マルチコア処理には簡単な方法はなく、時間がかかります。GolangからPythonのタスクを呼び出す

私はGolangで同時にPythonデータ解析タスクを呼びたいと思います。 1つの方法は、直接コマンドラインタスクを実行することですが、私はそこには、よりスケーラブルなソリューションがあると思います。たぶんGolangとPythonの間のコミュニケーションのためのライブラリがあります。おそらく私はPython Flaskの複数のサーバーを作成し、それらにタスクを与えるべきだと思った。スピードは重要ですが、私は簡潔な解決のためにその一部を犠牲にすることができます。何か案は?

答えて

0

あなたのアプリを複数のサーバに分割することは、お勧めのように、いくつかのトレードオフをもたらします。

プラス側では、これを分割することで、負荷分散の観点から柔軟性が向上します。言い換えれば、フラスコのサーバーに負荷がかかると、ロードバランサを使用して、さらに数回転して水平方向にスケールすることができます。もちろん、これは、フラスコサーバー上で何をしているのかは、あなたの実際のビジネスロジックに依存して、並行して行うことができることを前提としています。

高可用性も提供されています.1つの潜在的な単一障害点を排除します。今、あなたは今、あなたは上で通信していることから、サーバ

  • いくつかのネットワークのオーバーヘッドの2種類を書いているので、

    しかし、この「microservice」アプローチは、いくつかのオーバーヘッド書くため

    • より多くのコードを招くん関数呼び出しとは対照的にネットワーク。
    • よりスピンするマシン(あなたは、コンテナ内のすべてを実行することができ、あなたは余分な処理能力を必要といけない場合、それらはすべて、同じマシン上に置くことができますが)

    あなたは/デシリアライズをシリアライズするgoogle-protobuffを使用して検討することもできメッセージ。その言語に依存せず、ネットワークオーバーヘッドの一部を節約します。それはjsonを送るほど簡単ではありませんが、効率が最も重要であれば、それは問題の価値があるかもしれません。それはPythonとGoの両方でサポートされています。

  • 関連する問題