您当前的位置:首页 > 互联网百科 > 大数据

大数据开发语言怎么选?Scala 还是 Go

时间:2020-11-24 13:08:52  来源:  作者:
大数据开发语言怎么选?Scala 还是 Go

> Photo by Hendri Sabri on Unsplash

介绍

自从我参与DevOps和大数据以来,我一直在使用两种出色的但完全不同的编程语言:Go和Scala。

Scala是一种较旧且更成熟的编程语言,已在并发编程和大数据处理等领域找到了自己的定位。 另一方面,Go是google为克服C ++的批评而创建的一种更新,更简单的语言。 设计考虑多核处理器的语言。

两者都是出色的语言,可以为并发应用程序和流处理实现出色的性能,但是它们的设计却大不相同。在本文中,我将尝试为您简要介绍这两种语言,它们的优缺点,并回顾一些实际的用词情况,在这些情况下,我们将推荐一种语言而不是另一种语言。

简而言之Scala

Scala是一种由学者创建的编程语言,它是在JVM上运行的JAVA的第一种替代方法。 它定义为:

Scala是一种现代的多范式编程语言,旨在以简洁,优雅且类型安全的方式表达常见的编程模式。[1]

Scala既面向功能又面向对象,提供了两全其美的优势。 它具有定义程序的灵活方式,并且由您决定如何描述它们:从纯函数式编程到纯面向对象的编程。

像Java一样,Scala是面向对象的:

从每个值都是对象的意义上讲,Scala是一种纯面向对象的语言。对象的类型和行为通过类和特征来描述。[1]

它还为功能编程和强大的静态类型系统提供支持。 与Java不同,Scala具有功能编程语言的许多功能,例如Scheme,Standard ML和Haskell,包括currying,类型推断,不变性,惰性评估和模式匹配。 它还具有一个高级类型系统,该系统支持代数数据类型,协方差和对数,高阶类型(但不包括高阶类型)和匿名类型。

从每个功能都是一个值的意义上讲,Scala也是一种功能语言。 Scala提供了用于定义匿名函数的轻量级语法,它支持高阶函数,它允许嵌套函数,并支持currying。[1]

大数据开发语言怎么选?Scala 还是 Go

 

Java中不存在的Scala的其他功能包括运算符重载,可选参数,命名参数和原始字符串。 相反,Scala中没有的Java功能就是检查异常,事实证明这是有争议的。

在其他用例中,Scala在大数据中被大量使用。 诸如Twitter之类的公司转移到Scala,特别是因为更好的并发支持。 Scala功能强大,但很难学习,并且仍然存在与Java的兼容性问题。

Scala使用的两个关键驱动因素是基于用于并行编程的actor系统的Akka框架和用于大数据的Spark处理引擎。 由于其学术性质,与Akka或Spark以外的其他语言相比,Scala在实际单词中没有发现太多用法。 尽管它在金融机构中大量使用。

Scala 的优点

· 在JVM上运行。 它具有多年来构建的所有JVM优化功能,并且与Java兼容。

· 非常简洁,与Java或GO相比,它需要更少的样板代码。

· 函数式编程和面向对象。

· 类型系统非常强大。 您可以为您的库构建自定义DSL,在编译时执行检查等等。

· 函数式编程的所有优点。

· 基于参与者Actor模型的Akka生态系统使其成为并发系统的绝佳选择。

· 强大的构建工具。

· 多才多艺。 Scala可用于表达任何类型的问题。

Scala 的缺点

· 复杂。难以学习和掌握。通常由高级程序员使用。

· 太广泛了,表达同一件事的方法有一百种,每个Scala开发人员都有自己的风格,并且在大型项目中很难保持代码一致性。

· Java的一些兼容性问题;同样,如果您需要使用Java库,那么它将剥夺Scala的优势。

· 编译速度慢。尽管有诸如Bloop之类的工具可以缓解问题。

· 它继承了云原生应用程序的JVM问题,例如大型容器,缓慢的警告时间,难以调整,部署缓慢等。

· 尽管用途广泛,但Scala只是发现了某些场景,因此并未被广泛采用。

用例

· 大数据和分析。由于其强大的类型系统和可扩展性,大数据领域中的许多工具(例如Spark)都使用Scala。它是数据工程师以及大型流和批处理引擎的首选语言。

