您好,登錄后才能下訂單哦!
Actor是一種并發模型,是共享內存并發模型的替代方案。
共享內存模型使用各種各樣的鎖來解決狀態競爭問題,性能低下且讓編碼變得復雜和容易出錯。
共享內存受限于單節點的服務器資源限制。
線程之間以消息進行通信,消息按順序單線程處理,不存在狀態競爭。
以消息方式通信,可以方便的組建集群。
把State和Behavior綁定,能更好的控制狀態。
Mailbox:可以理解為先入先出隊列,負責接收和緩存送達的消息。
State:狀態信息,比如用戶的賬戶余額信息。
Behavior:負責按順序處理Mailbox中的消息,比如扣款消息、到賬消息,查詢余額消息等。
Orleans是.Net基金會維護的一個Actor跨平臺開源框架,獨創Virtual Actor概念,支持分布式集群。
項目地址:http://dotnet.github.io/orleans/
以對象方式訪問Actor,符合面向對象的使用習慣。
提出Virtual Actor概念,可以通過ID訪問細粒度的Actor,能承載數千萬的Actor對象。
支持Stateful,能替代緩存層來對內存狀態進行更精確的控制,減少數據庫的壓力。
高性能,單個Actor能支持10萬+的QPS。
激活透明,Actor對訪問者是永久存在的,但也提供完整的生命周期控制,拓展方便。
原生支持集群,但Actor位置透明,訪問者不需要關注Actor運行在那個節點,集群會根據節點情況進行負載調度。
提供了多種集群支持,集群部署非常方便,支持AdoNet,Zookeeper,K8s,SF等。
提供了完整的單元測試解決方案,方便進行單元測試。
提供了完善的監控工具,能夠詳細的監測各種指標。
基于.net core,支持各種平臺。
Silo:集群中的一個節點,負責維護當前節點的Grains。
SiloGateway:每個節點都存在,負責維護集群狀態和轉發請求。
Grain:相當于Actor,通過ID+Interface來識別。
Client:用來訪問集群中的Grain的客戶端工具。
Ray是基于Actor模型構建的基于事件朔源的分布式最終一致性高性能框架,把傳統的復雜的分布式事務拆分為由事件驅動的線性處理流程的一種方式,性能和吞吐更高,響應更快。
Ray提供了狀態維護、事件發布/訂閱、冪等性控制、分布式事務等模塊,并內置了分布式ID、分布式鎖、分布式權重鎖等服務。
Ray提供卓越的性能,單個Actor能達到20000/s的事件。
項目地址:https://github.com/RayTale/Ray
狀態(State):內存聚合數據。
事件(Event):狀態變化的信息。
EventBus:提供事件發送和事件消費訂閱。
冪等性:保證事件送達多次不會導致狀態異常,例如上圖的A的轉賬事件多次送達B,但是B只會增加一次余額。
A用戶調用A賬戶Actor的轉賬方法進行轉賬,A賬戶Actor根據內存狀態進行余額校驗,如果余額不足,則直接返回失敗原因,如果校驗成功則產生一個轉賬Event(記錄目標賬戶Id、轉賬金額、剩余余額)并持久化,然后修改內存狀態和發送到EventBus。EventBus一個訂閱者根據事件信息修改讀庫中A賬戶的余額和往賬單表中插入一條轉賬賬單,另外一個訂閱者根據事件信息調用B賬戶Actor的到賬方法,B賬戶Actor會產生一個到賬Event(記錄到賬金額、FromId、剩余余額)并持久化,然后修改內存狀態和發送到EventBus,EventBus的一個訂閱者根據事件信息修改讀庫中B賬戶的余額和往賬單表中插入一條到賬賬單。
點擊獲取?附送學習進階架構資料、PDF書籍文檔、面試資料
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。