書名: Orleans:構(gòu)建高性能分布式Actor服務作者名: 吳哲昊編著本章字數(shù): 684字更新時間: 2022-06-17 16:15:46
2.3 Grain的標識方法
Orleans應用程序中的Grain實例對象與面向?qū)ο蟪绦颍∣OP)中的類實例對象有著許多相似之處,例如,它們實際都存在于應用服務器內(nèi)存區(qū)塊中,外部服務都需要通過對象的“引用”訪問其內(nèi)部數(shù)據(jù)及方法。
在.NET、Java等OOP語言中,當開發(fā)人員使用new關鍵字創(chuàng)建一個對象實例時,運行時所返回的引用對象值即指向內(nèi)存區(qū)塊中的對象實例,外部服務可使用該地址訪問對象實例。相比而言,在Orleans運行時內(nèi),由于每一個Grain實例都虛擬存在于Orleans運行時內(nèi),外部服務在對任意Grain實例進行訪問時并不需要顯式地創(chuàng)建模板Grain實例,而僅需通向Orleans運行時傳遞該Grain實例的邏輯標識,在Orleans運行時內(nèi)部對該標識進行解析并完成Grain實例的尋址過程,并在服務集群中確定該Grain實例的實際位置(服務節(jié)點位置)即可。在Orleans中該邏輯標識被稱為Grain ID,開發(fā)人員可以使用一個全局唯一標識符(GUID)、長整數(shù)或字符串作為Grain實例的邏輯標識。
Orleans運行時采用了一個名為UniqueKey的內(nèi)部類作為每個Grain實例的邏輯標識鍵:

當程序使用GUID進行Grain尋址時,N0及N1分別由GUID字節(jié)數(shù)組的0~7及8~15位生成;采用長整數(shù)尋址時,N1即為地址值,同時N0恒為0。而TypeCodeData的最低4字節(jié)標識了其所標識的對象類別,UniqueKey類型編碼的定義見表2-1。
表2-1 UniqueKey類型編碼定義

UniqueKey中的KeyExt字段存儲了用戶為Grain實例指定的擴展字符串,該字段將與N0、N1及TypeCodeData字段一起作為Grain實例的邏輯標識,而當用戶僅使用自定義字符串進行尋址時,UniqueKey中的N0及N1字段將被自動置為0。
開發(fā)人員可以通過指定Grain服務接口類型的基類接口來定義Grain服務類型的標識方式。

在以上示例中,Worker接口展示了5種采用不同標識方式的Grain類型定義,在對Worker Grain發(fā)起服務請求時,調(diào)用方需要向Orleans運行時傳遞相應格式的Grain ID對Grain實例進行尋址,如:


- 深入淺出Java虛擬機:JVM原理與實戰(zhàn)
- C# 從入門到項目實踐(超值版)
- Haskell Data Analysis Cookbook
- Python算法指南:程序員經(jīng)典算法分析與實現(xiàn)
- 打開Go語言之門:入門、實戰(zhàn)與進階
- 零基礎學C語言第2版
- JavaScript動態(tài)網(wǎng)頁編程
- Lift Application Development Cookbook
- Python數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南(全彩)
- 寫給大家看的Midjourney設計書
- Java EE Web應用開發(fā)基礎
- MyBatis 3源碼深度解析
- 玩轉(zhuǎn).NET Micro Framework移植:基于STM32F10x處理器
- 移動智能系統(tǒng)測試原理與實踐
- 區(qū)塊鏈原理、架構(gòu)與應用(第2版)