Orleans是由微軟公司基于.NET平臺(tái)構(gòu)建的跨平臺(tái)、分布式開源應(yīng)用框架,可用于快速搭建面向大數(shù)據(jù)吞吐量和高并發(fā)場(chǎng)景的互聯(lián)網(wǎng)應(yīng)用服務(wù)。
《Orleans構(gòu)建高性能分布式Actor服務(wù)》主要介紹了虛擬Actor模型和Orleans運(yùn)行時(shí)、資源管理、消息傳遞、集群構(gòu)建、數(shù)據(jù)持久化及可靠性管理等組件,還對(duì)Orleans的流式處理、分布式事務(wù)、多集群配置與部署等功能進(jìn)行了介紹。全面介紹了Orleans 的主要功能與特點(diǎn),并結(jié)合實(shí)際互聯(lián)網(wǎng)應(yīng)用場(chǎng)景給出了多個(gè)應(yīng)用實(shí)例。
《Orleans構(gòu)建高性能分布式Actor服務(wù)》可作為軟件開發(fā)及測(cè)試工程師、架構(gòu)師在設(shè)計(jì)構(gòu)建分布式應(yīng)用服務(wù)時(shí)的參考用書,適合對(duì)大型互聯(lián)網(wǎng)應(yīng)用服務(wù)開發(fā)感興趣的讀者閱讀學(xué)習(xí),還可以作為大中專院校分布式軟件開發(fā)相關(guān)課程的教學(xué)用書。
隨著移動(dòng)通信技術(shù)的發(fā)展與普及,全球互聯(lián)網(wǎng)產(chǎn)業(yè)蓬勃發(fā)展,移動(dòng)互聯(lián)網(wǎng)場(chǎng)景下的實(shí)時(shí)在線服務(wù)已經(jīng)在社交、購(gòu)物、支付、娛樂、出行、醫(yī)療、政務(wù)等各個(gè)方面深刻改變了人們的日常生活。但與此同時(shí),移動(dòng)應(yīng)用服務(wù)用戶的爆炸式增長(zhǎng)也給應(yīng)用服務(wù)的開發(fā)與構(gòu)建帶來了新的挑戰(zhàn):開發(fā)人員一方面需要保證應(yīng)用服務(wù)在高并發(fā)場(chǎng)景下具有良好的伸縮性及可靠性,另一方面還需要根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景及功能設(shè)計(jì)變更,對(duì)應(yīng)用服務(wù)進(jìn)行快速迭代和更新。為了滿足上述需求,應(yīng)用服務(wù)的軟件架構(gòu)及業(yè)務(wù)模型都需要具備良好的擴(kuò)展性與通用性。
Actor模型作為針對(duì)高并發(fā)服務(wù)設(shè)計(jì)的編程模型,可以將復(fù)雜業(yè)務(wù)場(chǎng)景抽象并簡(jiǎn)化為多個(gè)簡(jiǎn)單獨(dú)立實(shí)體對(duì)象間的相互作用,它提供了對(duì)高吞吐量實(shí)時(shí)服務(wù)場(chǎng)景下的系統(tǒng)性能優(yōu)化策略,開發(fā)人員可以直接根據(jù)業(yè)務(wù)邏輯的聚合、從屬等關(guān)系快速搭建應(yīng)用服務(wù)。Orleans應(yīng)用服務(wù)框架于2015年1月開源,并于2021年4月發(fā)布了3.4.2版本,Orleans開發(fā)者社區(qū)已經(jīng)吸引了眾多軟件開發(fā)人員的關(guān)注,其所提出的虛擬Actor模型使開發(fā)人員能夠更加專注于應(yīng)用服務(wù)邏輯的設(shè)計(jì)而無須過多關(guān)注分布式系統(tǒng)內(nèi)諸如數(shù)據(jù)一致性、系統(tǒng)可靠性、業(yè)務(wù)吞吐量等通用組件的性能優(yōu)化問題,非常適用于快速搭建高性能應(yīng)用服務(wù),已成功應(yīng)用于多個(gè)大型互聯(lián)網(wǎng)服務(wù)系統(tǒng)中。
Orleans基于.NET Core運(yùn)行時(shí)開發(fā),具備原生的跨平臺(tái)部署能力,開發(fā)人員僅需完成簡(jiǎn)單的.NET Core運(yùn)行時(shí)配置即可開發(fā)并運(yùn)行Orleans分布式應(yīng)用服務(wù)。Orleans開發(fā)者社區(qū)還為開發(fā)人員提供了豐富多樣的擴(kuò)展程序組件,使Orleans應(yīng)用服務(wù)能夠與AWS、Azure、Google Cloud等公用云服務(wù)無縫集成,從而構(gòu)建適用于任意規(guī)模的面向各類互聯(lián)網(wǎng)場(chǎng)景的云服務(wù)應(yīng)用。
基于Orleans靈活便捷的開發(fā)能力,本書通過對(duì)Orleans運(yùn)行時(shí)的內(nèi)部組件原理及實(shí)際應(yīng)用服務(wù)搭建過程的介紹,幫助讀者迅速熟悉高并發(fā)場(chǎng)景下互聯(lián)網(wǎng)應(yīng)用服務(wù)的設(shè)計(jì)與開發(fā)過程。
本書特色
1.基于實(shí)際互聯(lián)網(wǎng)場(chǎng)景的應(yīng)用構(gòu)建實(shí)例
《Orleans構(gòu)建高性能分布式Actor服務(wù)》提供了多個(gè)以實(shí)際互聯(lián)網(wǎng)應(yīng)用場(chǎng)景為背景的實(shí)例,帶領(lǐng)讀者完成需求分析、模型設(shè)計(jì)、架構(gòu)優(yōu)化、代碼編寫和系統(tǒng)部署等完整的應(yīng)用服務(wù)搭建流程,從而讓讀者熟悉并領(lǐng)略O(shè)rleans應(yīng)用服務(wù)框架的便捷性。這些應(yīng)用構(gòu)建實(shí)例也可成為讀者在實(shí)際構(gòu)建與設(shè)計(jì)應(yīng)用系統(tǒng)時(shí)的參考。
2.深入淺出的技術(shù)體系介紹
《Orleans構(gòu)建高性能分布式Actor服務(wù)》的章節(jié)安排盡量做到了由淺至深。在對(duì)Actor模型與及Grain對(duì)象進(jìn)行講解時(shí),使用實(shí)際應(yīng)用場(chǎng)景作為類比,讓讀者能夠迅速理解其設(shè)計(jì)思路與特性;在對(duì)Orleans運(yùn)行時(shí)組件進(jìn)行介紹時(shí),詳細(xì)剖析了各類組件對(duì)象的作用與設(shè)計(jì)思路,使讀者能夠迅速了解Orleans運(yùn)行時(shí)各類功能的實(shí)現(xiàn)原理,并結(jié)合實(shí)際場(chǎng)景更好地利用Orleans的各項(xiàng)功能。
3.結(jié)合前沿技術(shù),貼近實(shí)戰(zhàn)
《Orleans構(gòu)建高性能分布式Actor服務(wù)》通過多個(gè)實(shí)例對(duì)Orleans應(yīng)用服務(wù)的搭建過程做了詳盡的介紹,并結(jié)合Azure云服務(wù)組件構(gòu)建了可直接應(yīng)用實(shí)際場(chǎng)景的互聯(lián)網(wǎng)服務(wù)。讀者既可以了解Azure公用云服務(wù)內(nèi)各類常用組件的特性,也可以在實(shí)際開發(fā)過程中利用Orleans框架優(yōu)秀的擴(kuò)展性快速與各類系統(tǒng)組件進(jìn)行集成開發(fā),按需搭建并優(yōu)化應(yīng)用服務(wù)。
本書內(nèi)容
《Orleans構(gòu)建高性能分布式Actor服務(wù)》共9章,主要內(nèi)容如下。
第1章主要介紹了Actor編程模型的特點(diǎn)與設(shè)計(jì)思路、.NET平臺(tái)與Orleans應(yīng)用框架的開發(fā)及應(yīng)用背景、虛擬Actor模型的概念及行業(yè)內(nèi)相關(guān)技術(shù)發(fā)展的趨勢(shì);第2章主要介紹了Orleans框架內(nèi)部的小處理單元Grain,包括Grain的服務(wù)模型、尋址方式、生命周期和內(nèi)部狀態(tài)存儲(chǔ)等概念,并介紹了Orleans框架對(duì)Grain對(duì)象的管理策略及狀態(tài)存儲(chǔ)API,同時(shí)結(jié)合自動(dòng)售貨機(jī)庫(kù)存管理示例,展示了如何利用Grain狀態(tài)按需維護(hù)并存儲(chǔ)業(yè)務(wù)數(shù)據(jù);第3章主要介紹了Orleans運(yùn)行時(shí)組件的基本架構(gòu)模型、任務(wù)調(diào)度模型及單線程執(zhí)行語義的實(shí)現(xiàn)方式,以及Orleans運(yùn)行時(shí)內(nèi)部組件(Grain對(duì)象及Silo服務(wù)節(jié)點(diǎn))的生命周期管理的實(shí)現(xiàn)方式;第4章主要介紹了Orleans運(yùn)行時(shí)內(nèi)數(shù)據(jù)傳輸過程,包括消息對(duì)象格式、運(yùn)行時(shí)序列化管理器、連接對(duì)象與網(wǎng)關(guān)服務(wù)和消息中心與調(diào)度策略,以及Orleans運(yùn)行時(shí)內(nèi)部的遠(yuǎn)程過程調(diào)用流程;第5章主要介紹了Orleans的流式處理功能的相關(guān)內(nèi)容,包括虛擬數(shù)據(jù)流的實(shí)現(xiàn)、數(shù)據(jù)的訂閱與發(fā)布及相關(guān)流式處理API的特性及應(yīng)用場(chǎng)景,并通過系統(tǒng)狀態(tài)的遙測(cè)與監(jiān)控示例展示了Orleans流式處理的特點(diǎn);第6章主要介紹了Orleans框架的多種高級(jí)功能,包括異步任務(wù)處理、Grain請(qǐng)求攔截器、多種特殊類型的Grain對(duì)象、事件溯源模型、分布式事務(wù)及多集群Orleans應(yīng)用服務(wù)等;第7章主要介紹了Orleans集群的構(gòu)建過程及相關(guān)組件,包括Membership協(xié)議、集群內(nèi)負(fù)責(zé)均衡和多版本服務(wù)接口管理,并對(duì)分布式應(yīng)用服務(wù)升級(jí)策略及Orleans性能監(jiān)控方式進(jìn)行了介紹;第8章通過4個(gè)實(shí)際案例詳細(xì)介紹了基于Orleans框架搭建互聯(lián)網(wǎng)應(yīng)用服務(wù)的實(shí)踐和構(gòu)建流程。例如,通過工單處理系統(tǒng)及企業(yè)會(huì)議管理系統(tǒng)實(shí)例介紹了如何使用聯(lián)合托管(Co-hosting)技術(shù)搭建基于ASP.NET Core Web API的Orleans Web應(yīng)用服務(wù),通過網(wǎng)頁(yè)流量計(jì)數(shù)及活躍度獎(jiǎng)勵(lì)系統(tǒng)展示了如何利用Orleans流式處理功能快速構(gòu)建實(shí)時(shí)數(shù)據(jù)處理應(yīng)用等;第9章主要介紹了通過云平臺(tái)構(gòu)建Orleans應(yīng)用服務(wù)的方法,以及構(gòu)建容器化分布式Orleans應(yīng)用服務(wù)的步驟,介紹了與Orleans框架類似的Azure Service Fabric Reliable Actors應(yīng)用程序框架的編程模型,并通過共享單車管理平臺(tái)示例展示了利用Orleans框架的擴(kuò)展能力,以及基于各類Azure云服務(wù)組件快速搭建大型互聯(lián)網(wǎng)應(yīng)用服務(wù)平臺(tái)的完整設(shè)計(jì)、部署、維護(hù)和持續(xù)集成過程。
關(guān)于作者
《Orleans構(gòu)建高性能分布式Actor服務(wù)》由吳哲昊編寫,蘇寶君、顧雨婷、周新宇、彭亦然、李持航和葉心靜等人參與了文稿的審核和校對(duì),在此感謝家人、同學(xué)和同事們?cè)诒緯帉懫陂g所給予的大力支持。
另外,在本書編寫期間,還得到了張淑謙編輯的悉心指導(dǎo),他對(duì)書稿的審核和建議,使得本書能夠以更加清晰易懂的語言及章節(jié)編排出版,在此表示深深的感謝!
雖然我們對(duì)書中所述內(nèi)容都盡量核實(shí),并多次進(jìn)行了文字校對(duì),但因水平所限,本書出現(xiàn)疏漏在所難免,敬請(qǐng)各位同行專家及讀者指正批評(píng),作者的郵箱:zhehao.wu@foxmail.com。
作 者
吳哲昊,資深后端技術(shù)專家,曾任微軟(亞洲)互聯(lián)網(wǎng)工程院高級(jí)研發(fā)工程師,現(xiàn)就職于北京字節(jié)跳動(dòng)科技有限公司;開源技術(shù)的積極倡導(dǎo)者與貢獻(xiàn)者;具有豐富的服務(wù)端系統(tǒng)設(shè)計(jì)及搭建經(jīng)驗(yàn),對(duì)基于云計(jì)算平臺(tái)的分布式軟件架構(gòu)設(shè)計(jì)與開發(fā)有著深入的研究;熱衷于大數(shù)據(jù)、高并發(fā)業(yè)務(wù)場(chǎng)景下的可伸縮架構(gòu)設(shè)計(jì)與高可靠性系統(tǒng)的實(shí)現(xiàn)與優(yōu)化。
第1章 Orleans與Actor編程模型/
1.1 什么是Actor編程模型/
1.2 .NET平臺(tái)與Orleans服務(wù)框架/
1.3 Orleans的應(yīng)用現(xiàn)狀及相關(guān)資源/
1.4 本章小結(jié)/
第2章 Grain的定義與實(shí)現(xiàn)/
2.1 Grain的定義/
2.2 Grain的服務(wù)模型/
2.2.1 服務(wù)接口與實(shí)現(xiàn)/
2.2.2 Grain服務(wù)的調(diào)用/
2.3 Grain的標(biāo)識(shí)方法/
2.4 Grain的內(nèi)部狀態(tài)與生命周期管理/
2.4.1 Grain的喚醒與休眠/
2.4.2 顯式控制Grain狀態(tài)/
2.5 Grain的狀態(tài)保存/
2.5.1 Grain內(nèi)部狀態(tài)的持久化/
2.5.2 狀態(tài)同步API/
2.5.3 狀態(tài)持久化服務(wù)的注冊(cè)/
2.5.4 自定義狀態(tài)讀寫邏輯的實(shí)現(xiàn)/
2.5.5 IGrainState接口中的狀態(tài)版本約束/
2.5.6 定義狀態(tài)的序列化選項(xiàng)/
2.6 案例:自動(dòng)售貨機(jī)的庫(kù)存管理/
2.7 本章小結(jié)/
第3章 任務(wù)調(diào)度與組件生命周期管理/
3.1 Orleans運(yùn)行時(shí)/
3.2 任務(wù)模型及調(diào)度管理/
3.2.1 .NET任務(wù)調(diào)度器與內(nèi)置線程池/
3.2.2 Orleans任務(wù)調(diào)度器/
3.3 Orleans對(duì)象的生命管理/
3.3.1 Grain的運(yùn)行時(shí)管理/
3.3.2 Silo的生命周期管理/
3.4 本章小結(jié)/
第4章 數(shù)據(jù)傳輸與遠(yuǎn)程過程調(diào)用/
4.1 Orleans數(shù)據(jù)傳輸協(xié)議/
4.1.1 Orleans消息對(duì)象/
4.1.2 Orleans序列化管理器/
4.2 Orleans消息處理模型/
4.2.1 連接與網(wǎng)關(guān)/
4.2.2 消息中心與調(diào)度器/
4.3 Orleans的遠(yuǎn)程過程調(diào)用/
4.3.1 Grain的引用對(duì)象/
4.3.2 Grain實(shí)例尋址/
4.3.3 Orleans的RPC過程/
4.4 本章小結(jié)/
第5章 Orleans構(gòu)建高性能分布式Actor服務(wù)流式處理/
5.1 數(shù)據(jù)的流式處理/
5.2 Orleans流式處理系統(tǒng)/
5.2.1 設(shè)計(jì)目標(biāo)/
5.2.2 系統(tǒng)模型/
5.2.3 Orleans數(shù)據(jù)流的實(shí)現(xiàn)/
5.2.4 數(shù)據(jù)流的發(fā)布與訂閱/
5.3 Orleans流式處理API/
5.3.1 系統(tǒng)組件初始化/
5.3.2 異步數(shù)據(jù)流及消息接口/
5.3.3 消息的訂閱與發(fā)布/
5.3.4 定序消息與序列Token/
5.3.5 可回溯數(shù)據(jù)流/
5.4 案例:系統(tǒng)狀態(tài)遙測(cè)與監(jiān)控/
5.5 本章小結(jié)/
第6章 Orleans高級(jí)功能/
6.1 異步任務(wù)/
6.1.1 異步任務(wù)的調(diào)用/
6.1.2 異步任務(wù)的中斷與取消/
6.2 Grain請(qǐng)求攔截器/
6.2.1 入站消息攔截器/
6.2.2 出站消息攔截器/
6.3 Grain的派生類型/
6.3.1 可重入Grain/
6.3.2 Grain服務(wù)/
6.3.3 定時(shí)器與通知服務(wù)/
6.3.4 無狀態(tài)工作者Grain/
6.4 事件溯源/
6.4.1 日志一致性協(xié)議/
6.4.2 JournaledGrain類/
6.4.3 事件提交策略及多實(shí)例同步/
6.4.4 級(jí)聯(lián)事件通知及性能診斷/
6.4.5 服務(wù)配置及使用/
6.5 分布式事務(wù)/
6.5.1 事務(wù)服務(wù)接口的聲明/
6.5.2 支持事務(wù)服務(wù)的Grain實(shí)現(xiàn)/
6.6 多集群Orleans應(yīng)用/
6.6.1 多集群應(yīng)用模型/
6.6.2 Gossip傳輸協(xié)議/
6.6.3 集群配置/
6.6.4 多集群Grain單例策略配置/
6.7 本章小結(jié)/
第7章 構(gòu)建Orleans服務(wù)集群/
7.1 Orleans集群搭建/
7.1.1 啟動(dòng)任務(wù)/
7.1.2 Silo服務(wù)的優(yōu)雅關(guān)閉/
7.2 服務(wù)注冊(cè)與協(xié)調(diào)/
7.2.1 Membership協(xié)議/
7.2.2 集群負(fù)載均衡/
7.3 服務(wù)接口版本管理/
7.3.1 接口版本與兼容性/
7.3.2 運(yùn)行時(shí)版本選擇/
7.3.3 服務(wù)升級(jí)與高可用性保證/
7.4 異構(gòu)Orleans應(yīng)用服務(wù)/
7.5 集群性能監(jiān)控/
7.6 本章小結(jié)/
第8章 構(gòu)建Orleans應(yīng)用服務(wù)/
8.1 搭建Orleans系統(tǒng)的實(shí)踐/
8.1.1 Orleans系統(tǒng)的項(xiàng)目結(jié)構(gòu)/
8.1.2 Grain的設(shè)計(jì)與實(shí)現(xiàn)/
8.1.3 運(yùn)行時(shí)服務(wù)監(jiān)控/
8.1.4 系統(tǒng)故障處理/
8.1.5 功能測(cè)試/
8.1.6 應(yīng)用部署與集群管理/
8.2 搭建Web應(yīng)用服務(wù)/
8.2.1 案例:工單處理系統(tǒng)/
8.2.2 案例:企業(yè)會(huì)議管理系統(tǒng)/
8.3 搭建流式數(shù)據(jù)處理服務(wù)/
8.3.1 案例:網(wǎng)頁(yè)流量計(jì)數(shù)/
8.3.2 案例:應(yīng)用內(nèi)活躍度獎(jiǎng)勵(lì)系統(tǒng)/
8.4 本章小結(jié)/
第9章 Orleans與云服務(wù)/
9.1 使用云平臺(tái)構(gòu)建Orleans應(yīng)用/
9.2 搭建容器化Orleans服務(wù)/
9.2.1 構(gòu)建Orleans應(yīng)用服務(wù)鏡像/
9.2.2 搭建容器化Orleans服務(wù)集群/
9.3 Azure Service Fabric Reliable Actors應(yīng)用程序框架/
9.3.1 Service Fabric與Reliable Services框架/
9.3.2 Reliable Actors模型/
9.4 案例:基于Azure公有云服務(wù)構(gòu)建共享單車管理平臺(tái)/
9.4.1 系統(tǒng)功能及流程設(shè)計(jì)/
9.4.2 相關(guān)Azure服務(wù)介紹/
9.4.3 實(shí)現(xiàn)應(yīng)用服務(wù)平臺(tái)/
9.4.4 搭建可靠的應(yīng)用服務(wù)集群/
9.5 本章小結(jié)/