成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大數據開發語言怎么選?Scala還是Go

開發 后端 大數據
自從我參與DevOps和大數據以來,我一直在使用兩種出色的但完全不同的編程語言:Go和Scala。

 介紹

自從我參與DevOps和大數據以來,我一直在使用兩種出色的但完全不同的編程語言:Go和Scala。

[[353823]]

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往往更適合。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2016-10-10 14:05:46

存儲

2022-01-21 08:02:04

開發

2014-08-15 09:09:32

大數據

2022-05-05 08:13:16

Go數組類型

2020-12-29 06:44:18

GoScala編程語言

2021-01-18 18:30:49

服務器開發工具

2021-01-19 05:26:22

Github ActiJenkinsDevOps

2012-05-14 10:54:35

數據信息

2015-08-12 15:10:22

2015-08-04 09:40:10

Python大數據全棧式

2009-07-08 12:43:59

Scala ServlScala語言

2024-06-25 13:08:31

2022-03-13 23:51:39

Web項目Go

2018-06-24 09:12:33

redismemcache源碼

2021-01-31 18:58:31

redismemcache源碼

2012-06-08 09:28:15

EclipseScalaAndroid

2014-01-07 10:12:15

Spark

2017-08-02 08:56:43

大數據技術SaaS

2019-10-31 17:06:59

開發技能代碼

2019-11-01 10:27:48

GoJava語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本成人一区二区 | 国产精品免费在线 | 亚洲欧美一区二区三区1000 | 亚洲一区二区三区在线播放 | 91精品国产91久久久久久吃药 | 麻豆久久久久久久久久 | 北条麻妃av一区二区三区 | 天堂一区 | 色妞av| 91精品久久久 | 美日韩免费视频 | 国产福利91精品 | 成人乱人乱一区二区三区软件 | 91偷拍精品一区二区三区 | 春色av| 午夜成人免费视频 | 农村黄性色生活片 | 精品视频在线免费观看 | 亚洲一区三区在线观看 | 欧美精品综合在线 | 国产成人叼嘿视频在线观看 | 超碰av在线 | 亚洲一区二区三区国产 | 超碰操 | 亚洲精品一区二区网址 | www九色| 在线看免费 | 手机在线不卡av | 中文一区二区 | 国内精品久久久久久久影视简单 | 久久久www成人免费无遮挡大片 | 一区二区三区在线免费 | 国产精品日日做人人爱 | 密乳av| 成人免费观看男女羞羞视频 | www日本高清视频 | 日韩精品免费视频 | 午夜国产精品视频 | 日韩成人av在线 | 精品伦精品一区二区三区视频 | 一区二区三区视频播放 |