· 并发系统和实时应用程序。 Akka框架以并发系统的可伸缩性而闻名,并广泛用于使用JVM的交易服务和其他高度并发的系统。

· 高度并发的API。Play框架提供了一个高度并发的Web框架,以构建由Akka支持的应用程序和API。

· 巨石架构。 对于大型整体应用程序(甚至是分布式应用程序),Scala是绝佳的选择。 使用Akka群集,您可以在单个应用程序内创建高度分散的应用程序。

· 通常,Scala用于为特定领域(例如Akka或Spark)构建框架和库。

简而言之

Go是另一种野兽。与Scala相比,它不那么优雅,功能强大或简洁,但它是为特定目的而构建的,并且做得非常好。

Go由Google创建,并且在语法上与C类似。它的目标是通过添加内存安全性,垃圾回收,结构化类型来克服C ++中存在的不安全操作。它非常容易学习和使用。它是为多核计算机而构建的,以最大程度地提高并发程序的并行性。它使用称为Go Routines的非常轻量级的绿色线程进行并发编程。

Go可以快速编译为机器代码,但具有垃圾回收的便利性和运行时反射的功能。这是一种快速的,静态类型的编译语言,感觉就像是一种动态类型的解释语言。[2]

Go很小,但是它涵盖了许多用例,例如微服务,流处理,CLI等。 Golang为在不同平台上生成二进制文件提供了出色的支持,而无需在目标上安装Go。 由于二进制文件小而有效,因此非常适合使用Containers打包的云本机应用程序。 您的应用程序容器可以打包到一个很小的容器(〜5–10MB)中,只需几秒钟即可部署,这使其成为比JVM语言更好的微服务选择。 有关更多信息,请查看我有关在Kubernetes中部署Go Microservices的文章。

大数据开发语言怎么选?Scala 还是 Go

 

Go 的优点

· 超快速的编译器,感觉就像是一种解释语言。很棒的开发人员经验。快速的开发过程和提高的生产率。

· 简单安全,我对Go的钟爱是通常只有一种表达问题的方式,这可以加快开发,代码审查以及整个开发过程的速度。

· 非常适合初级和高级开发人员。 由于它不需要虚拟环境,因此非常容易学习和采用。

· 云原生应用程序和Kubernetes的完美选择。由于体积小,没有预热时间和速度。

· 借助Go Routines,并发变得容易。

· 伟大的标准库,其中包括Web服务器。

· Go可以用于各种场景:CLI,Web应用程序,流处理等。

· 资源使用率极低。您可以在一台服务器上运行数百万个Go例程。与JVM相比,它使用的RAM和CPU很少,因此运行起来便宜得多。

Go 的缺点

· 它不够简洁,很难保持代码干燥。

· 太简单的基本事物(如泛型)在Go中不可用,尽管很快就会支持。

· 这是一种相对较新的语言,没有太多的库或教程。

· 依赖管理有点反常,很难管理,但是自从添加go mod以来,它已经得到了改进。 好消息是,go mod是语言的一部分,而不是像sbt这样的单独项目,尽管sbtis功能更强大。

· 错误处理很麻烦。

· 与Scala相比,它不够优雅,强大和灵活。

· 与Scala相比,Go有点不成熟。

用例

· CLI和脚本:像kubectl这样的大多数CLI使用Go。

· Web应用程序。由于它是高度并发的,并且不需要太多资源,因此非常适合处理HTTP请求。

· 流应用程序。 Go可以使用Go例程快速处理数百万个事件。 它是Scala中Akka流的竞争对手。

· 微服务。 由于体积小,速度快且具有监视功能,Go是云原生微服务的理想选择。

· 无服务器和云应用程序。Go是无服务器功能的理想选择,尤其是在Google Cloud中。

Scala vs Go

Scala 编程语言是强类型,具有垃圾回收器,它们安全,高度并发,并且每秒可以处理数百万条记录。

对于流处理,Go更易于使用,但依赖于发布/订阅系统(例如Kafka)和NoSQL数据库(例如Cassandra)。 Akka本身就是一头野兽,可以自己管理大量请求而没有任何依赖关系,它还提供了更多这样的背压。

