从Golang调用Python任务

时间:2017-04-06 19:59:13

标签: python go concurrency server microservices

我一直在为股市分析构建大数据应用程序。每天约5TB的记录。我使用Golang进行数据转换/计算并在Cassandra / MySQL中保存。但是Python有很好的数据库分析Pandas,Spark等,但是多核处理没有简单的方法,需要花费很多时间。

所以,我想在Golang中同时调用python数据分析任务。一种方法是直接执行命令行任务,但我认为应该有更多可扩展的解决方案。也许Golang和Python之间有通信库。我想也许我应该创建Python Flask的多个服务器并为它们提供任务。速度很重要,但我可以牺牲一些来简化解决方案。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

如您所建议的那样,将您的应用拆分为多个服务器,需要进行一些权衡。

从好的方面来说,拆分它可以在负载平衡方面提供更大的灵活性。换句话说,如果您的烧瓶服务器负担过重,您可以随时旋转一些并使用负载平衡器进行水平扩展。当然,这假设您在这些烧瓶服务器上所做的任何事情都可以并行完成(取决于您的实际业务逻辑)。

它还提供高可用性:消除一个潜在的单点故障。

然而,这种“微服务”方法确实会产生一些开销

  • 要编写更多代码,因为现在你正在编写2种服务器
  • 一些网络开销,因为现在你通过网络进行通信而不是函数调用。
  • 更多机器可以旋转(虽然你可以在容器中运行所有东西,如果你不需要额外的处理能力,它们都可以在同一台机器上运行)

您可以考虑使用google-protobuff序列化/反序列化邮件。它与语言无关并节省了一些网络开销。它不像发送json那么容易,但如果效率至关重要,那么它可能值得一试。另外,它支持python和go。