關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
云計(jì)算架構(gòu)設(shè)計(jì)模式
本書(shū)主要介紹了云計(jì)算時(shí)代、zui經(jīng)典的24種架構(gòu)設(shè)計(jì)模式,包含基于云平臺(tái)設(shè)計(jì)架構(gòu)面臨的問(wèn)題以及典型的解決方案,另外還有10個(gè)架構(gòu)設(shè)計(jì)指南。
24種經(jīng)典的設(shè)計(jì)模式包括高并發(fā)、健康健康、消息編排、架構(gòu)伸縮、緩存、消息推送、大數(shù)據(jù)存儲(chǔ)和優(yōu)化、安全令牌等架構(gòu)設(shè)計(jì)的關(guān)鍵問(wèn)題,是一本zui近幾年難得的架構(gòu)與設(shè)計(jì)模式圖書(shū)。
本書(shū)內(nèi)容不受編程語(yǔ)言限制,可以根據(jù)需要使用.NET、Java、PHP、Node.js、Go等。云計(jì)算平臺(tái)可以是Azure、AWS、阿里云等共有云,也可以是私有云平臺(tái)。
推薦本書(shū)給高級(jí)工程師、運(yùn)維工程師、架構(gòu)師、技術(shù)經(jīng)理、技術(shù)總監(jiān)、CTO學(xué)習(xí)使用。
架構(gòu)即未來(lái)
移動(dòng)互聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)時(shí)代,面臨更多的技術(shù)挑戰(zhàn)問(wèn)題,設(shè)計(jì)模式已經(jīng)從單一的OO問(wèn)題領(lǐng)域向外擴(kuò)張延伸,設(shè)計(jì)模式的范疇不會(huì)局限于語(yǔ)言本身,更多擴(kuò)展到架構(gòu)設(shè)計(jì)領(lǐng)域 我個(gè)人對(duì)編程語(yǔ)言沒(méi)有偏見(jiàn),它們各有所長(zhǎng),大家互相學(xué)習(xí)。有實(shí)力的程序員不需要通過(guò)編程語(yǔ)言來(lái)找優(yōu)越感,都在踏實(shí)地研究技術(shù)。我接觸的優(yōu)秀程序員無(wú)論是對(duì)C++、Java,還是對(duì)C#等都沒(méi)有編程語(yǔ)言的歧視。況且底層的算法、數(shù)據(jù)結(jié)構(gòu)和設(shè)計(jì)模式都沒(méi)有編程語(yǔ)言限制。 架構(gòu)師和技術(shù)專家 程序員中的精英群體,技術(shù)領(lǐng)袖,也是公司中受人尊敬的群體。 十年磨一劍 精華知識(shí) 本書(shū)介紹了云計(jì)算時(shí)代、zui經(jīng)典的24種架構(gòu)設(shè)計(jì)模式,包含基于云平臺(tái)設(shè)計(jì)架構(gòu)面臨的問(wèn)題以及典型的解決方案,另外還有10個(gè)架構(gòu)設(shè)計(jì)指南。 24種經(jīng)典的設(shè)計(jì)模式包括:高并發(fā)、健康健康、消息編排、架構(gòu)伸縮、緩存、消息推送、大數(shù)據(jù)存儲(chǔ)和優(yōu)化、安全令牌等架構(gòu)設(shè)計(jì)的關(guān)鍵問(wèn)題,是一本zui近幾年難得的架構(gòu)與設(shè)計(jì)模式圖書(shū)。 本書(shū)內(nèi)容不受編程語(yǔ)言限制,可以根據(jù)需要使用.NET、Java、PHP、Node.js、Go等。云計(jì)算平臺(tái)可以是Azure、AWS、阿里云等共有云,也可以是私有云平臺(tái)。 推薦本書(shū)給高級(jí)工程師、運(yùn)維工程師、架構(gòu)師、技術(shù)經(jīng)理、技術(shù)總監(jiān)、CTO學(xué)習(xí)使用。
序言
Preface 本書(shū)由微軟模式與實(shí)踐小組(微軟P&P小組)親自打造,得到了許多社區(qū)開(kāi)發(fā)者的支持,為開(kāi)發(fā)基于云計(jì)算架構(gòu)的應(yīng)用程序常見(jiàn)問(wèn)題提供了解決方案。 本書(shū)指南 ? 介紹實(shí)現(xiàn)云計(jì)算應(yīng)用時(shí),尤其是托管在Azure云平臺(tái)時(shí)使用這些設(shè)計(jì)模式的好處。 ? 討論云計(jì)算設(shè)計(jì)模式的經(jīng)典問(wèn)題和解決方案,以及它們?nèi)绾闻cAzure關(guān)聯(lián)到一起。 ? 展示如何使用Azure功能實(shí)現(xiàn)這些模式,強(qiáng)調(diào)其優(yōu)點(diǎn)與顧慮。 ? 通過(guò)描述如何把這些設(shè)計(jì)模式應(yīng)用到云計(jì)算應(yīng)用架構(gòu)中以及它們之間的關(guān)系來(lái)描繪知識(shí)體系的宏偉藍(lán)圖。 本書(shū)介紹的主題適用于所有的分布式系統(tǒng),無(wú)論是托管在Azure中還是其他云計(jì)算平臺(tái)中。 我們的目的并非提供設(shè)計(jì)模式的詳盡集合,而是選擇了對(duì)云計(jì)算應(yīng)用zui有用處的設(shè)計(jì)模式——尤其考慮到在用戶中的流行度。本書(shū)不是詳細(xì)介紹Azure平臺(tái)功能的指南。要學(xué)習(xí)Azure可以參考http://azure.com。 本書(shū)內(nèi)容 結(jié)合開(kāi)發(fā)社區(qū)的代表性反饋,我們把云計(jì)算應(yīng)用開(kāi)發(fā)領(lǐng)域zui常見(jiàn)的問(wèn)題歸納為8類。 類別 描述 可用性 可用性定義為系統(tǒng)正常工作的時(shí)間比例。它受系統(tǒng)錯(cuò)誤、基礎(chǔ)架構(gòu)問(wèn)題、各種工具以及系統(tǒng)負(fù)載的影響。通常根據(jù)系統(tǒng)正常運(yùn)行的時(shí)間來(lái)衡量。云計(jì)算應(yīng)用為用戶提供了服務(wù)級(jí)別協(xié)議(SLA),它指的是應(yīng)用程序必須以zui大化可用性的方式設(shè)計(jì)和實(shí)現(xiàn) 數(shù)據(jù)管理 數(shù)據(jù)管理是云應(yīng)用的關(guān)鍵部分,并且影響質(zhì)量特性。由于諸如性能、伸縮性或者可用性等原因,數(shù)據(jù)通常存儲(chǔ)在不同服務(wù)器的不同位置上,這些也會(huì)帶來(lái)新的挑戰(zhàn)。例如,數(shù)據(jù)一致性必須是可維護(hù)的,并且數(shù)據(jù)需要進(jìn)行跨區(qū)域同步 續(xù)表 類別 描述 設(shè)計(jì)和實(shí)現(xiàn) 良好的設(shè)計(jì)會(huì)在組件設(shè)計(jì)和部署里包含諸如一致性和內(nèi)聚性、簡(jiǎn)化管理和部署的可維護(hù)性,以及允許組件和子系統(tǒng)被其他應(yīng)用使用的重用性。設(shè)計(jì)和實(shí)現(xiàn)階段的決策對(duì)于云計(jì)算應(yīng)用和服務(wù)的總體質(zhì)量及成本有重大影響 消息 云計(jì)算應(yīng)用的分布式特性需要一個(gè)連接組件和服務(wù)的消息基礎(chǔ)架構(gòu),理想情況下是松耦合方式,便于zui大化伸縮性。異步消息被廣泛使用,而且提供了許多好處,同時(shí)也帶來(lái)了許多挑戰(zhàn),比如消息順序、毒消息管理、冪等性等 管理和監(jiān)控 云計(jì)算應(yīng)用運(yùn)行在遠(yuǎn)程數(shù)據(jù)中心中,我們無(wú)法完全控制基礎(chǔ)架構(gòu)或者操作系統(tǒng)。相比私有云,這種情況使得管理工作更加困難。只有應(yīng)用暴露運(yùn)行時(shí)的信息,管理員和運(yùn)營(yíng)人員才可以管理和監(jiān)控系統(tǒng);只有支持修改業(yè)務(wù)需求和自定義,才不需要應(yīng)用停止和創(chuàng)新部署 性能和伸縮性 性能是系統(tǒng)執(zhí)行特性操作的響應(yīng)性指標(biāo),而伸縮性是系統(tǒng)處理新增壓力但不會(huì)影響性能與可用性的能力。云計(jì)算應(yīng)用通常會(huì)遇到變化的工作負(fù)載和峰值,這種情況通過(guò)不可預(yù)測(cè),特別是在多租戶場(chǎng)景下。相反,應(yīng)用應(yīng)該能夠通過(guò)伸縮來(lái)滿足峰值的需要,而且當(dāng)需要下降時(shí)回退。伸縮性不只是關(guān)注計(jì)算實(shí)例,還關(guān)注其他要素,比如數(shù)據(jù)存儲(chǔ)、消息基礎(chǔ)架構(gòu)等 彈性 彈性是系統(tǒng)優(yōu)雅地處理錯(cuò)誤和恢復(fù)系統(tǒng)的能力。云計(jì)算主機(jī)的基本特性為:應(yīng)用通常是多租戶的,使用共享平臺(tái)服務(wù),競(jìng)爭(zhēng)資源和帶寬,通過(guò)互聯(lián)網(wǎng)通信,運(yùn)行在商用硬件上。這意味著將會(huì)出現(xiàn)更多短暫和永久的錯(cuò)誤。探測(cè)錯(cuò)誤,并快速和高效地恢復(fù)對(duì)于維護(hù)彈性來(lái)說(shuō)必不可少 安全 安全是系統(tǒng)阻止設(shè)計(jì)使用范圍外的惡意和意外操作的能力,是阻止泄露和丟失數(shù)據(jù)的能力。云計(jì)算應(yīng)用暴露在互聯(lián)網(wǎng)上,跨越信任的私有云環(huán)境邊界,通常對(duì)外開(kāi)放,因此可能會(huì)出現(xiàn)不信任的用戶。應(yīng)用必須以安全的方式設(shè)計(jì)和部署,避免惡意攻擊,限制只有支持的用戶可以訪問(wèn),并且保護(hù)敏感數(shù)據(jù) 對(duì)于每個(gè)類別,我們都創(chuàng)建了關(guān)聯(lián)的指南和文檔,以幫助開(kāi)發(fā)者解決常見(jiàn)的共同問(wèn)題。這些包括以下3方面內(nèi)容。 ? 24種設(shè)計(jì)模式。這是云托管應(yīng)用非常有用的24種設(shè)計(jì)模式。每個(gè)設(shè)計(jì)模式提供了描述上下文及其問(wèn)題,解決方案及其問(wèn)題,使用模式的公共格式,以及基于Azure平臺(tái)的例子。每種模式也包含連接到其他相關(guān)模式的鏈接。 ? 10個(gè)指南主題。提供了開(kāi)發(fā)云計(jì)算應(yīng)用所需的基本知識(shí)、實(shí)踐經(jīng)驗(yàn)與技巧。每個(gè)主題都詳實(shí)地介紹了這些知識(shí)。 ? 例子程序。演示了設(shè)計(jì)模式的使用過(guò)程。我們可以使用這些代碼參考設(shè)計(jì)自己特定的需求代碼。 設(shè)計(jì)模式 設(shè)計(jì)模式被分配到一個(gè)或者多個(gè)類別中。完整的設(shè)計(jì)模式列表如下所示。 模式 描述 緩存駐留模式 根據(jù)需要從數(shù)據(jù)存儲(chǔ)器加載數(shù)據(jù)。此模式可以用來(lái)改進(jìn)性能,還可以用于維護(hù)緩存和后臺(tái)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)一致性 斷路器模式 當(dāng)連接遠(yuǎn)程服務(wù)或資源時(shí),可能導(dǎo)致不定時(shí)間恢復(fù)系統(tǒng)的錯(cuò)誤。此模式可以用于改進(jìn)系統(tǒng)的穩(wěn)定性和彈性 事務(wù)補(bǔ)償模式 如果一個(gè)或者多個(gè)操作失敗,就會(huì)取消執(zhí)行的一系列工作,它定義了一組zui終一致性模型的操作。遵從zui終一致性模型的操作在云托管應(yīng)用中非常常見(jiàn),通常都會(huì)實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)過(guò)程和工作流 競(jìng)爭(zhēng)消費(fèi)者模式 允許多個(gè)并發(fā)的消費(fèi)者在相同的消息通道上處理接收的消息。此模式允許系統(tǒng)并發(fā)處理多個(gè)消息以優(yōu)化系統(tǒng)的吞吐量,改進(jìn)系統(tǒng)的伸縮性和可用性,平衡工作負(fù)載 計(jì)算資源合并模式 合并多個(gè)任務(wù)或者操作到單個(gè)計(jì)算單元里。此模式可以增加計(jì)算資源的使用率,降低云計(jì)算應(yīng)用中計(jì)算處理的成本和管理開(kāi)銷 命令和職責(zé)分離(CQRS)模式 通過(guò)隔離接口來(lái)分離更新和讀操作。此模式可以zui大化性能、伸縮性和安全性,通過(guò)高度的靈活性支持系統(tǒng)的進(jìn)化,在領(lǐng)域級(jí)別阻止引起合并沖突的更新命令 事件源模式 使用只能追加的存儲(chǔ)庫(kù)來(lái)記錄領(lǐng)域里發(fā)生在數(shù)據(jù)庫(kù)方面的完整操作事件序列,而不是僅僅保存當(dāng)前狀態(tài),讓存儲(chǔ)庫(kù)可以用來(lái)創(chuàng)建特定的對(duì)象狀態(tài)。此模式可以通過(guò)避免同步數(shù)據(jù)模型和業(yè)務(wù)模型的需求來(lái)簡(jiǎn)化復(fù)雜領(lǐng)域里的任務(wù),改進(jìn)性能、伸縮性和響應(yīng)性,提供事務(wù)性數(shù)據(jù)的一致性,維護(hù)可以支持補(bǔ)償操作的完整審計(jì)追蹤和歷史信息 外部配置存儲(chǔ)模式 把配置信息從應(yīng)用部署包移動(dòng)到一個(gè)中心位置。此模式可以提供更簡(jiǎn)單的管理和配置數(shù)據(jù)控制、跨應(yīng)用和應(yīng)用實(shí)例共享配置的機(jī)會(huì) 聯(lián)合身份模式 把驗(yàn)證委托給一個(gè)外部身份標(biāo)識(shí)提供器。此模式可以簡(jiǎn)化部署,zui小化用戶管理的需求,并且改進(jìn)應(yīng)用的用戶體驗(yàn) 門(mén)衛(wèi)模式 通過(guò)在客戶端和應(yīng)用與服務(wù)之間使用特定的作為代理的宿主實(shí)例來(lái)保護(hù)應(yīng)用和服務(wù),驗(yàn)證并保護(hù)請(qǐng)求,且在它們之間傳遞請(qǐng)求消息。此模式可以提供額外的安全層,并且降低系統(tǒng)受攻擊的層面 健康終結(jié)點(diǎn)監(jiān)控模式 在應(yīng)用中實(shí)現(xiàn)功能檢查,可以通過(guò)暴露的終結(jié)點(diǎn)定時(shí)訪問(wèn)監(jiān)控?cái)?shù)據(jù)。此模式可以幫助檢驗(yàn)應(yīng)用和服務(wù)是否正確執(zhí)行 索引表模式 在頻繁訪問(wèn)的數(shù)據(jù)存儲(chǔ)庫(kù)特定字段上出aung時(shí)就索引。此模式可以通過(guò)允許應(yīng)用更快速地從數(shù)據(jù)存儲(chǔ)庫(kù)查詢數(shù)據(jù)改進(jìn)查詢性能 續(xù)表 模式 描述 領(lǐng)導(dǎo)選舉模式 選舉一個(gè)實(shí)例作為領(lǐng)導(dǎo)來(lái)承擔(dān)管理其他實(shí)例的職責(zé),讓其協(xié)調(diào)分布式節(jié)點(diǎn)的任務(wù)執(zhí)行。此模式可以幫助確保任務(wù)不會(huì)與其他任務(wù)沖突,避免資源爭(zhēng)用,或者被其他執(zhí)行的任務(wù)干擾 物化視圖模型 當(dāng)數(shù)據(jù)格式并非查詢操作期望的格式時(shí),提前為一個(gè)或者多個(gè)數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)生成視圖。此模式可以幫助實(shí)現(xiàn)高效查詢和數(shù)據(jù)提取,改進(jìn)應(yīng)用程序的性能 管道和過(guò)濾器模式 把一個(gè)復(fù)雜的任務(wù)分解為一系列可以單獨(dú)執(zhí)行的可重用的任務(wù)元素。此模式可以通過(guò)獨(dú)立部署和伸縮任務(wù)元素來(lái)改進(jìn)性能、伸縮性和可重用性 優(yōu)先級(jí)隊(duì)列模式 為發(fā)送給服務(wù)的請(qǐng)求消息設(shè)置優(yōu)先級(jí),這樣高優(yōu)先級(jí)的請(qǐng)求可以被更快地處理。此模式在給獨(dú)立類型的客戶端提供不同服務(wù)級(jí)別擔(dān)保時(shí)非常有用 基于隊(duì)列的負(fù)載均衡模式 在任務(wù)和調(diào)用的服務(wù)之間使用隊(duì)列作為緩沖區(qū)來(lái)平滑斷斷續(xù)續(xù)的可能導(dǎo)致服務(wù)失敗或者任務(wù)超時(shí)的超量負(fù)載。此模式可以幫助zui小化峰值壓力對(duì)于任務(wù)和服務(wù)的可用性和響應(yīng)能力的影響 重試模式 當(dāng)連接服務(wù)或者網(wǎng)絡(luò)資源時(shí),通過(guò)允許短暫錯(cuò)誤重試操作來(lái)允許應(yīng)用程序處理臨時(shí)的失敗。此模式可以用來(lái)改進(jìn)應(yīng)用的穩(wěn)定性 運(yùn)行時(shí)重配置模式 設(shè)計(jì)應(yīng)用程序使其可以無(wú)需重新部署,或者重新啟動(dòng)應(yīng)用來(lái)重新配置。這可以用于維護(hù)可用性和zui小化宕機(jī)時(shí)間 調(diào)度器代理監(jiān)控模式 協(xié)調(diào)跨分布式服務(wù)和其他資源的集合。如果某個(gè)操作失敗,則嘗試透明地處理錯(cuò)誤;或者如果系統(tǒng)無(wú)法從錯(cuò)誤中恢復(fù),則取消執(zhí)行工作產(chǎn)生的影響。此模式可以通過(guò)對(duì)短暫異常、長(zhǎng)期錯(cuò)誤和處理錯(cuò)誤啟用恢復(fù)和重試操作增加系統(tǒng)的彈性 分片模式 把數(shù)據(jù)庫(kù)水平分割為不同的區(qū)片進(jìn)行存儲(chǔ)。當(dāng)存儲(chǔ)和訪問(wèn)海量數(shù)據(jù)時(shí),此模式可以改進(jìn)伸縮性 靜態(tài)內(nèi)容托管模式 部署靜態(tài)內(nèi)容到可以直接發(fā)送給客戶端的云端存儲(chǔ)服務(wù)上。此模式可以減少對(duì)于昂貴計(jì)算實(shí)例的需求 限流模式 控制單個(gè)應(yīng)用實(shí)例、單個(gè)租戶或者整個(gè)服務(wù)消耗的資源數(shù)量。此模式可以允許系統(tǒng)繼續(xù)工作,并且滿足服務(wù)級(jí)別協(xié)議,甚至對(duì)資源增加極限負(fù)載時(shí)也可以正常工作 令牌模式 為了在應(yīng)用程序代碼里支持卸載數(shù)據(jù)傳輸操作,使用令牌或者秘鑰來(lái)限制對(duì)特定資源或服務(wù)的訪問(wèn)。此模式在使用云托管存儲(chǔ)系統(tǒng)或者隊(duì)列時(shí)特別有用,并且可以zui小化成本,zui大化伸縮性和性能 主題 這些主題與特定的應(yīng)用程序開(kāi)發(fā)相關(guān),如下圖所示。 這個(gè)指南包含下面的主題。 主題 描述 異步消息通信指南 消息通信是許多分布式系統(tǒng)采用的關(guān)鍵策略,比如云計(jì)算。它允許應(yīng)用和服務(wù)彼此通信并協(xié)同工作,且可以幫助構(gòu)建可伸縮的和彈性的解決方案。消息通信支持異步操作,允許我們解耦服務(wù)調(diào)用和宿主進(jìn)程 自動(dòng)化伸縮指南 持續(xù)監(jiān)控性能和伸縮系統(tǒng)以適應(yīng)波動(dòng)的工作負(fù)載、滿足目標(biāo)需求并且優(yōu)化運(yùn)營(yíng)成本,這個(gè)過(guò)程可能需要大量的人力成本。這些工作可能無(wú)法人工完成。這也是自動(dòng)化伸縮的用武之地 緩存指南 緩存是一種常見(jiàn)的改進(jìn)系統(tǒng)性能和伸縮性的技術(shù),它通過(guò)把高頻率訪問(wèn)的數(shù)據(jù)拷貝到接近應(yīng)用的數(shù)據(jù)存儲(chǔ)區(qū)中來(lái)實(shí)現(xiàn)加速。緩存當(dāng)應(yīng)用程序重復(fù)讀取相同的數(shù)據(jù)時(shí)zui高效,特別是原始數(shù)據(jù)存儲(chǔ)區(qū)的速度相對(duì)緩存較慢的時(shí)候,它受制于高級(jí)別的爭(zhēng)用,或者說(shuō)它不會(huì)導(dǎo)致網(wǎng)絡(luò)延遲 計(jì)算分區(qū)指南 當(dāng)部署應(yīng)用程序到云端時(shí),很可能采用把服務(wù)和組件根據(jù)使用情況分別部署的方式,以便在維護(hù)伸縮性、性能、可用性和應(yīng)用安全時(shí)zui小化運(yùn)行成本 數(shù)據(jù)一致性指南 云應(yīng)用通常使用的數(shù)據(jù)分散存儲(chǔ)在不同的存儲(chǔ)區(qū)里。管理和維護(hù)數(shù)據(jù)一致性變得尤為重要,尤其是出現(xiàn)并發(fā)性和可用性問(wèn)題時(shí)。我們通常需要在并發(fā)性和一致性之間取舍。這意味著我們?cè)谠O(shè)計(jì)解決方案時(shí)會(huì)考慮zui終一致性,而不會(huì)追求應(yīng)用程序所有時(shí)刻都處于完全一致性狀態(tài) 數(shù)據(jù)分區(qū)指南 在許多大型伸縮解決方案中,數(shù)據(jù)被分割到不同的可以單獨(dú)管理和訪問(wèn)的分區(qū)中。必須仔細(xì)選擇這些分區(qū)策略以便zui小化壞處zui大化好處。分區(qū)可以幫助我們改進(jìn)伸縮性,降低爭(zhēng)用,并且優(yōu)化性能 續(xù)表 主題 描述 復(fù)制和同步數(shù)據(jù)指南 當(dāng)部署應(yīng)用到多個(gè)數(shù)據(jù)中心,比如云和私有云中時(shí),為了zui大化可用性和性能、確保一致性、zui小化數(shù)據(jù)傳輸成本,就必須考慮如何在多個(gè)節(jié)點(diǎn)同步數(shù)據(jù) 遠(yuǎn)程監(jiān)控指南 絕大多數(shù)應(yīng)用都會(huì)包含診斷功能特性,這些特性可以生成自定義監(jiān)控和調(diào)試信息,尤其是當(dāng)錯(cuò)誤發(fā)生的時(shí)候。這通常稱為監(jiān)控儀表盤(pán),是通過(guò)添加事件和錯(cuò)誤處理代碼到應(yīng)用程序中來(lái)實(shí)現(xiàn)的。收集遠(yuǎn)程信息的過(guò)程通常稱為遙感監(jiān)測(cè) 多數(shù)據(jù)中心部署指南 在多個(gè)數(shù)據(jù)中心部署應(yīng)用有許多好處,比如增加可用性、更好的跨地區(qū)用戶體驗(yàn)。然而,還有一些挑戰(zhàn)要解決,比如數(shù)據(jù)同步和監(jiān)管限制 服務(wù)調(diào)用統(tǒng)計(jì)指南 我們可能需要統(tǒng)計(jì)應(yīng)用或者服務(wù)的調(diào)用信息以便計(jì)劃、調(diào)整未來(lái)的需求策略,了解用戶如何使用系統(tǒng),或者對(duì)用戶、組織部門(mén)或者客戶計(jì)費(fèi)。這些都是常見(jiàn)的需求,對(duì)大公司和獨(dú)立軟件供應(yīng)商及服務(wù)商尤其如此 例子應(yīng)用 10個(gè)例子程序演示了本書(shū)中介紹的一些模式實(shí)現(xiàn)過(guò)程,大家可以下載到本地運(yùn)行,或者部署到Azure訂閱賬號(hào)里測(cè)試。要獲取并運(yùn)行這些程序代碼: (1) 可以到微軟下載中心http://aka.ms/cloud-design-patterns-sample “Cloud Design Patterns - Sample Code”頁(yè)面下載 “Cloud Design Patterns Examples.zip”壓縮文件。 (2) 在Windows資源瀏覽器里打開(kāi)壓縮文件的屬性,選擇解壓。 (3) 把代碼復(fù)制到磁盤(pán)根目錄,比如C:\PatternsGuide。不要在用戶配置文件夾里解壓(比如Documents 或者 Downloads) ,否則可能導(dǎo)致文件名過(guò)長(zhǎng)。 (4) 在瀏覽器里打開(kāi)Readme.htm。它包含系統(tǒng)和例子的配置信息,在本地Azure模擬器運(yùn)行例子或者部署到Azure平臺(tái)上,掌握例子展示的知識(shí)點(diǎn)。 本指南與例子的對(duì)應(yīng)關(guān)系如下表所示。 主題 描述 競(jìng)爭(zhēng)消費(fèi)者 這個(gè)例子包含2個(gè)組件:Sender worker role負(fù)責(zé)發(fā)送消息到Service Bus隊(duì)列,Receiver worker role負(fù)責(zé)從隊(duì)列接收消息并處理消息。Receiver worker role啟動(dòng)兩個(gè)實(shí)例來(lái)模擬消費(fèi)者競(jìng)爭(zhēng) 計(jì)算資源合并 這個(gè)例子展示了如何統(tǒng)一多個(gè)獨(dú)立的任務(wù)到單個(gè)的worker role中。運(yùn)行這個(gè)例子沒(méi)有其他需求 續(xù)表 主題 描述 外部配置存儲(chǔ) 這個(gè)例子展示了在外部存儲(chǔ)區(qū)保存配置文件而不是使用本地配置文件。在這個(gè)例子中,配置保存到Azure Blob Storage存儲(chǔ)區(qū)。Blob包含的配置信息是通過(guò)ExternalConfigurationManager類的實(shí)例監(jiān)控的。當(dāng)ExternalConfigurationManager對(duì)象探測(cè)到配置已修改時(shí),它就會(huì)提醒應(yīng)用程序 健康終結(jié)點(diǎn)監(jiān)控 這個(gè)例子展示了如何設(shè)置檢查獨(dú)立服務(wù)健康狀態(tài)的Web終結(jié)點(diǎn),它可以返回不同的狀態(tài)碼來(lái)表示狀態(tài)。設(shè)計(jì)終結(jié)點(diǎn)的目的是讓看門(mén)狗監(jiān)控服務(wù)監(jiān)控的,比如Azure終結(jié)點(diǎn)健康監(jiān)控服務(wù),但是我們也可以在瀏覽器里打開(kāi)和調(diào)用終結(jié)點(diǎn),查看狀態(tài)結(jié)果。我們還可以部署和配置自己的終結(jié)點(diǎn)健康工具來(lái)發(fā)送請(qǐng)求給服務(wù)操作并分析接收到的應(yīng)答消息 領(lǐng)導(dǎo)選舉 這個(gè)例子展示了工作角色實(shí)例如何變成領(lǐng)導(dǎo)。領(lǐng)導(dǎo)可以協(xié)調(diào)和控制其他實(shí)例的任務(wù),這些任務(wù)應(yīng)該通過(guò)某個(gè)工作角色實(shí)例執(zhí)行。領(lǐng)導(dǎo)選舉通過(guò)獲取租賃權(quán)來(lái)實(shí)現(xiàn) 管道和過(guò)濾器 這個(gè)例子包含兩個(gè)可以執(zhí)行整體處理部分操作的過(guò)濾器。這兩個(gè)過(guò)濾器組合在一個(gè)管道中,一個(gè)過(guò)濾器的輸出結(jié)果作為另一個(gè)過(guò)濾器的輸入數(shù)據(jù)。過(guò)濾器作為單獨(dú)的工作角色實(shí)現(xiàn),Azure Service Bus總線隊(duì)列提供了管道的基礎(chǔ)架構(gòu) 優(yōu)先級(jí)隊(duì)列 這個(gè)例子展示了如何通過(guò)Service Bus主題和訂閱實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列。工作角色負(fù)責(zé)發(fā)送消息給主題,分配優(yōu)先級(jí)給每個(gè)消息。接受工作角色從對(duì)應(yīng)優(yōu)先級(jí)訂閱者中讀取消息。在這個(gè)例子中,PriorityQueue.High工作角色運(yùn)行兩個(gè)實(shí)例,PriorityQueue.Low只運(yùn)行一個(gè)實(shí)例。這樣就能確保高優(yōu)先級(jí)消息可以更快速地被讀取 運(yùn)行時(shí)重配置 這個(gè)例子展示了如何修改云服務(wù)的配置而不需要重新啟動(dòng)Web和worker role 靜態(tài)內(nèi)容托管 這個(gè)例子展示了如何從公共存儲(chǔ)服務(wù)中快速獲取靜態(tài)內(nèi)容。這個(gè)例子包含了一個(gè)Azure Web Role,它托管了包含Javascript文件和圖片的網(wǎng)站,部署到Azure存儲(chǔ)區(qū)中。這些內(nèi)容通常部署到存儲(chǔ)賬號(hào)中,作為應(yīng)用部署的一部分。但是,為了簡(jiǎn)化例子,啟動(dòng)程序時(shí)這些文件會(huì)被部署到存儲(chǔ)賬號(hào)中 令牌模式 這個(gè)例子展示了客戶端程序如何在獲取一個(gè)帶有權(quán)限的共享訪問(wèn)前直接向大對(duì)象存儲(chǔ)區(qū)寫(xiě)入數(shù)據(jù)。為了簡(jiǎn)單明了,這個(gè)例子關(guān)注獲取和消費(fèi)令牌秘鑰的機(jī)制,不會(huì)展示如何實(shí)現(xiàn)驗(yàn)證或者安全通行 這些例子關(guān)注演示每個(gè)模式的關(guān)鍵功能特性,并不可以直接使用到生產(chǎn)環(huán)境。 更多信息 所有的章節(jié)都包含對(duì)于其他資源的參考,比如圖書(shū)、博客文章以及論文。如果需要,大家可以閱讀更詳細(xì)的內(nèi)容。為了方便大家,這里有一個(gè)網(wǎng)頁(yè)包含所有連接的文章,直接點(diǎn)擊http://aka.ms/cdpbibliography,大家可以閱讀、查詢資源。 反饋和支持 問(wèn)題?評(píng)論?建議?任何關(guān)于本書(shū)的反饋或者要獲取任何問(wèn)題的幫助,請(qǐng)?jiān)L問(wèn)http://wag.codeplex.com。這個(gè)社區(qū)網(wǎng)站的論壇是我們推薦的反饋和支持渠道,因?yàn)樗试S我們大家分享想法、問(wèn)題和整個(gè)社區(qū)的解決方案。 圖書(shū)團(tuán)隊(duì) 創(chuàng)意與項(xiàng)目管理: Masashi Narumoto 作者: Alex Homer、John Sharp、Larry Brader、Masashi Narumoto和Trent Swanson 開(kāi)發(fā): Julian Dominguez、Trent Swanson (Full Scale 180)、Alejandro Jezierski (Southworks) 測(cè)試: Larry Brader、Federico Boerr和Mariano Grande (Digit Factory) 性能測(cè)試: Carlos Farre、Naveen Pitipornvivat (Adecco) 文檔: Alex Homer、John Sharp (Content Master Ltd) 圖片藝術(shù)家: Chris Burns (Linda Werner & Associates Inc)、Kieran Phelan (Allovus Design Inc) 編輯: RoAnn Corbisier 生產(chǎn): Nelly Delgado 技術(shù)審閱: Bill Wilder (Author, Cloud Architecture Patterns)、Michael Wood (Cerebrata) 貢獻(xiàn)者: Hatay Tuna、Chris Clayton、Amit Srivastava、Jason Wescott、Clemens Vasters、Abhishek Lal、Vittorio Bertocci、Boris Scholl、Conor Cunningham、Stuart Ozer、Paolo Salvatori、Shirley Wang、Saurabh Pant、Ben Ridgway、Rahul Rai、Jeremiah Talkar、Simon Gurevich、Haishi Bai、Larry Franks、Grigori Melnik、Mani Subramanian、Rohit Sharma、Christopher Bennage、Andrew Oakley、Jane Sinyagina和Julian Dominguez、Fernando Simonazzi (Clarius Consulting)和Valery Mizonov (Full Scale 180) 微軟開(kāi)發(fā)者指南顧問(wèn)委員會(huì) 參與審核成員名單:Carlos dos Santos、CDS Informatica Ltda; Catalin Gheorghiu、I Computer Solutions; Neil Mackenzie、Satory Global; Christopher Maneu、Deezer.com; Paulo Morgado; Bill Wagner、Bill Wagner Software LLC;和Roger Whitehead、ProSource.It 感謝為本書(shū)的順利出版付出心血的每個(gè)參與者!
Alex Homer是微軟PP小組的技術(shù)作者。在加入微軟之前,他做了多年的軟件設(shè)計(jì)和培訓(xùn)工作。他在小組的主要精力花費(fèi)在設(shè)計(jì)模式和架構(gòu)方面,還編寫(xiě)指南和例子代碼。他的博客地址是http://blogs.msdn.com/alexhomer/。
John Sharp 是Content Master (www.contentmaster.com)的首席技術(shù)專家。專注于使用.NET框架和Azure平臺(tái)開(kāi)發(fā)應(yīng)用系統(tǒng)。John寫(xiě)過(guò)《Microsoft Visual C# Step By Step》 和 《Microsoft WCF Step By Step》。John講授過(guò)許多培訓(xùn)課程,也寫(xiě)過(guò)許多覆蓋諸多領(lǐng)域,比如C和C++編程、SQL Server數(shù)據(jù)庫(kù)管理以及面向服務(wù)架構(gòu)的技術(shù)文章。他獲得了倫敦大學(xué)帝國(guó)理工學(xué)院的計(jì)算機(jī)科學(xué)學(xué)位。 Larry Brader是微軟模式與實(shí)踐小組的高級(jí)測(cè)試工程師,負(fù)責(zé)PP小組不同項(xiàng)目的測(cè)試工作,專注于客戶端和服務(wù)器端。此外他對(duì)于基于ALM生成測(cè)試指南也有濃厚的興趣。 Masashi Narumoto熱衷于將互聯(lián)網(wǎng)作為知識(shí)庫(kù)的想法;ヂ(lián)網(wǎng)已經(jīng)顯著改變了我們的生活,毫無(wú)疑問(wèn)還會(huì)帶來(lái)巨大的變化。他的目標(biāo)是匯聚大家的智慧以更有意義的形式提供出來(lái),方便更多的人學(xué)習(xí)。在就職于模式與實(shí)踐小組期間,他作為程序經(jīng)理負(fù)責(zé)并完成了多個(gè)Azure指南的系列文檔的編寫(xiě)工作,現(xiàn)在關(guān)注于大數(shù)據(jù)領(lǐng)域。之前,他花費(fèi)了20多年時(shí)間來(lái)開(kāi)發(fā)和咨詢各種不同的解決方案,尤其是零售和制造業(yè)。Masashi的博客地址是http://blogs.msdn.com/masashi_narumoto,推特賬號(hào)是@dragon119。 Trent Swanson是Full Scale 180的軟件架構(gòu)師,也是創(chuàng)始人之一,主要使用云計(jì)算技術(shù)。他一開(kāi)始就使用Azure技術(shù),幫助全球各地的客戶來(lái)構(gòu)建、部署和管理Azure上的云計(jì)算解決方案。無(wú)論是遷移現(xiàn)有應(yīng)用到云計(jì)算平臺(tái)還是構(gòu)建全新應(yīng)用,他都享受整個(gè)交付伸縮的、可靠的和可管理的云計(jì)算解決方案。
目錄
Table of Contents 第1章 緩存駐留模式 1 背景和問(wèn)題 1 解決方案 1 相關(guān)模式與指南 5 更多信息 5 第2章 斷路器模式 6 背景和問(wèn)題 6 解決方案 6 問(wèn)題與思考 8 何時(shí)使用此模式 10 相關(guān)模式和指南 14 第3章 補(bǔ)償事務(wù)模式 15 背景和問(wèn)題 15 解決方案 16 問(wèn)題與思考 16 何時(shí)使用此模式 17 相關(guān)模式和指南 18 第4章 競(jìng)爭(zhēng)消費(fèi)者模式 19 背景和問(wèn)題 19 解決方案 19 問(wèn)題與思考 20 何時(shí)使用此模式 21 第5章 計(jì)算資源合并模式 25 背景和問(wèn)題 25 解決方案 26 問(wèn)題與思考 26 應(yīng)用場(chǎng)景 28 相關(guān)模式和指南 32 擴(kuò)展閱讀 32 第6章 命令和查詢職責(zé)分離(CQRS)模式 33 背景和問(wèn)題 33 解決方案 34 問(wèn)題與思考 35 何時(shí)使用此模式 36 第7章 事件溯源模式 41 背景和問(wèn)題 41 解決方案 41 問(wèn)題與思考 43 何時(shí)使用此模式 44 相關(guān)模式和指南 47 第8章 外部配置存儲(chǔ)模式 48 背景和問(wèn)題 48 解決方案 48 問(wèn)題與思考 49 何時(shí)使用此模式 50 關(guān)聯(lián)模式和指南 56 第9章 聯(lián)合身份模式 57 背景和問(wèn)題 57 解決方案 57 問(wèn)題與思考 59 何時(shí)使用此模式 59 相關(guān)模式和指南 61 更多信息 61 第10章 門(mén)衛(wèi)模式 62 背景和問(wèn)題 62 解決方案 62 問(wèn)題與思考 63 何時(shí)使用此模式 63 相關(guān)模式和指南 64 第11章 健康終端監(jiān)控模式 65 背景和問(wèn)題 65 解決方案 65 問(wèn)題與思考 67 何時(shí)使用此模式 68 相關(guān)模式和指南 71 更多信息 71 第12章 索引表模式 72 背景和問(wèn)題 72 解決方案 73 問(wèn)題與思考 75 何時(shí)使用此模式 76 相關(guān)模式與指南 77 第13章 領(lǐng)導(dǎo)者選舉模式 79 背景和問(wèn)題 79 解決方案 79 問(wèn)題與思考 80 何時(shí)使用此模式 80 相關(guān)模式與指南 85 更多信息 85 第14章 實(shí)體化視圖模式 86 背景和問(wèn)題 86 解決方案 86 問(wèn)題與思考 87 何時(shí)使用此模式 88 相關(guān)模式與指南 89 第15章 管道過(guò)濾器模式 90 背景和問(wèn)題 90 解決方案 91 問(wèn)題與思考 92 何時(shí)使用此模式 93 相關(guān)模式與指南 97 第16章 優(yōu)先隊(duì)列模式 98 背景和問(wèn)題 98 解決方案 98 問(wèn)題與思考 100 何時(shí)使用此模式 101 相關(guān)模式與指南 103 第17章 基于隊(duì)列的負(fù)載均衡模式 105 背景和問(wèn)題 105 解決方案 105 問(wèn)題與思考 106 何時(shí)使用此模式 107 相關(guān)模式和指南 108 第18章 重試模式 109 背景和問(wèn)題 109 解決方案 109 問(wèn)題與思考 111 何時(shí)使用此模式 112 相關(guān)模式與指南 114 更多信息 114 第19章 運(yùn)行時(shí)重配模式 115 背景和問(wèn)題 115 解決方案 115 問(wèn)題與思考 116 何時(shí)使用此模式 117 相關(guān)的模式和指南 120 更多的信息 121 第20章 調(diào)度器代理管理者模式 122 背景和問(wèn)題 122 解決方案 122 問(wèn)題與思考 125 何時(shí)使用此模式 125 相關(guān)模式與指南 128 更多信息 129 第21章 分片模式 130 背景和問(wèn)題 130 解決方案 130 分片策略 131 問(wèn)題與思考 135 何時(shí)使用此模式 136 相關(guān)模式與指南 138 第22章 靜態(tài)內(nèi)容托管模式 139 背景和問(wèn)題 139 解決方案 139 問(wèn)題與思考 139 何時(shí)使用此模式 140 相關(guān)模式與指南 143 更多信息 143 第23章 限流模式 144 背景和問(wèn)題 144 解決方案 144 問(wèn)題與思考 146 何時(shí)使用此模式 147 相關(guān)模式與指南 148 第24章 令牌秘鑰模式 149 背景和問(wèn)題 149 解決方案 149 問(wèn)題與思考 150 何時(shí)使用此模式 152 相關(guān)模式和指南 154 更多信息 154 第25章 異步消息傳輸指南 155 消息隊(duì)列本質(zhì) 155 異步消息傳遞的場(chǎng)景 158 實(shí)現(xiàn)異步消息傳遞的注意事項(xiàng) 159 相關(guān)模式和指南 161 更多信息 162 第26章 自動(dòng)伸縮指南 163 什么是自動(dòng)伸縮 163 實(shí)施自動(dòng)伸縮的場(chǎng)景 164 實(shí)施自動(dòng)伸縮的注意事項(xiàng) 164 Azure解決方案中的自動(dòng)伸縮 165 相關(guān)模式和指南 167 更多信息 167 第27章 緩存指南 168 云應(yīng)用程序中的緩存 168 使用緩存的注意事項(xiàng) 170 管理緩存并發(fā) 172 相關(guān)模式和指南 173 更多信息 173 第28章 計(jì)算分區(qū)指南 174 Azure計(jì)算選項(xiàng)概述 174 計(jì)算界限設(shè)計(jì)指南 174 組件分離計(jì)算實(shí)例 176 相關(guān)模式與指南 177 更多信息 178 第29章 數(shù)據(jù)一致性指南 179 管理數(shù)據(jù)一致性 179 最終一致性實(shí)現(xiàn)的注意事項(xiàng) 182 相關(guān)模式與指南 185 第30章 數(shù)據(jù)分區(qū)指南 186 為什么需要數(shù)據(jù)分區(qū) 186 分區(qū)策略 187 設(shè)計(jì)可擴(kuò)展性的數(shù)據(jù)分區(qū) 190 設(shè)計(jì)分區(qū)以提升查詢性能 191 分區(qū)可用性設(shè)計(jì) 192 問(wèn)題與思考 192 相關(guān)模式與指南 194 更多信息 194 第31章 數(shù)據(jù)復(fù)制與同步指南 195 為什么要數(shù)據(jù)復(fù)制及同步 195 復(fù)制和同步數(shù)據(jù) 195 數(shù)據(jù)復(fù)制和同步的注意事項(xiàng) 198 實(shí)現(xiàn)同步 200 相關(guān)模式與指南 201 更多信息 201 第32章 遠(yuǎn)程監(jiān)控指南 202 為什么遠(yuǎn)程監(jiān)控很重要 202 監(jiān)控 202 語(yǔ)義日志記錄 204 遙測(cè) 205 遠(yuǎn)程監(jiān)控的注意事項(xiàng) 205 相關(guān)模式與指南 207 更多信息 208 第33章 多數(shù)據(jù)中心部署指南 209 為什么部署到多個(gè)數(shù)據(jù)中心 209 多數(shù)據(jù)中心部署的思考 213 相關(guān)模式及指南 217 第34章 服務(wù)調(diào)用統(tǒng)計(jì)指南 218 為什么服務(wù)調(diào)用統(tǒng)計(jì)很重要 218 服務(wù)調(diào)用統(tǒng)計(jì)的場(chǎng)景 218 服務(wù)調(diào)用統(tǒng)計(jì)的注意事項(xiàng) 220 示例 221 相關(guān)模式及指南 222 更多信息 222
架構(gòu)即未來(lái)
移動(dòng)互聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)時(shí)代,面臨更多的技術(shù)挑戰(zhàn)問(wèn)題,設(shè)計(jì)模式已經(jīng)從單一的OO問(wèn)題領(lǐng)域向外擴(kuò)張延伸,設(shè)計(jì)模式的范疇不會(huì)局限于語(yǔ)言本身,更多擴(kuò)展到架構(gòu)設(shè)計(jì)領(lǐng)域 我個(gè)人對(duì)編程語(yǔ)言沒(méi)有偏見(jiàn),它們各有所長(zhǎng),大家互相學(xué)習(xí)。有實(shí)力的程序員不需要通過(guò)編程語(yǔ)言來(lái)找優(yōu)越感,都在踏實(shí)地研究技術(shù)。我接觸的優(yōu)秀程序員無(wú)論是對(duì)C++、Java,還是對(duì)C#等都沒(méi)有編程語(yǔ)言的歧視。況且底層的算法、數(shù)據(jù)結(jié)構(gòu)和設(shè)計(jì)模式都沒(méi)有編程語(yǔ)言限制。 架構(gòu)師和技術(shù)專家 程序員中的精英群體,技術(shù)領(lǐng)袖,也是公司中受人尊敬的群體。 十年磨一劍 精華知識(shí) 本書(shū)介紹了云計(jì)算時(shí)代、zui經(jīng)典的24種架構(gòu)設(shè)計(jì)模式,包含基于云平臺(tái)設(shè)計(jì)架構(gòu)面臨的問(wèn)題以及典型的解決方案,另外還有10個(gè)架構(gòu)設(shè)計(jì)指南。 24種經(jīng)典的設(shè)計(jì)模式包括:高并發(fā)、健康健康、消息編排、架構(gòu)伸縮、緩存、消息推送、大數(shù)據(jù)存儲(chǔ)和優(yōu)化、安全令牌等架構(gòu)設(shè)計(jì)的關(guān)鍵問(wèn)題,是一本zui近幾年難得的架構(gòu)與設(shè)計(jì)模式圖書(shū)。 本書(shū)內(nèi)容不受編程語(yǔ)言限制,可以根據(jù)需要使用.NET、Java、PHP、Node.js、Go等。云計(jì)算平臺(tái)可以是Azure、AWS、阿里云等共有云,也可以是私有云平臺(tái)。 推薦本書(shū)給高級(jí)工程師、運(yùn)維工程師、架構(gòu)師、技術(shù)經(jīng)理、技術(shù)總監(jiān)、CTO學(xué)習(xí)使用。
你還可能感興趣
我要評(píng)論
|