日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Orleans 知多少 | 2. 核心概念一览 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Orleans 術(shù)語解讀

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

  • Grain

  • Silo

  • Orleans Cluster

  • Orleans Client

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

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

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

  • Orleans Server 提供Silo的運(yùn)行環(huán)境

  • 一個(gè)Server可以運(yùn)行多個(gè)Silo服務(wù)

  • 多個(gè)Silo組成一個(gè)Cluster集群

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

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

  • Orleans 的第一公民:Grain

    Grain 簡(jiǎn)介

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

    簡(jiǎn)單來說:Grain是一個(gè)可尋址的隔離的.NET對(duì)象實(shí)例

    分解來看:

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

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

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

  • Grain Identity

    在面向?qū)ο缶幊讨惺褂胣ew創(chuàng)建對(duì)象時(shí),獲取的引用可以表示其標(biāo)識(shí)的實(shí)例所有方面。但在分布式系統(tǒng)中,對(duì)象引用不能表示實(shí)例標(biāo)識(shí),因?yàn)橐猛ǔH限于單個(gè)地址空間。

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

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

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

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

    • long

    • GUID

    • string

    • GUID + string

    • long + string

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

    Grain Lifecycle

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

    • 其他Grain或Client調(diào)用目標(biāo)Grain

    • Silo運(yùn)行時(shí)去激活Grain (若Grain是有狀態(tài)的,激活時(shí)會(huì)同時(shí)恢復(fù)狀態(tài))

    • Grain處理調(diào)用請(qǐng)求

    • Grain閑置

    • Silo運(yùn)行時(shí)決定是否銷毀Grain

    • 銷毀Grain,從內(nèi)存中移除(若Grain是有狀態(tài)的,則需要先持久化Grain的狀態(tài),以便下次激活時(shí)恢復(fù)狀態(tài))

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

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

    Silo的宿主:Orleans Server

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

    Silo的集群:Orleans Cluster

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


    總結(jié)

    以上是生活随笔為你收集整理的Orleans 知多少 | 2. 核心概念一览的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。