【问题标题】:Call Python tasks from Golang从 Golang 调用 Python 任务
【发布时间】:2017-09-02 01:08:36
【问题描述】:
我一直在构建用于股市分析的大数据应用程序。每天大约 5TB 的记录。我使用 Golang 在 Cassandra/MySQL 中进行数据转换/计算和保存。但是 Python 有很好的数据分析库 Pandas、Spark 等,但是多核处理没有简单的方法,需要很多时间。
所以,我想在 Golang 中同时调用 python 数据分析任务。一种方法是直接执行命令行任务,但我认为应该有更多可扩展的解决方案。也许有用于 Golang 和 Python 之间通信的库。我想也许我应该创建多个 Python Flask 服务器并给它们分配任务。速度很重要,但我可以牺牲一些来获得简洁的解决方案。有任何想法吗?
【问题讨论】:
标签:
python
go
concurrency
server
microservices
【解决方案1】:
按照您的建议,将您的应用程序拆分为多个服务器会带来一些取舍。
从好的方面来说,将其拆分可为您在负载平衡方面提供更大的灵活性。换句话说,如果你的烧瓶服务器负担过重,你总是可以再旋转一些,并使用负载均衡器进行水平扩展。当然,这假设您在这些烧瓶服务器上所做的任何事情都可以并行完成(取决于您的实际业务逻辑)。
它还提供高可用性:您消除了一个潜在的单点故障。
但是,这种“微服务”方法确实会产生一些开销
- 要编写更多代码,因为现在您要编写 2 种服务器
- 一些网络开销,因为现在您通过网络而不是函数调用进行通信。
- 更多机器可以旋转(尽管您可以在容器中运行所有内容,并且它们都可以在同一台机器上,如果您不需要额外的处理能力)
您可以考虑使用google-protobuff 序列化/反序列化消息。它与语言无关,并节省了一些网络开销。它不像发送 json 那样容易,但如果效率是最重要的,那么它可能是值得的。此外,它在 python 和 go 中都受支持。