对于Web应用程序,Play框架更适合有状态的Web应用程序或寿命长的应用程序,在这些应用程序中,JVM有足够的时间来优化应用程序。 Scala非常适合迷你服务或整体应用。 如果您需要与Akka集成,这也是一个不错的选择。 另一方面,GO更适合微服务,云本机应用程序和无服务器功能。 对于云中的无状态API,我会使用GO,因为它更便宜,更容易。

Go提供了强大的支持gRPC为内部微服务提供了绝佳的选择,这些微服务可以以流的方式快速使用。

对于大数据,Scala或Python是最佳选择。 GO在大数据世界中仍处于起步阶段。

通常,Go的运行和租赁成本较低。 因此,如果成本是一个问题,请研究GO。 另一方面,Scala开发人员往往是非常好的工程师,这也为组织带来了价值。

随着应用程序的增长,GO源代码将变得越来越难以维护,因此我不建议将其作为整体使用,对于更稳定,规模更大的项目,Scala是更好的选择,尤其是对于更传统的企业。

性能

这是一个棘手的问题,如果您在Google vs GO的性能方面会找到几篇文章,并且根据测试结果会有所不同。 刚开始,GO似乎在简单的用例上表现更好,但在实际情况下,Scala以及特别是Play Framework确实赶上了JIT JVM优化,该优化在运行时会调整字节码添加优化。

对于微服务,无状态应用程序和容器化应用程序,GO将更快,更轻量,这是一个巨大的优势。 通常,如果成本对您来说很重要,那么GO将占上风。 对于复杂的应用程序,整体式状态处理,Scala是更好的选择。

大数据开发语言怎么选?Scala 还是 Go

 

> GO vs Play REST Get Performance, source: https://medium.com/ymedialabs-innovation/rest-api-performance-comparison-between-golang-and-play-991a8f4040de

对于流处理,这是相同的故事。 Akka功能强大且优雅,具有庞大的生态系统并具有更多功能,但使用,开发和优化都很复杂。 如果您有一支由Akka开发人员组成的优秀团队,他们可以编写一个单例文件,比GO更快地处理事件。 但是,GO扩展非常简单。

推荐建议

如果您是开发人员…

· 如果您是初级开发人员和/或没有Java经验但具有Python或C ++经验,请学习GO。

· 如果您想在云上,启动和出色的项目中工作,请学习GO。

· 如果您花不起数年的时间来学习一门新语言,请学习GO。

· 如果您是开发流应用程序和API的后端工程师,请学习GO。

· 如果您拥护DevOps文化,请学习GO。

· 如果您使用的是Google Cloud,请学习GO。

· 使用GO编写脚本和命令行工具,POC或超快速API。

· 如果您是高级开发人员和/或Java开发人员,请学习Scala。

· 如果您已经使用JVM和/或在本地运行,请学习Scala。

· 如果您要使用Akka和Spark照顾高薪工作,请学习Scala。

· 如果您在大数据上投入大量资金,请学习Scala。

· 如果您想在更传统的行业(例如金融机构)工作,请学习Scala。

简而言之,GO既有趣又酷,易于学习且简单。在3个月内,您可以编写可用于实际用途的生产就绪应用程序。Scala既有趣,复杂又具有挑战性,但回报颇丰,它的薪酬很高,而且声望更高,特别是在大数据世界中。

如果您是技术主管…

· 当您没有JVM依赖性并且可以在容器内运行二进制应用程序时,请使用GO。

· 将GO用于无服务器功能而不是JVM。

· 将GO用于在云或Kubernetes中管理的短期分布式Web应用程序或API。

· 将GO用于自定义脚本,小型作业和CLI。

· 使用GO以很少的资源以低成本消耗和处理大量事件。

· 如果您在云(特别是Google Cloud)中运行,请使用GO。

· 如果您依赖JVM或您的开发团队已经熟悉Java,请使用Scala。

· 将Scala用于利用JVM优化的高并发分布式系统。

· 将Scala用于大数据,尤其是Spark。

· 如果您的Java应用程序存在扩展问题,请使用Scala。

总而言之,GO是一种消耗很少且易于采用的二进制语言,对于您的工具带来说它是一个不错的工具,但是我不会将它用作大型组织的唯一编程语言,因为它不那么通用和其他语言一样。Scala更加困难,但是如果您已经在使用Java,那么这是一个很好的下一步。

