日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Akka入门(二)Akka的Actor模型如何满足现代分布式系统需求

發(fā)布時間:2025/3/19 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Akka入门(二)Akka的Actor模型如何满足现代分布式系统需求 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Actor模型允許開發(fā)者:

?

  • 在不訴諸鎖定的情況下實施封裝。
  • 使用協(xié)作實體的模型對信號做出反應,改變狀態(tài),并相互發(fā)送信號以推動整個應用程序向前發(fā)展。
  • 不要擔心與我們的世界觀不匹配的執(zhí)行機制。

(一)?消息傳遞的使用避免了鎖定和阻塞

與方法調用不同的是,Actor相互發(fā)送消息。發(fā)送消息不會將執(zhí)行線程從發(fā)送方傳輸?shù)侥繕?。Actor可以發(fā)送消息并繼續(xù)而不會阻塞。因此,它可以在相同的時間內完成更多內容。

對于對象,當方法返回時,它釋放對其執(zhí)行線程的控制。在這方面,Actor的行為與對象非常相似,它們在完成處理當前消息時對消息作出反應并返回執(zhí)行。通過這種方式,Actor實際上的執(zhí)行與我們的設想是一致的。

Actor模型中第二個關鍵變化是恢復封裝。Actors對消息作出反應,就像對象“響應”他們的調用的方法一樣。不同之處在于,不是多個線程“突出”到我們的actor中并且對內部狀態(tài)和不變量造成嚴重破壞,演員獨立于消息的發(fā)送者執(zhí)行,并且他們一次一個地順序響應傳入的消息。當每個actor按順序處理發(fā)送給它的消息時,不同的actor彼此同時工作,以便actor系統(tǒng)可以同時處理盡可能多的消息,就像硬件支持的那樣。

由于每個actor最多只能處理一條消息,因此可以保持actor的不變量而不進行同步。這種情況不使用鎖

?

?

總的來說,Actors收到消息將會發(fā)生以下事情:

  • Actor將消息添加到隊列的末尾。
  • 如果Actor處于未被調度狀態(tài),則將其標記為準備執(zhí)行。
  • (隱藏)調度程序實體,接受actor并開始執(zhí)行它。
  • Actor從隊列前面挑選消息。
  • Actor修改內部狀態(tài),將消息發(fā)送給其他actor。
  • Actor狀態(tài)標記為未被調度狀態(tài)。
  • 為了實現(xiàn)這些行為,演員有:

    • 郵箱(消息隊列到達處)。
    • 行為(行為者的狀態(tài),內部變量等)。
    • 消息(表示信號的數(shù)據(jù)片段,類似于方法調用及其參數(shù))。
    • 執(zhí)行環(huán)境(需要具有消息響應并調用其消息處理代碼的actor的機制)。
    • 地址
    • 消息進入actor郵箱。actor的行為描述了actor如何響應消息(比如發(fā)送更多消息和/或改變狀態(tài))。執(zhí)行環(huán)境編排一個線程池,以完全透明地驅動所有這些操作。

    這是一個非常簡單的模型,它解決了以前列舉的問題:

    • 通過將執(zhí)行與信令解耦來保留封裝(方法調用傳輸執(zhí)行,消息傳遞不會)。
    • 沒有鎖。修改actor的內部狀態(tài)只能通過消息進行,消息一次處理一次,在嘗試保持不變量時消除競爭。
    • 在任何地方都沒有使用鎖,并且不會阻止發(fā)件人??梢栽谑畮讉€線程上有效地安排數(shù)百萬演員,充分發(fā)揮現(xiàn)代CPU的潛力。任務授權是演員的自然操作模式。
    • 參與者的狀態(tài)是本地的而不是共享的,更改和數(shù)據(jù)通過消息傳播,這些消息映射到現(xiàn)代內存層次結構實際上的工作方式。在許多情況下,這意味著只傳輸包含消息中數(shù)據(jù)的緩存行,同時保持本地狀態(tài)和數(shù)據(jù)緩存在原始核心。相同的模型完全映射到遠程通信,其中狀態(tài)保存在機器的RAM中,并且更改/數(shù)據(jù)作為分組在網(wǎng)絡上傳播。

    ?(二)Actor優(yōu)雅地處理錯誤情況

    由于我們不再在彼此發(fā)送消息的Actor之間擁有共享調用堆棧,因此我們需要以不同方式處理錯誤情況。我們需要考慮兩種錯誤:

    • 第一種情況是目標Actor上的委托任務由于任務中的錯誤而失敗(通常是一些驗證問題,如不存在的用戶ID)。在這種情況下,目標Actor封裝的服務是完整的,只有任務本身是錯誤的。服務參與者應該使用消息回復發(fā)件人,并提供錯誤案例。這里沒有什么特別的,錯誤是域的一部分,因此成為普通的消息。
    • 第二種情況是服務本身遇到內部故障。Akka強制所有Actor都被組織成一個樹狀的層次結構,即創(chuàng)建另一個Actor的Actor成為該新Actor的父級。這與操作系統(tǒng)將進程組織到樹中的方式非常相似。就像進程一樣,當一個Actor失敗時,它的父Actor會得到通知,它可以對失敗作出反應。此外,如果父actor已停止,則其所有子項也將以遞歸方式停止。這項服務被稱為監(jiān)督,它是Akka的核心。

    主管(父母)可以決定在某些類型的故障中重新啟動其子actor,或者完全阻止其他人。孩子們永遠不會沉默地死去(除了進入無限循環(huán)之外),他們要么失敗而且他們的父母可以對錯誤作出反應,要么他們被停止(在這種情況下,感興趣的一方會自動得到通知)??偸怯幸粋€負責任的實體來管理一個Actor:它的父母。此外,重新啟動對外部是看不到的:協(xié)作Actor可以在目標Actor重新啟動時繼續(xù)發(fā)送消息。

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的Akka入门(二)Akka的Actor模型如何满足现代分布式系统需求的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。