Orleans 知多少 | 2. 核心概念一覽

Orleans 術(shù)語解讀

Orleans Core Concept

上面這張圖中包含了Orleans中的幾個核心概念:

  1. Grain
  2. Silo
  3. Orleans Cluster
  4. Orleans Client

從這張圖,我們應(yīng)該能理清他們之間的關(guān)系。

  1. Grain作為最小的執(zhí)行單元

  2. Silo 是 Grain 的宿主運行環(huán)境,用來暴露具體的服務(wù)

  3. Orleans Server 提供Silo的運行環(huán)境

  4. 一個Server可以運行多個Silo服務(wù)

  5. 多個Silo組成一個Cluster集群

  6. 一個Cluster中的Grain是可以直接進(jìn)行交互

  7. 客戶端通過Orleans Client與Cluster建立連接

Orleans 的第一公民:Grain

Grain 簡介

上面已經(jīng)提到,Grain是Virtual Actor的具體表現(xiàn)。那如何理解Grain呢。

簡單來說:Grain是一個可尋址的隔離的.NET對象實例

分解來看:

  1. Grain是一個對象實例:也就是說其是具體的某個Grain Type的一個內(nèi)存實例。既然是對象,也就是說Grain可以有自己的狀態(tài)和行為。

  2. 隔離的:是指Grain自身的狀態(tài)和行為不受外界干預(yù)。

  3. 可尋址:并不是指new一個對象返回的內(nèi)存引用。如果是在單機環(huán)境,通過內(nèi)存引用還可以進(jìn)行直接訪問。但對于分布式應(yīng)用,Grain可能分布在集群中的任一機器,簡單的內(nèi)存引用,是無法實現(xiàn)跨機器尋址的。

Grain Identity

在面向?qū)ο缶幊讨惺褂胣ew創(chuàng)建對象時,獲取的引用可以表示其標(biāo)識的實例所有方面。但在分布式系統(tǒng)中,對象引用不能表示實例標(biāo)識,因為引用通常僅限于單個地址空間。

那如何實現(xiàn)分布式環(huán)境Grain的可尋址呢?

那就需要給Grain一個身份,也就是Grain Identity。以訂單舉例,為了標(biāo)識某一個具體訂單,我可以賦予訂單一個唯一的訂單編號,通過這個編號就可以找到具體的某個訂單。

Grain Identity 也就是這種思路。通過給Grain打上邏輯身份標(biāo)識,一方面可以完成可尋址(方便其他Grain或Client進(jìn)行調(diào)用),一方面確保同一個Grain在集群中能夠按需創(chuàng)建。(單例、多例、指定數(shù)量的實例)。

默認(rèn)grain 的身份標(biāo)識可以是:

  • long

  • GUID

  • string

  • GUID + string

  • long + string

所以基于GrainType和Grain Identity就可以得到集群中唯一確定的Grain。即 Unique Grain = Grain Type + Grain Identity。

Grain Lifecycle

Grain 的生命周期是由Silo管理的。主要分為以下幾個階段:

Grain Lifecycle
  • 其他Grain或Client調(diào)用目標(biāo)Grain
  • Silo運行時去激活Grain (若Grain是有狀態(tài)的,激活時會同時恢復(fù)狀態(tài))
  • Grain處理調(diào)用請求
  • Grain閑置
  • Silo運行時決定是否銷毀Grain
  • 銷毀Grain,從內(nèi)存中移除(若Grain是有狀態(tài)的,則需要先持久化Grain的狀態(tài),以便下次激活時恢復(fù)狀態(tài))

Grain的運行環(huán)境: Silo

Grain作為Orleans中的最小執(zhí)行單元,需要一個運行環(huán)境運行以暴露服務(wù),而Silo就是這樣一個角色存在。如果說Grain是最小粒度的執(zhí)行單元,那么Silo就是最小的向外提供服務(wù)的執(zhí)行單元。Silo通過將相關(guān)Grain進(jìn)行組裝,暴露一組服務(wù),并在運行時管理Grain的生命周期。

Silo的宿主:Orleans Server

Silo本質(zhì)上是一個進(jìn)程單元,是需要運行在操作系統(tǒng)之上的,因為.NET Core的跨平臺特性,所以可以運行在Windows、Linux或Mac系統(tǒng)中,當(dāng)然也可以運行在相應(yīng)的容器中。所以O(shè)rleans Server就是為Silo提供運行環(huán)境的宿主。

Silo的集群: Orleans Cluster

這里需要澄清一點,因為一個Orleans Server可以運行不同集群的Silo,所以O(shè)rleans Cluster 并非是指多個Orleans Server 組成的集群,而是指多個Silo(具有相同的ClusterId)組成的集群。Orleans通過內(nèi)置的成員協(xié)議提供集群管理,我們有時將其稱為Silo Membership。該協(xié)議的目標(biāo)是讓所有Silo(Orleans Server)就當(dāng)前活動的Silo集合達(dá)成一致,檢測故障Silo,并允許新的Silo加入集群。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • <<返回目錄 Grain 是 Orleans 中的重要素素。它是組成 Orleans 應(yīng)用程序的基本組成部分,具有...
    _黑冰_閱讀 1,527評論 0 2
  • <<返回目錄 可用性 我可以在我的項目中使用Orleans了嗎? 當(dāng)然可以,Orleans使用MIT協(xié)議開源,Nu...
    _黑冰_閱讀 2,028評論 0 1
  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,283評論 0 5
  • 引言 公司物聯(lián)網(wǎng)項目集成Orleans以支持高并發(fā)的分布式業(yè)務(wù),對于Orleans也是第一次接觸,本文就分享下個人...
    圣杰閱讀 2,453評論 1 13
  • 程序在運行過程中有時會莫名其妙出現(xiàn)代碼的某些約束或者執(zhí)行結(jié)果和理想狀況不一樣,正常邏輯怎么會出現(xiàn)這樣的情況?到底發(fā)...
    BeckJin閱讀 8,623評論 1 12

友情鏈接更多精彩內(nèi)容