2017-04-06 99 views
0

我一直在爲股市分析構建大數據應用程序。每天大約有5TB的記錄。我使用Golang進行數據轉換/計算並保存在Cassandra/MySQL中。但是Python有非常好的用於數據分析的Pandas,Spark等庫,但是多核處理沒有簡單的方法,需要花費很多時間。從Golang調用Python任務

因此,我想在Golang中同時調用python數據分析任務。一種方法是直接執行命令行任務,但我認爲應該有更多可擴展的解決方案。也許有Golang和Python之間的通信庫。我想也許我應該創建Python Flask的多個服務器併爲它們提供任務。速度是重要的,但我可以犧牲一些簡潔的解決方案。有任何想法嗎?

回答

0

正如您所建議的那樣,將您的應用程序分割到多個服務器中會帶來一些折衷。

從好的一面來看,將它拆分可以爲您提供更多的負載平衡方面的靈活性。換句話說,如果您的服務器服務器負載過重,您可以隨時旋轉幾個並使用負載均衡器水平擴展。當然,這裏假定無論你在服務器上做什麼,都可以並行完成(取決於你的實際業務邏輯)。

它還提供高可用性:您可以消除一個潛在的單點故障。

然而,這種「微服務」的做法肯定會引起一些開銷

  • 更多的代碼來寫,因爲現在你寫2個類型的服務器
  • 一些網絡開銷,因爲現在你上通信網絡而不是函數調用。
  • 更多的機器旋轉(雖然你可以運行在容器中的一切,他們都可能是在同一臺機器上,如果你不需要額外的處理能力)

你可以考慮使用google-protobuff序列化/反序列化消息。它的語言不可知並且節省了一些網絡開銷。它不像發送json那麼簡單,但是如果效率是最重要的,那麼可能是值得的。加上它在Python和Go中都受到支持。