【Akka】Akka應用調研報告
來自: http://jasonding1354.github.io/2016/02/01/Scala/【Akka】Akka應用調研報告/
Akka是什么
Akka由Scala語言編寫的分布式應用框架,用于簡化編寫容錯的、高可伸縮性的Java和Scala的Actor模型應用。它已經成功運用在電信行業。系統幾乎不會宕機(高可用性 99.9999999 %,一年只有31 ms宕機)。
大多數流行的語言并發是基于多線程之間的共享內存,使用同步方法防止寫爭奪,Akka提供的并發模型基于Actors。這使得軟件開發人員可以更輕松地開發正確的具有容錯性、可擴展性和跨平臺的并發程序。
Akka為什么如此重要,并且會有很好的發展前景?
第一,充分利用計算機多核的計算資源。由于計算機硬件技術的發展,計算機擁有越來越多的內核,但是CPU的主頻已經達到極限,所以作為軟件開發者要提高軟件性能,就需要充分利用計算機多核的計算資源,使得編寫高性能的軟件程序。
第二,輕松實現分布式程序。分布式技術和集群技術的成熟使得一個應用程序可以被分塊運行在多個獨立的計算機上,Akka 為透明的分布式系統以及真正的可擴展高容錯應用的基礎進行了抽象,基于Akka的應用程序不需要關心操作系統層面的并發和通信細節,進而提高了開發分布式程序的效率。
第三,開源社區的大力支持。Akka現在是Typesafe Stack的一部分。Typesafe是一個讓開發者更容易地構建可擴展軟件應用的現代軟件平臺。它在一個簡單的包里組合了Scala語言、Akka、Play Web框架和其它魯棒的開發工具,能夠與現有的Java基礎設施無縫集成。
第四,開源項目的優秀實踐有利于Akka的流行和推廣。Apache Spark、Apache Flink都已經成為了Apache開源軟件基金會的頂級項目,而它們都使用了Akka庫,構造軟件的高性能和分布式。
下面是Typesafe公司統計的開發者使用Akka作為工具庫的主要考慮因素:
</div>
Akka的應用場景
Akka被成功運用在眾多行業的眾多大企業,從投資業到商業銀行、從零售業到社會媒體、仿真、游戲、汽車和交通系統、數據分析等等。任何需要高吞吐率和低延遲的系統都是使用Akka的候選。
Akka的Actor模型使你能夠進行服務失敗管理(監管者),負載管理(緩和策略、超時和隔離),水平和垂直方向上的可擴展性(增加CPU核數和/或增加更多的機器)管理。
Akka的特點可以讓它應用在以下領域:
(1)事務處理 (在線游戲,金融/銀行業,貿易,統計,社會媒體,電信);
(2)服務后端 (任何行業,任何應用),提供REST、SOAP、Cometd、WebSockets 等服務,作為消息總線/集成層 垂直擴展,水平擴展,容錯/高可用性;
(3)并發/并行 (任何應用),運行正確,方便使用,只需要將jar包添加到現有的JVM項目中;
(4)仿真,主/從,計算網格,MapReduce等等;
(5)通信Hub (電信、Web媒體、手機媒體);
(6)游戲 (MOM、在線游戲);
(7)商業智能/數據挖掘/通用數據處理;
(8)復雜事件流處理。
</div>
Akka在大數據開源項目中的應用
由于Akka由Scala編寫,現已成為Scala標準庫的一部分,所以廣泛使用Akka的軟件開源項目也主要集中在基于Scala的生態環境下,同時,也不乏Java開發的項目。在全球最火熱的開源項目倉庫GitHub中,有超過250個開源Akka的actor應用程序項目。
Apache Spark是一種與Hadoop相似的開源集群計算環境,Spark直接采用了Akka的Actor模型來實現多線程并行機制,性能非常高。Spark同節點上的任務以多線程的方式運行在一個JVM進程中,這樣可以做到任務啟動速度快、節省內存、減少申請系統資源帶來的開銷。Spark的內存計算的高性能都得益于Akka的使用。
Apache Flink是一個高效、分布式、基于Java實現的通用大數據分析引擎,它具有分布式 MapReduce一類平臺的高效性、靈活性和擴展性以及并行數據庫查詢優化方案,它支持批量和基于流的數據分析。Flink的RPC系統就是利用Akka框架來實現的,Akka的故障檢測機制提高了Flink的魯棒性,使得當節點中斷時能做出正確響應。
Akka在工業界的應用
Akka在國外的IT行業,尤其是互聯網和通信行業都有廣泛的應用,其中著名的企業如思科、ebay、亞馬遜、Intel、惠普等都在廣泛使用。可以在下面圖中看到,有哪些企業在使用Akka。

國內的互聯網行業相對應用少些,主要是因為國內的Scala人才還比較匱乏,Akka的資料和普及還不夠,這使得企業在技術選型的時候會優先考慮比較傳統和成熟的技術方案,以減小開發難度。但也不乏應用Scala和Akka的先行者,比如豌豆莢、挖財、雪球等一些創業型公司和一些投資銀行的技術部門。在國內的企業中,主要使用Akka做一些ETL處理、業務的運算和響應式平臺的應用。
轉載請注明作者Jason Ding及其出處
Github博客主頁(http://jasonding1354.github.io/)
GitCafe博客主頁(http://jasonding1354.gitcafe.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡書主頁(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354進入我的博客主頁