當前位置:
首頁 > 知識 > 簡單了解Orleans

簡單了解Orleans

簡單了解Orleans

Orleans是微軟開源的分散式actor模型框架.actor模型的原理網路上有很多文章.有許多理論性的文章,深刻地我都不知道怎麼應用.在這裡我就不贅述了.既然是博客,就說說自己的理解。

對於編程來說,不管是前台還是後台,在現在的計算機環境下,多線程編程是不可避免的。多線程帶來的很多好處,也帶來的很多編程上的「壞處」。好處就是,什麼並發、高效,高資源利用率等等高大上的詞語。這些就不詳細說了。就說說壞處.

多線程帶來的最大的變化就是:我先前保存的變數A,在我想要再次利用它的時候,A是否被其他線程給更改了?資料庫中叫臟讀,我們拿過來用,「避免臟讀」又有個同義詞叫做「操作的原子性」。為了解決臟讀的問題,有一下幾種辦法:

辦法一變數A在初始賦值的時候,就規定它不可以被更改,就是不可變,英文叫做immutable,很多函數式語言如F#,scala等都有不可變數。既然量是不可變的。就不會有什麼臟讀問題了。這真是個好辦法,但是在C#和JAVA這樣的語言里,這不是個好辦法。

辦法二就是大家經常使用的,多線程,架鎖。精巧的設計類,小心的使用這些來,管理各種資源的競爭。為了避免臟讀,在C#以及JAVA里,架鎖是一個可行的辦法。但是這樣會使得效率變低(鎖架地多了,這個會更明顯),更為關鍵是帶來邏輯的複雜性。架鎖的程序,可以說是一個「正確但是脆弱」的程序。離開了初創人員,後來的人想讀懂讀透?呵呵,人生苦短。

辦法三,也是Orleans採用的辦法,設計一個類,保證這個類從「創建」過程到「銷毀」過程,以及「中途調用它的方法」的執行過程,這三個「過程」不管何時何地調用,都會在同一個線程中運行。這樣的化,我就可以放心大膽的去修改,調用這個類的方法,而不用擔心這個指向這個類的變數出現「臟讀」的情況。這個某種程度上算是辦法一和二的折中。為了說明這個辦法,就不得不說Actor模型。

人與人的溝通只是通過消息,不管是聽聞嗅觸等等感覺,都是往外界往人的身體發送的消息.人處理後做出反應.這個處理與反應是非同步的.接受消息和處理消息都是並行的、同時的進行。actor模型就是模擬這種通信方式.用Actor作為名稱,也算是指明了這個模型想要模擬什麼。

既然是模擬,那就是簡單化。Orleans模型里,每一個actor有專門的類代表它,叫做Grain,這個grain類就是模擬通信場景中的」人」,但是Orleans為了解決多線程帶來的「資源競爭」等問題,採用了辦法三,再Orleans框架內,它保證每個grain類符合以下行為規範:

A. 發往同一個grain類實例的任何消息都會在固定線程內執行。

B. grain類按照接受消息的先後,依次處理消息。在任意時間點,一個grain實例只處理一個消息。

C. grain實例內的欄位屬性,只能由實例本身訪問。外界不能訪問。

在大部分情況下,這些規範都是成立的。這些規範被稱為「單線程機制」。但是也要有「變通」,這些「變通」涉及到很多其他方面,在以後的文章中會解釋是如何變通的,為什麼要變通,以及什麼場景下才需要變通。不過現在你可以認為,這些規則就是「法律」。在Orleans的框架內,這些grain們都是一些「頭腦簡單並且自閉的人」。你作為設計者,如果恰到好處的布置這些「人」,它們會給你驚喜。比如對於消息的處理,可以做到全程無鎖等。。。高大上的特性。

同時Orleans是使用Actor模型的,同時微軟更近了一步,它是使用的虛擬的Actor模型。具體怎麼個虛擬法,這個以後的文章中解釋。

以上說了那麼多,就說明Orleans是使用actor模型的。還沒有說分布。Orleans是分散式的。那是因為所有Actor之間的互動是跨線程的,甚至是跨計算機的。同時Orleans框架保證開啟多個服務端程序實例,通過簡單的配置,它們的行為就會如同單一的服務端實例一樣。客戶端感覺不到區別,簡單的說就是服務端能「合體」。兩個小奧特曼,每個小奧特曼由更小的細胞組成,同時他們又合體變成了一個大的奧特曼,就問你怕不怕,你如果不怕,Orleans甚至實現了「合體的合體」---這種橫向擴展性為高可用,資源的充分利用以及大吞吐量帶來可很大的想像空間,同時也是靈活部署的基礎。另外利用Orleans的Actor模型,也可以很容的實現event sourcing。它甚至已經內置了event sourcing中間件。

Orleans同時也有Net.Core版本,利用它可以實現跨平台運行,它名字叫做Orleans vNext.我是按照framwork版本寫的。兩個版本的使用方法幾乎相同。

這個世界有很多actor模型框架,JAVA和Scala的AKKA,C#的AKKA.Net以及Orleans。它們都是開源的,都可以去下載它們的源碼學習。在寫文章的時候,Orleans版本剛剛是1.5版本,所以我就只能按照1.5版本來寫。

要讀的非常的順暢,我假定讀者都熟悉C#,熟悉多線程,特別是C#中Task類的用法,雖然很多時候,這些沒有這些知識也能非常順利的讀懂,但是有,會在關鍵的時刻幫助你理解Orleans。更進一步,如果熟悉了以上知識,才能明白Orleans能不能幫助你解決實際工作中的問題。以及在技術選型的時候,明白Orleans是不是你想要的。

文章摘自博客園


更多精彩推薦

IT教育專業培訓:http://www.ujiuye.com/

IT職業在線教育:http://xue.ujiuye.com/

零基礎學習java:http://www.ujiuye.com/zt/java/?wt.bd=lsh11tt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

個性測試:你會選擇哪道門?看出你深藏的個性
同時支持同步和非同步的redis client lib
Qt5.8以上版本編譯Oracle資料庫的OCI驅動教程

TAG:IT優就業 |

您可能感興趣

這樣的iPhone8 Plus你喜歡嗎?iPhone8 Plus簡單開箱評測
微軟Outlook.com簡單體驗
WebService就是這麼簡單
高達seed destiny的bgm簡單推薦與科普
簡單理解Vue中的nextTick
瑜伽舞王式Natarajasana這樣練,簡單多了……
基於Netty的Android系統IM簡單實現原理
Air Max Day新品提前知曉!可不止推出Virgil Abloh x NIKE這麼簡單!
SevenFriday的簡單生活機械美學
super 沒那麼簡單
簡單區別:Anyone 和 Any One
iPhone 6 Plus免費換成6sP 沒你想的那麼簡單
Photoshop排版原來可以這麼簡單
萌系畫風的網球遊戲,想贏可沒那麼簡單 - pktball #iOS #Android
PullOver簡單使用教程
簡單定義Python和Scala的類和對象
python基礎學習第一課,如何兩步簡單安裝python
簡單的冬季護膚routine
《Om Mata Kali》簡單又安心的瑜伽音樂
「Python」Chapter1 變數和簡單數據類型