Actor是一種并發(fā)模型,是共享內(nèi)存并發(fā)模型的替代方案。
目前成都創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、忻府網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
共享內(nèi)存模型使用各種各樣的鎖來解決狀態(tài)競爭問題,性能低下且讓編碼變得復(fù)雜和容易出錯。
共享內(nèi)存受限于單節(jié)點的服務(wù)器資源限制。
線程之間以消息進(jìn)行通信,消息按順序單線程處理,不存在狀態(tài)競爭。
以消息方式通信,可以方便的組建集群。
把State和Behavior綁定,能更好的控制狀態(tài)。
Mailbox:可以理解為先入先出隊列,負(fù)責(zé)接收和緩存送達(dá)的消息。
State:狀態(tài)信息,比如用戶的賬戶余額信息。
Behavior:負(fù)責(zé)按順序處理Mailbox中的消息,比如扣款消息、到賬消息,查詢余額消息等。
Orleans是.Net基金會維護(hù)的一個Actor跨平臺開源框架,獨創(chuàng)Virtual Actor概念,支持分布式集群。
項目地址:http://dotnet.github.io/orleans/
以對象方式訪問Actor,符合面向?qū)ο蟮氖褂昧?xí)慣。
提出Virtual Actor概念,可以通過ID訪問細(xì)粒度的Actor,能承載數(shù)千萬的Actor對象。
支持Stateful,能替代緩存層來對內(nèi)存狀態(tài)進(jìn)行更精確的控制,減少數(shù)據(jù)庫的壓力。
高性能,單個Actor能支持10萬+的QPS。
激活透明,Actor對訪問者是永久存在的,但也提供完整的生命周期控制,拓展方便。
原生支持集群,但Actor位置透明,訪問者不需要關(guān)注Actor運行在那個節(jié)點,集群會根據(jù)節(jié)點情況進(jìn)行負(fù)載調(diào)度。
提供了多種集群支持,集群部署非常方便,支持AdoNet,Zookeeper,K8s,SF等。
提供了完整的單元測試解決方案,方便進(jìn)行單元測試。
提供了完善的監(jiān)控工具,能夠詳細(xì)的監(jiān)測各種指標(biāo)。
基于.net core,支持各種平臺。
Silo:集群中的一個節(jié)點,負(fù)責(zé)維護(hù)當(dāng)前節(jié)點的Grains。
SiloGateway:每個節(jié)點都存在,負(fù)責(zé)維護(hù)集群狀態(tài)和轉(zhuǎn)發(fā)請求。
Grain:相當(dāng)于Actor,通過ID+Interface來識別。
Client:用來訪問集群中的Grain的客戶端工具。
Ray是基于Actor模型構(gòu)建的基于事件朔源的分布式最終一致性高性能框架,把傳統(tǒng)的復(fù)雜的分布式事務(wù)拆分為由事件驅(qū)動的線性處理流程的一種方式,性能和吞吐更高,響應(yīng)更快。
Ray提供了狀態(tài)維護(hù)、事件發(fā)布/訂閱、冪等性控制、分布式事務(wù)等模塊,并內(nèi)置了分布式ID、分布式鎖、分布式權(quán)重鎖等服務(wù)。
Ray提供卓越的性能,單個Actor能達(dá)到20000/s的事件。
項目地址:https://github.com/RayTale/Ray
狀態(tài)(State):內(nèi)存聚合數(shù)據(jù)。
事件(Event):狀態(tài)變化的信息。
EventBus:提供事件發(fā)送和事件消費訂閱。
冪等性:保證事件送達(dá)多次不會導(dǎo)致狀態(tài)異常,例如上圖的A的轉(zhuǎn)賬事件多次送達(dá)B,但是B只會增加一次余額。
A用戶調(diào)用A賬戶Actor的轉(zhuǎn)賬方法進(jìn)行轉(zhuǎn)賬,A賬戶Actor根據(jù)內(nèi)存狀態(tài)進(jìn)行余額校驗,如果余額不足,則直接返回失敗原因,如果校驗成功則產(chǎn)生一個轉(zhuǎn)賬Event(記錄目標(biāo)賬戶Id、轉(zhuǎn)賬金額、剩余余額)并持久化,然后修改內(nèi)存狀態(tài)和發(fā)送到EventBus。EventBus一個訂閱者根據(jù)事件信息修改讀庫中A賬戶的余額和往賬單表中插入一條轉(zhuǎn)賬賬單,另外一個訂閱者根據(jù)事件信息調(diào)用B賬戶Actor的到賬方法,B賬戶Actor會產(chǎn)生一個到賬Event(記錄到賬金額、FromId、剩余余額)并持久化,然后修改內(nèi)存狀態(tài)和發(fā)送到EventBus,EventBus的一個訂閱者根據(jù)事件信息修改讀庫中B賬戶的余額和往賬單表中插入一條到賬賬單。
點擊獲取?附送學(xué)習(xí)進(jìn)階架構(gòu)資料、PDF書籍文檔、面試資料