Salesforce:为什么我们在 Einstein Analytics 中放弃 Python 转而使用 Google 的 Go 语言

Salesforce 最近斥资 157 亿美元收购了分析公司 Tableau,以加强自己的 Einstein Analytics 平台显然,Salesforce 认为分析对其未来至关重要。 

但在该公司于 2017 年推出 Einstein Analytics 之前,它对后端进行了大修,并几乎完全使用谷歌流行的 Go 或“Golang”编程语言对其进行了重建。

参见: 六种按需编程语言:入门(免费 PDF)

根据 Salesforce 首席架构师 Guillaume Le Stum 的说法,在 Salesforce 推出 Einstein Analytics 之前,最终成为 Einstein Analytics 的查询引擎和数据集创建工具是用 C 语言编写的,以“提高性能”和提供解析查询等功能的 Python 包装器和 REST API服务器。 

“本质上,该产品旨在兼具两全其美,” Le Stum 在 Stack Overflow 上的一篇文章中解释道。 

“Python 非常适合快速编写更高级别的应用程序,但并不总能提供企业级所需的高性能。C 创建高性能可执行文件,但添加功能需要更多时间。”

Python 当然在开发人员中非常受欢迎,包括Netflix 的工程师,他们在其庞大的流媒体基础设施的每个部分都使用 Python。  

但在发布之前,Le Stum 表示 Einstein Analytics 的内部开始显示性能下降,因为任何不属于核心查询引擎的新功能都被加载到 Python 包装器中。 

因此,虽然 Salesforce 可以使用 Python 快速开发和部署功能,但最终这种方法使其变得迟缓。 

“Python 不能很好地处理多线程,因此要求包装器做的越多,它的性能就越差,”Le Stum 解释道。 

另一方面,Go 是为适合 Google 生产系统的大型应用程序构建的,因此 Salesforce 决定将 Einstein Analytics 从混合 C-Python 应用程序转变为完全 Go 应用程序。   

Le Stum 还指出了使用 Python 的另外两个缺点,尽管它有一些优点。 

“首先,Python 使用松散类型,这对于一个快速开发新想法并将其投入生产的小团队来说非常有用——但对于一些客户为之支付数百万美元的企业级应用程序来说,它就不那么好了,”他写道。

“其次,我们预见到一个巨大的依赖噩梦即将到来,因为部署正确的 Python 库、版本和文件将成为一件苦差事。所以在 2014 年,我们决定将 Python 包装器移植到 Go。” 

参见:微软:我们希望你免费学习 Python 编程语言

Le Stum 表示,Go 的优势包括其内置工具、快速编译时间和部署、简单的故障排除,以及它使代码易于理解的方式。 

“在 Python 中,你可以编写超级优雅的列表解析和几乎是数学的漂亮代码。但如果你不编写代码,那么这种优雅就会以牺牲可读性为代价,”他解释说,并指出在企业软件中,工程师花费更多时间阅读代码而不是编写代码。 

与查询引擎的 C 相比,该小组仍然对 Go 的性能存有疑问。然而,用 Go 编写的概念证明使他们能够继续进行,并且 Einstein Analytics 的 Go 版本于 2018 年全面上市。 

一大优势是 Go 的跨平台特性使移植代码变得容易。 

“如果我们在移动应用程序中需要任何此类代码,我们可以将其交叉编译到 iOS 或 Android 上,这样就可以正常工作,”Le Stum 指出。 

Einstein Analytics 中唯一不是用 Go 构建的部分是集群管理器,它是用 Java 编写的。 

更新:Salesforce 已要求 ZDNet 指出该公司最初的 Stack Overflow 文章中的一个不准确之处。虽然 Salesforce 确实将 Einstein Analytics 查询引擎从 C-Python 混合体移植到了 Go,但 Einstein Analytics 是基于 Go 和 Java 之外的其他语言构建的,尽管 Salesforce 拒绝透露这些其他语言是什么。