javaone_JavaOne 2012:向上,向上和向外:使用Akka扩展软件
javaone
在晚些時候的社區(qū)主題演講之后,我前往希爾頓金門大橋3/4/5觀看了維克多·巴生 ( Viktor Klang )的( Typesafe )“向上,向上和向外:Akka”演講。 巴生(Klang)是Akka的技術(shù)主管。 Akka是“ 瑞典北部美麗的山脈 ”,是女神 ,也是基于Scala的“工具箱和運行時,用于在JVM上構(gòu)建高度并發(fā),分布式和容錯的事件驅(qū)動應(yīng)用程序”。 Akka不僅是Scala專有的,而且可以“從Java今日使用”。 與Scala一起使用Akka確實可以讓您做一些與Java一起使用Akka不能做的事情。許多大型公司都使用Akka解決實際問題。 Akka的構(gòu)建可在多個方向上嚇跑并提供極大的靈活性。 Akka的目標(biāo)之一是“管理系統(tǒng)過載”。
Akka使用Actors:“ Akka的代碼組織單位”。 根據(jù)巴生的說法,“ Actor可幫助您創(chuàng)建并發(fā),可伸縮和容錯的應(yīng)用程序。” 參與者“保持許多與業(yè)務(wù)邏輯分離的”政策決策”。 演員起源于1970年代(“就像計算機(jī)科學(xué)中所有很酷的東西一樣”),而Erlang多年來一直在使用具有“巨大成功”的演員。
巴生警告說,避免“以共享狀態(tài)來思考,即泄漏的抽象”。 他補(bǔ)充說,線程和鎖是“一種執(zhí)行手段”,而不是結(jié)構(gòu)化的手段。 他說,這將執(zhí)行與業(yè)務(wù)邏輯混合在一起。 并發(fā)收集是針對本地使用的良好優(yōu)化。
演員是“按設(shè)計分配的”,而巴生有一張幻燈片,列出了幾個解釋該聲明的項目符號。 他說,參與者可以替代“線程”,“對象實例”,“回調(diào)或偵聽器”,“單例或服務(wù)”,“路由器,負(fù)載均衡器或池”,“ Java EE”。會話Bean或消息驅(qū)動Bean,“進(jìn)程外服務(wù)”和“有限狀態(tài)機(jī)”。
巴生引用了卡爾?休伊特關(guān)于演員的錄像帶 。 演員是“體現(xiàn)了幾個關(guān)鍵特征的基本計算單位”。
巴生在演示中以我喜歡的格式顯示了代碼示例:嵌入到他的幻燈片中并突出顯示了顏色語法。 他顯示了步驟0('DEFINE'),其中他的代碼定義了Actor的類和Actor的行為。
定義后,第一個操作(I –“創(chuàng)建”)“創(chuàng)建Actor的新實例”。 所創(chuàng)建的Actor非常輕巧,并且“狀態(tài)和行為彼此無法區(qū)分”。 他把最后一點講到了:“觀察狀態(tài)的唯一方法是通過向演員發(fā)送消息并查看演員的React?!?Actor是狀態(tài),行為和消息隊列的“非常強(qiáng)大的封裝”。
Akka提供了一個ActorSystem來創(chuàng)建Akka Actor實例。 實例Props ,因為演員需要道具提供給演員。
第2步(“發(fā)送”)涉及“向演員發(fā)送消息”和“一切都是React性發(fā)生的”和“一切都是異步且無鎖的”。 Akka通過演員的tell方法支持“即發(fā)即棄”模式。 但是,Akka提供有保證的交貨順序。 回復(fù)是在Akka中使用getSender().tell() 。
第3步(“成為”)“重新定義了演員的行為”,并且“通過接收消息做出React”。 人們可能想在運行時更改actor行為的原因包括支持將高度競爭的actor轉(zhuǎn)換為actor池或?qū)崿F(xiàn)正常降級。
演員可以監(jiān)督其他演員,進(jìn)入步驟4(“ SUPERVISE”)。 “保護(hù)者檢測并響應(yīng)其監(jiān)督的Actor的故障”,Klang表示這轉(zhuǎn)化為“干凈的分離,處理和錯誤處理”。
Klang談到了“ Java,C和C#中的故障管理”,在這里您“被賦予了單一的控制線程”。 他以這種方式將其放在子彈中:“如果這根線炸毀,您就被擰死了?!?這意味著所有“顯式錯誤處理”都在“單線程內(nèi)”完成,并與業(yè)務(wù)代碼“糾結(jié)”在一起。
巴生表示,處理錯誤處理的方法是將錯誤處理推離業(yè)務(wù)邏輯。 然后,他引用了洋蔥層錯誤內(nèi)核 。 巴生談到了為Actor處理失敗提供的回調(diào)( preRestart和postRestart )。
路由器是Actor的特例。 巴生展示了一張使用RoundRobinRouter編寫代碼的RoundRobinRouter 。 他還展示了能夠在配置文件中的代碼之外定義部署方案,并使用路徑從代碼中引用該方案。 他進(jìn)一步舉例說明了“遠(yuǎn)程部署”的代碼,該代碼指定了帶有“ akka”協(xié)議,主機(jī)名和端口的URL。
到目前為止,巴生提出的所有內(nèi)容都可以作為Akka 2.0使用。 巴生表示,即將發(fā)布的Akka 2.1中將會有Akka集群。 他要求提供反饋,以確保Akka 2.2中的群集可以使用正確的API和正確的功能。 有關(guān)Akka群集的更多信息,請參見規(guī)范 ,用戶指南和代碼本身。
Akka 2.1還具有基于Apache Camel的 Akka Camel 。 Typesafe控制臺也可用于監(jiān)視Akka應(yīng)用程序,并且有此應(yīng)用程序的實時演示 。
參考: JavaOne 2012:向上,向上和向外:來自JCG合作伙伴 Dustin Marx的Akka與Akka一起擴(kuò)展軟件,內(nèi)容來自Inspired by Actual Events博客。
翻譯自: https://www.javacodegeeks.com/2012/10/javaone-2012-up-up-and-out-scaling.html
javaone
總結(jié)
以上是生活随笔為你收集整理的javaone_JavaOne 2012:向上,向上和向外:使用Akka扩展软件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机uc电脑版(uc 电脑版)
- 下一篇: Eclipse IDE中的Java 9