如果您是经理…

· 使用GO作为节省成本的机制。Go比Scala便宜,不仅Gogo使用更少的资源,而且开发人员的薪水更低。

· 将GO用于无服务器或Kubernetes。

· 使用GO吸引年轻的人才,并将公司介绍为一家初创公司。

· 由于您的大多数GCP服务都基于GO API,因此如果您在Google Cloud中运行,请使用GO。

· 将Scala用于关键的并发应用程序,整体或实时系统。

· 使用Scala吸引高技能的高级开发人员。

· 将Scala用于大数据。

· 如果您已经在使用Java,并且难以在组织中进行更改且需要花费时间,请使用Scala。

· 如果您想添加一种新的语言并且不能花费太多时间,GO的使用比Scala容易得多,特别是如果您已经使用C ++而不是Java。

总而言之,GO的运行和雇用人才便宜。 它易于使用,可以在广泛的用例中采用。 当您仍然是核心应用程序的另一种语言时,它也可以用作补充语言。 Scala非常适合大型项目和大数据。 如果您在JVM上投入了大量资金,则Scala是常见的下一步。

结论

在过去的几年中,我一直在使用Go和Scala,两者都有其优点和缺点。作为开发人员,我喜欢在Scala中解决问题,它非常优雅,简洁,强大。和使用的喜悦;但是在现实世界中,我倾向于更频繁地使用GO,因为我可以更快,更便宜地完成工作。当您在需要赚钱的公司工作时,这就是这种方式。由于快速的编译时间和部署时间以及极低的资源使用率,GO是用于云原生应用程序的最具成本效益的语言。尽管如此,对于大数据和高度并发的关键系统来说,Scala是最佳选择,它也比GO更成熟。对于更大,更传统的企业,Scala往往更适合。

参考文献

[1] https://docs.scala-lang.org/tour/tour-of-scala.html

[2] https://golang.org/doc/

希望您喜欢这篇文章。 随时发表评论或分享这篇文章。 跟我来以后的帖子。

