背景
Orleans
是微軟開源的Actor模型開發(fā)框架房维。
Actor模型
此模型解決了并發(fā)編程時對資源競爭使用的問題,將對同一個業(yè)務數(shù)據(jù)的訪問從并行變?yōu)榇袌?zhí)行抬纸,降低了多線程編程的難度咙俩,使普通編程人員也能輕松編寫高并發(fā)應用。
特點
Orleans的主要特點是通過框架提升開發(fā)人員的效率湿故,并默認提供對應用系統(tǒng)橫向擴展的能力阿趁,即使是普通開發(fā)人員也能輕松的完成。
提高開發(fā)效率
Orleans通過提供以下這些關鍵抽象坛猪、運行保證脖阵、系統(tǒng)服務來提高開發(fā)人員的效率,并不在意開發(fā)人員是否是并發(fā)編程專家墅茉。
熟悉的OOP
IGrain聲明了一些異步的方法命黔, Grains負責實現(xiàn)他們,是不是很熟悉就斤?我們可以像調用本地方法一樣去調用這些遠程的Grain方法悍募,Orleans負責將它們轉換為消息并在網(wǎng)絡上傳輸、調度洋机。
Grain的單線程執(zhí)行
Orleans保證了一個Grain不會在多個線程上執(zhí)行(通過primaryKey區(qū)分Grain)坠宴,編程人員永遠不用擔心在Grain層面的并發(fā)問題,也不需要使用鎖或其它同步機制來保證對共享數(shù)據(jù)的訪問绷旗。
透明激活
Grain僅當要處理消息時才會激活喜鼓,不同于普通的類實例需要實例化或釋放副砍,Grain只有激活和休眠兩種狀態(tài),并且可以在不同的硬件設備中遷移颠通,實現(xiàn)動態(tài)址晕、自適應的負載均衡,并且開發(fā)人員不需關心這些具體細節(jié)顿锰。
透明傳輸
開發(fā)人員調用Grain時谨垃,不需要知道Grain的物理位置在哪一個硬件設備上,只需要創(chuàng)建對Grain的邏輯引用硼控。
集成持久化
Orleans允許將Grina的內(nèi)存狀態(tài)持久化到存儲設備刘陶。它允許擴展或定制持久化提供程序,并保證只有在成功更新持久狀態(tài)后才調用者才能收到結果牢撼。
自動傳遞錯誤
運行時使用異步和分布式try / catch的語義自動在調用鏈上傳播未處理的錯誤匙隔。 因此,錯誤不會在應用程序中丟失熏版。
這允許程序員將錯誤處理邏輯放在適當?shù)奈恢梅自穑鵁o需在每個級別手動傳播錯誤的繁瑣工作。
默認情況下透明可伸縮性
Orleans 通過提供以下特性幫助開發(fā)人員將系統(tǒng)應用的可擴展性提升幾個數(shù)量級撼短;這是通過將最佳實踐和成熟的模型相融合再膳,并通過提供高效率、低學習成本的系統(tǒng)來達成這一目標曲横。
應用狀態(tài)的隱式細粒度劃分
Orleans 使用 Grain
作為可直接訪問的實體喂柒,程序員隱式地打破了應用程序的單體狀態(tài)。Orleans 并沒有規(guī)定 Grain 應該是多大或多小禾嫉,但絕大多數(shù)情況下會有大量的 Grain灾杰,每個 Grain 代表了應用中的自然實體,例如用戶熙参、訂單中艳吠,每個用戶是一個單獨的Grain,可通過UserId
做為primaryKey
來區(qū)分各個UserGrain尊惰。由于Grain的獨立性讲竿,并且物理位置被抽象為了邏輯位置,所以Orleans在負載均衡和熱點處理方面具有極大的靈活性弄屡,并且不需要開發(fā)人員考慮這些部分。
自適應的資源管理
當 Grain 互相調用時鞋诗,它們不需要去猜測其它 Grain 的位置膀捷。因為框架具有位置透明的特性,Runtime 可以動態(tài)管理和調整可用硬件資源的分配削彬,通過對集群中的 Grain 的動態(tài)遷移來保證負載全庸,而不會使傳入的請求失敗秀仲。通過創(chuàng)建特定Grain的多個副本,保證吞吐量壶笼,而無需修改應用程序代碼神僵。
多路通信
Grain 采用的是邏輯地址,并且它們之間的消息傳遞在Tcp socket上多路復通覆劈,這允許Runtime 托管數(shù)百萬個具有極低開銷的Grain保礼。另外,激活和停用 Grain 不會產(chǎn)生 Socket 成本责语。
高效的調度
Runtime 可以執(zhí)行大規(guī)模的單線程 Grain 調度炮障,使用非阻塞、基于連續(xù)方式編寫 Grain坤候,應用程序以非常有效的協(xié)程方式運行胁赢,這使系統(tǒng)通夠達到高吞吐量并以非常高的CPU利用率運行,并具有極高的穩(wěn)定性白筹。事實上智末,系統(tǒng)中的Grain數(shù)量增加和負載的增加不會導致額外的線程或其它的系統(tǒng)開銷,這有利于單個節(jié)點和整個系統(tǒng)的擴展徒河。
顯式異步
Orleans 框架中分布式應用程序的異步特點明確系馆,旨在指導程序員編寫非阻塞異步代碼。結合異步消息傳遞和高效的調度虚青,開發(fā)人員無需使用多線程編程技術即可實現(xiàn)大規(guī)模的分布式并行性和總體吞吐量它呀。