(本文由闻数起舞翻译自Coder Society的文章《Scala vs. GO》,转载请注明出处,原文链接:https://itnext.io/scala-vs-go-3e2e52f19de)



Tags:大数据   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为啥这几年偷税漏税的新闻这么多?不是偷的人多了,是因为国家有了查税大杀器: ...【详细内容】
2021-12-24  Tags: 大数据  点击:(8)  评论:(0)  加入收藏
张欣安科瑞电气股份有限公司 上海嘉定 201801 摘要:随着电力行业各系统接入,海量数据涌现,如何利用电网信息化中大量数据,对客户需求进行判断分析,服务于营销链条,提升企业市场竞...【详细内容】
2021-12-14  Tags: 大数据  点击:(9)  评论:(0)  加入收藏
1、什么是数据分析结合分析工具,运用数据分析思维,分析庞杂数据信息,为业务赋能。 2、数据分析师工作的核心流程:(1)界定问题:明确具体问题是什么;●what 发生了什么(是什么)●why 为...【详细内容】
2021-12-01  Tags: 大数据  点击:(25)  评论:(0)  加入收藏
数据作为新的生产要素,其蕴含的价值日益凸显,而安全问题却愈发突出。密码技术,是实现数据安全最经济、最有效、最可靠的手段,对数据进行加密,并结合有效的密钥保护手段,可在开放环...【详细内容】
2021-11-26  Tags: 大数据  点击:(17)  评论:(0)  加入收藏
导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享...【详细内容】
2021-11-26  Tags: 大数据  点击:(15)  评论:(0)  加入收藏
日前,北京市人力资源和社会保障局发布《2021年北京市人力资源市场薪酬大数据报告》,《报告》基于本市2020年度相关调研数据,按照行业、职位、群体等维度对薪酬数据进行了分析,首...【详细内容】
2021-11-04  Tags: 大数据  点击:(28)  评论:(0)  加入收藏
架构是数据仓库建设的总体规划,从整体视角描述了解决方案的高层模型,描述了各个子系统的功能以及关系,描述了数据从源系统到决策系统的数据流程。业务需求回答了要做什么,架构就...【详细内容】
2021-11-03  Tags: 大数据  点击:(35)  评论:(0)  加入收藏
同一产品对老客户的要价竟然比新客户要高?这是当下“大数据杀熟”的直接结果。近年来,随着平台经济的蓬勃发展,大数据在为用户服务之外,也引发了多种不合理现象。为了有效遏制“...【详细内容】
2021-10-29  Tags: 大数据  点击:(31)  评论:(0)  加入收藏
如今社会,手机电话在中国的使用率已达到99%以上,大大的地增强了我们的生活水平。而电话不但用以日常生活,还可以用以工作中,例如电话营销,电话便是他们的武器装备,他们根据手机的...【详细内容】
2021-10-26  Tags: 大数据  点击:(44)  评论:(0)  加入收藏
《个人信息保护法》11月1日即将生效,在大数据营销充斥在网络上的现在,如何引导大数据为善,如何更好的使用开发大数据,变得既重要也有现实意义。...【详细内容】
2021-10-26  Tags: 大数据  点击:(35)  评论:(0)  加入收藏
▌简易百科推荐
张欣安科瑞电气股份有限公司 上海嘉定 201801 摘要:随着电力行业各系统接入,海量数据涌现,如何利用电网信息化中大量数据,对客户需求进行判断分析,服务于营销链条,提升企业市场竞...【详细内容】
2021-12-14  安科瑞张欣    Tags:大数据   点击:(9)  评论:(0)  加入收藏
1、什么是数据分析结合分析工具,运用数据分析思维,分析庞杂数据信息,为业务赋能。 2、数据分析师工作的核心流程:(1)界定问题:明确具体问题是什么;●what 发生了什么(是什么)●why 为...【详细内容】
2021-12-01  逆风北极光    Tags:大数据   点击:(25)  评论:(0)  加入收藏
在实际工作中,我们经常需要整理各个业务部门发来的数据。不仅分散,而且数据量大、格式多。单是从不同地方汇总整理这些原始数据就花了大量的时间,更不用说还要把有效的数据收集...【详细内容】
2021-11-30  百数    Tags:数据   点击:(21)  评论:(0)  加入收藏
数据作为新的生产要素,其蕴含的价值日益凸显,而安全问题却愈发突出。密码技术,是实现数据安全最经济、最有效、最可靠的手段,对数据进行加密,并结合有效的密钥保护手段,可在开放环...【详细内容】
2021-11-26  炼石网络    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享...【详细内容】
2021-11-26  DataFunTalk    Tags:大数据   点击:(15)  评论:(0)  加入收藏
导读:数据挖掘是一种发现知识的手段。数据挖掘要求数据分析师通过合理的方法,从数据中获取与挖掘项目相关的知识。作者:赵仁乾 田建中 叶本华 常国珍来源:华章科技数据挖掘是一...【详细内容】
2021-11-23  华章科技  今日头条  Tags:数据挖掘   点击:(20)  评论:(0)  加入收藏
今天再给大家分享一个不错的可视化大屏分析平台模板DataColour。 data-colour 可视化分析平台采用前后端分离模式,后端架构设计采用微服务架构模式。 前端技术:Angularjs、Jq...【详细内容】
2021-11-04  web前端进阶    Tags:DashboardClient   点击:(39)  评论:(0)  加入收藏
在Kubernetes已经成了事实上的容器编排标准之下,微服务的部署变得非常容易。但随着微服务规模的扩大,服务治理带来的挑战也会越来越大。在这样的背景下出现了服务可观测性(obs...【详细内容】
2021-11-02  大数据推荐杂谈    Tags:Prometheus   点击:(40)  评论:(0)  加入收藏
同一产品对老客户的要价竟然比新客户要高?这是当下“大数据杀熟”的直接结果。近年来,随着平台经济的蓬勃发展,大数据在为用户服务之外,也引发了多种不合理现象。为了有效遏制“...【详细内容】
2021-10-29    海外网   Tags:大数据   点击:(31)  评论:(0)  加入收藏
本人03年开始从事贸易行业,多年来一直致力于外贸获客和跨境电商选品等领域,最近有些小伙伴反馈海关数据演示的都挺好为啥用起来不是那么回事?大家看到数据时关注的有产品、采购...【详细内容】
2021-10-28  QD云龙    Tags:数据   点击:(33)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条