. Microsoft Corporation 2006 年保留所有版權(quán)。
抓住長(zhǎng)尾市場(chǎng)的架構(gòu)戰(zhàn)略 2006 年 4 月 Frederick Chong 與 Gianpaolo Carraro 微軟公司 Copyright . Microsoft Corporation 2006. All Rights Reserved. 2 致謝 非常感謝 Paul Henry 在撰寫技術(shù)內(nèi)容方面給予的幫助。 說(shuō)明 本文檔所包含的信息代表了在發(fā)布之日,Microsoft Corporation 對(duì)所討論問(wèn)題的當(dāng)前看法。因 為微軟必須順應(yīng)不斷變化的市場(chǎng)情況,因而該文檔不應(yīng)理解為 Microsoft 單方面的承諾, Microsoft 不保證所給信息在發(fā)布這日以后的準(zhǔn)確性。 本文檔僅供參考。對(duì)于本文檔中的信息,Microsoft 不做任何明示、默示或法定的擔(dān)保。 遵守所有適用的版權(quán)法律是用戶的責(zé)任。在不對(duì)版權(quán)法所規(guī)定的權(quán)利加以限制的情況下,如未 得到 Microsoft Corporation 明確的書面許可,不得為任何目的、以任何形式或手段(電子的、 機(jī)械的、影印、錄制等等)復(fù)制或傳播本文的任何部分,也不得將其存儲(chǔ)或引入到檢索系統(tǒng) 中。 Microsoft 可能擁有本檔主題涉及到的專利、專利申請(qǐng)、商標(biāo)、版權(quán)或其他知識(shí)產(chǎn)權(quán)。除非在 Microsoft 的任何書面許可協(xié)議中明確表述,否則獲得本文檔不代表您將同時(shí)獲得這些專利、商 標(biāo)、版權(quán)或其他知識(shí)產(chǎn)權(quán)的任何許可證。 除非另外注明,否則此處作為例子提到的公司、組織、產(chǎn)品、域名、電子郵件地址、徽標(biāo)、人 員、地點(diǎn)以及事件純屬虛構(gòu),決不意指,也不應(yīng)由此臆測(cè)任何真實(shí)的公司、組織、產(chǎn)品、域 名、電子郵件地址、徽標(biāo)、人員、地點(diǎn)和事件。 . 2005 Microsoft Corporation,保留所有權(quán)利。 Microsoft、Visual Studio 以及 .NET 徽標(biāo)是 Microsoft Corporation 在美國(guó)和/或其他國(guó)家的注 冊(cè)商標(biāo)或商標(biāo)。 所有其他商標(biāo)均是其各自所有者的財(cái)產(chǎn)。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 3 引言 軟件即服務(wù)這一話題已是眾口相傳。軟件業(yè)有關(guān)文獻(xiàn)中關(guān)于“軟件即服務(wù)” (SaaS) 的文章不勝枚 舉,其中很多都用到了“革命性”和“產(chǎn)業(yè)格局”等措辭詞。大家都知道(或以為自己知道)什么是軟 件即服務(wù),都認(rèn)為這一理念意義重大。不過(guò),很少有人能真正定義這一理念,了解如何實(shí)踐這一理念的 人就更是寥寥無(wú)幾了。 因此,既然 SaaS 對(duì)應(yīng)用實(shí)施的未來(lái)發(fā)展如此重要,為什么人們?cè)趯?shí)踐這一理念時(shí)很難獲得有用的指 導(dǎo)呢? 我們認(rèn)為,SaaS 確實(shí)將對(duì)軟件產(chǎn)業(yè)發(fā)揮重大影響,因?yàn)檐浖捶?wù)將改變?nèi)藗儤?gòu)建、銷售、購(gòu)買以及 使用軟件的方式。不過(guò),為了將此變?yōu)楝F(xiàn)實(shí),軟件開發(fā)商需要高效開發(fā) SaaS 應(yīng)用的資源和信息。 本文是微軟 (Microsoft) 介紹 SaaS 理念系列文章中的第一篇,后續(xù)系列文章將為讀者解開 SaaS 的 神秘面紗,并為設(shè)計(jì) SaaS 應(yīng)用提供實(shí)際的、現(xiàn)實(shí)的指導(dǎo)。本文將概括介紹 SaaS 理念、其面臨的挑 戰(zhàn),及其如何為有興趣提供 SaaS 應(yīng)用的公司帶來(lái)好處。本系列隨后的幾篇文章將詳細(xì)討論有關(guān)問(wèn) 題。 本文首先提出什么是軟件即服務(wù),并介紹 SaaS 供應(yīng)商必須經(jīng)歷的概念轉(zhuǎn)型,以了解新理念與傳統(tǒng)的 內(nèi)部部署軟件的不同之處。隨后,我們將討論 SaaS 商務(wù)模型,了解軟件即服務(wù)如何能在現(xiàn)實(shí)商務(wù)中 盈利。 本文將重點(diǎn)討論架構(gòu)問(wèn)題,因此最大篇幅將集中在 SaaS 應(yīng)用的架構(gòu)上。我們給出四級(jí)成熟模型,介 紹 SaaS 的部分主要特性:可配置性、多用戶效率以及可擴(kuò)展性。我們將研究高級(jí) SaaS 架構(gòu)的組 件,并側(cè)重探討 SaaS 架構(gòu)師通常面臨的難題,即,如何為擴(kuò)展多用戶應(yīng)用的數(shù)據(jù)模型提供適當(dāng)機(jī) 制。 最后,我們將簡(jiǎn)要討論 SaaS 應(yīng)用投入部署后與開展支持工作相關(guān)的運(yùn)營(yíng)問(wèn)題。 什么是軟件即服務(wù)? 時(shí)至今日,如何準(zhǔn)確定義“軟件即服務(wù)”(SaaS) 仍然沒有定論,問(wèn)五個(gè)人可能就會(huì)有五種不同的答 案。不過(guò),大多數(shù)專家可能會(huì)在 SaaS 區(qū)別于傳統(tǒng)套裝軟件和簡(jiǎn)單 Web 站點(diǎn)的一些基本特點(diǎn)上達(dá)成 一致。簡(jiǎn)言之,軟件即服務(wù)具備以下特點(diǎn): “軟件部署為托管服務(wù),通過(guò)因特網(wǎng)存取。” 我們不妨花些時(shí)間來(lái)思考一下這一定義的含意。這種定義既未限定具體的應(yīng)用架構(gòu),也未指定特定的技 術(shù)或協(xié)議;沒有在企業(yè)與個(gè)人消費(fèi)者之間的服務(wù)進(jìn)行區(qū)分,也沒有要求具體的商業(yè)模型。根據(jù)上述定 義,軟件即服務(wù)的主要特點(diǎn)在于應(yīng)用代碼所處的位置以及部署和存取應(yīng)用代碼的方式。1 根據(jù)這一定義,SaaS 將包括許多您意想不到的服務(wù)和應(yīng)用。例如,我們不妨考慮一下基于 Web 的電 子郵件服務(wù),如 Microsoft. Hotmail. 等。盡管您在考慮 SaaS 時(shí)很難率先想到 Hotmail 也屬于 SaaS 的范疇,但 Hotmail 確實(shí)滿足了所有 SaaS 的基本標(biāo)準(zhǔn):供應(yīng)商提供所有程序邏輯和數(shù)據(jù)的主 機(jī)服務(wù),使最終用戶能夠通過(guò)基于 Web 的用戶界面在公共因特網(wǎng)上存取數(shù)據(jù)。 從一般到具體,我們認(rèn)為軟件即服務(wù)有兩大類別: 1 這種定義是不是過(guò)于簡(jiǎn)化了?簡(jiǎn)而言之,確實(shí)有一些簡(jiǎn)單化。隨后我們將集中討論一些能夠定義和區(qū) 別擁有良好設(shè)計(jì)的成熟 SaaS 應(yīng)用的重要屬性。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 4 . 面向企業(yè)的服務(wù) (Line-of-business service),向各種規(guī)模的企業(yè)和組織提供的服務(wù)。面向企 業(yè)的服務(wù)通常是可定制的大型商務(wù)解決方案,旨在協(xié)助開展財(cái)務(wù)、供應(yīng)鏈管理以及客戶關(guān)系等商務(wù) 工作。這種服務(wù)通常采用用戶預(yù)訂的銷售方式。 . 面向個(gè)人消費(fèi)者的服務(wù) (Consumer-oriented service),向公眾提供的一類服務(wù)。面向個(gè)人 消費(fèi)者的服務(wù)有時(shí)以用戶購(gòu)買的方式銷售,不過(guò)通常免費(fèi)提供給用戶,從廣告中賺取收入。 本文將側(cè)重討論與開發(fā)面向企業(yè)的服務(wù)應(yīng)用相關(guān)的架構(gòu)及商業(yè)問(wèn)題,文中給出的概念與范例都與企業(yè)應(yīng) 用相關(guān)。不過(guò),多用戶定制和可擴(kuò)展性、數(shù)據(jù)擴(kuò)展以及隔離等問(wèn)題也會(huì)出現(xiàn)在個(gè)人消費(fèi)者領(lǐng)域(事實(shí)上 更便于解決),因而個(gè)人消費(fèi)型 SaaS 服務(wù)的開發(fā)商閱讀本文也將有所裨益。 將軟件作為服務(wù)來(lái)考慮 為了實(shí)現(xiàn)從提供內(nèi)部部署軟件向軟件即服務(wù)的轉(zhuǎn)變,軟件廠商應(yīng)在三個(gè)相互關(guān)聯(lián)的領(lǐng)域中轉(zhuǎn)變思路:一 是商業(yè)模型;二是應(yīng)用架構(gòu);三是運(yùn)營(yíng)結(jié)構(gòu)。 Software Services Business Model Operational Structure Application Architecture 在以下三部分中,我們將以 SaaS 的應(yīng)用架構(gòu)為側(cè)重點(diǎn)更深入地討論上述轉(zhuǎn)變。 轉(zhuǎn)變商業(yè)模式 轉(zhuǎn)變商業(yè)模式將涉及以下一種乃至更多種情況: . 將軟件的“所有權(quán)”從客戶轉(zhuǎn)移至外部供應(yīng)商; . 將技術(shù)基礎(chǔ)設(shè)施和管理等方面(如硬件與專業(yè)服務(wù))的責(zé)任從客戶重新分配給供應(yīng)商; . 通過(guò)專業(yè)化和規(guī)模經(jīng)濟(jì)降低提供軟件服務(wù)的成本; . 降低軟件銷售的最低成本,針對(duì)小型企業(yè)的長(zhǎng)尾市場(chǎng)做工作。 為了實(shí)現(xiàn) SaaS 理念的優(yōu)勢(shì),供應(yīng)商與客戶都應(yīng)進(jìn)行思維轉(zhuǎn)型,并且供應(yīng)商還應(yīng)幫助客戶實(shí)現(xiàn)這種轉(zhuǎn) 變。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 5 誰(shuí)“擁有”軟件? 大多數(shù)軟件的銷售方式幾十年以來(lái)一直一成不變??蛻魹槭褂密浖?gòu)買許可證,并在屬于客戶或歸客 戶控制的硬件上安裝軟件,而供應(yīng)商則根據(jù)許可證協(xié)議或技術(shù)支持協(xié)議提供支持。在誠(chéng)實(shí)公開的軟件交 易中,“許可證”的技術(shù)性含義如下:從法律上說(shuō),客戶購(gòu)買的只是使用軟件拷貝的權(quán)利,但從實(shí)際目 的而言,客戶似乎是“擁有”軟件的,并能根據(jù)需要隨時(shí)使用軟件,使用多長(zhǎng)時(shí)間都可以。 軟件作為產(chǎn)品的商業(yè)模式是軟件市場(chǎng)的整體情況,在此環(huán)境下,軟件即服務(wù)理念會(huì)讓人感到相當(dāng)陌生: 我們告訴客戶,他們不是直接“擁有”重要的軟件,而是要為運(yùn)行在別人服務(wù)器上的軟件支付使用費(fèi), 如果停止用戶付費(fèi),就不能再獲得軟件使用權(quán)。因此,潛在的客戶應(yīng)了解 SaaS 為什么能比傳統(tǒng)的模 式提供更直接、更可量化的經(jīng)濟(jì)收益,這一點(diǎn)特別重要。 轉(zhuǎn)移 IT 工作責(zé)任 在一般的公司中,信息技術(shù) (IT) 預(yù)算用于以下三大領(lǐng)域: . 軟件 —— 企業(yè)用于計(jì)算與信息處理的實(shí)際程序和數(shù)據(jù); . 硬件 —— 可為用戶提供軟件存取的臺(tái)式計(jì)算機(jī)、服務(wù)器、網(wǎng)絡(luò)組件以及移動(dòng)設(shè)備 等; . 專業(yè)服務(wù) —— 確保系統(tǒng)能夠不間斷運(yùn)行和可用的人員和機(jī)構(gòu),包括技術(shù)支持人員、咨詢?nèi)藛T以及 廠商代表等。 在上述三大領(lǐng)域中,軟件是最直接參與信息管理的部分,這也是所有 IT 公司要實(shí)現(xiàn)的最終目標(biāo)。硬件 與專業(yè)服務(wù)盡管是 IT 環(huán)境的重要組成部分,但我們通常將其視為實(shí)現(xiàn)目的的手段,而不是目的本身, 因?yàn)檫@兩者能確保軟件實(shí)現(xiàn)高效信息管理的最終目標(biāo)。(換言之,只要能有效地增加軟件功能,又不必 添置額外的硬件,那么任何公司都愿意這么做。但是,如果沒有增加軟件功能的需要,任何公司都不會(huì) 無(wú)緣無(wú)故地添置硬件。) 在圍繞內(nèi)部部署軟件構(gòu)建起來(lái)的 IT 環(huán)境中,大部分預(yù)算通?;ㄙM(fèi)在硬件和專業(yè)服務(wù)上,使得可用的軟 件預(yù)算只占少數(shù)。 Hardware Professional Services Software 在這種模式下,軟件預(yù)算主要用于購(gòu)買商業(yè)軟件套件的許可證以及定制的業(yè)務(wù)軟件。硬件預(yù)算主要用于 最終用戶使用的臺(tái)式機(jī)和便攜式計(jì)算機(jī)、存儲(chǔ)數(shù)據(jù)和應(yīng)用的服務(wù)器,以及可實(shí)現(xiàn)網(wǎng)絡(luò)化連接的組件。專 Copyright . Microsoft Corporation 2006. All Rights Reserved. 6 業(yè)服務(wù)預(yù)算用于支付技術(shù)支持人員的薪水,他們負(fù)責(zé)部署并為軟硬件提供支持,此外還要為咨詢?nèi)藛T和 開發(fā)資源付費(fèi),這是設(shè)計(jì)并構(gòu)建定制系統(tǒng)所需的。2 在主要采用 SaaS 模式的公司中,IT 預(yù)算的分配大為不同。 Hardware Services Software 在這種模式下,SaaS 廠商在其公司內(nèi)部的中央服務(wù)器上存儲(chǔ)重要的應(yīng)用和相關(guān)數(shù)據(jù),并擁有專業(yè)的支 持人員來(lái)維護(hù)軟硬件。這就使公司客戶不用再為主機(jī)上運(yùn)行的軟件提供支持,也不必再為此而購(gòu)買和維 護(hù)服務(wù)器硬件。此外,通過(guò) Web 或智能客戶端提供的應(yīng)用對(duì)臺(tái)式計(jì)算機(jī)的性能要求要顯著低于本地安 裝應(yīng)用,這就使客戶能大幅延長(zhǎng)臺(tái)式計(jì)算機(jī)的使用壽命。最終,絕大部分 IT 預(yù)算能用于軟件,通常以 向 SaaS 供應(yīng)商交納的使用費(fèi)的形式支付。 充分利用規(guī)模經(jīng)濟(jì) 上述情況是否僅是一種難以實(shí)現(xiàn)的空想呢?說(shuō)到底,為了獲得“軟件”而支付給 SaaS 供應(yīng)商的使用 費(fèi)中的一部分,必定要用于 SaaS 供應(yīng)商的硬件和專業(yè)服務(wù)成本。這時(shí),就要考慮規(guī)模經(jīng)濟(jì)效應(yīng)的問(wèn) 題。假定 SaaS 供應(yīng)商中央主機(jī)上運(yùn)行的單套軟件擁有 x 家客戶,那么該供應(yīng)商就能統(tǒng)一為所有客戶 提供服務(wù)。例如,企業(yè) SaaS 應(yīng)用安裝在五個(gè)服務(wù)器組成的負(fù)載平衡群集上,可支持 50 家中等規(guī)模 的客戶,也就是說(shuō),每家客戶只需負(fù)擔(dān)一臺(tái)服務(wù)器成本的十分之一。如果相同的應(yīng)用由各家客戶進(jìn)行本 地安裝,就要求每家客戶專門為該應(yīng)用提供服務(wù)器,有時(shí)如果負(fù)載平衡和可用性要求高的話,還需要甚 至不止一臺(tái)服務(wù)器。因此,SaaS 模式比傳統(tǒng)模式更節(jié)約成本,對(duì)于可擴(kuò)展性較強(qiáng)的 SaaS 應(yīng)用而 言,隨著客戶的增多,每家客戶的運(yùn)營(yíng)成本會(huì)不斷降低。同時(shí),隨著客戶的增多,供應(yīng)商將加強(qiáng)多用戶 這一重要特性,以更低的成本提供更高質(zhì)量的服務(wù)。因此,即便考慮到 SaaS 供應(yīng)商的硬件和專業(yè)服 務(wù)成本,客戶仍能用相同的 IT 預(yù)算實(shí)現(xiàn)高得多的純軟件功能。 2 各圖中所示的比例分配僅用于說(shuō)明性目的,并不代表資源分配的確切比例,貴公司的實(shí)際資源分配可 能與圖示截然不同。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 7 Hardware Services Software SaaS Vendor Hardware SaaS Vendor Services 長(zhǎng)尾部分的銷售問(wèn)題 作者 Chris Anderson 在他于《連線》雜志 2004 年 10 月刊3上撰寫的“長(zhǎng)尾”一文中,介紹了 Amazon.com 等網(wǎng)絡(luò)零售商為什么處于有利地位,為什么能針對(duì)傳統(tǒng)零售商難以以低成本提供服務(wù)的 領(lǐng)域填補(bǔ)需求空白,從而使“長(zhǎng)尾”這一新概念通俗易懂。 The Long Tail Demand Popularity Rank 書籍、光盤等各種商品門類的需求往往符合“冪次定律分布”。在這種情況下,每年發(fā)布的書籍、CD 以及 DVD 數(shù)不勝數(shù),但只有少數(shù)能長(zhǎng)期成為暢銷品,其他的往往屬于反響平平的長(zhǎng)尾類出版物:大量 出版物只讓少部分有專門愛好的人感興趣,出版量很小,甚至連幾千份的拷貝都沒有。 傳統(tǒng)的實(shí)體型零售商致力于銷售最流行的出版物,因?yàn)樗麄儾豢赡馨褦?shù)以百萬(wàn)計(jì)的書籍、CD 以及 DVD 等出版物都拿來(lái)當(dāng)存貨。不過(guò),網(wǎng)絡(luò)零售商則不用擔(dān)心存貨問(wèn)題,他們能直接從全球各大倉(cāng)庫(kù)直 接向客戶發(fā)貨,即便銷售的出版物受歡迎程度很低,其廣告和銷售成本也毫不受影響,同樣像暢銷出版 物一樣大作宣傳。因而長(zhǎng)尾類低銷量出版物也能贏得大量收入。 3 http://www./wired/archive/12.10/tail.htm Copyright . Microsoft Corporation 2006. All Rights Reserved. 8 大型的實(shí)體書店能在其書架上存放 13 萬(wàn)種不同的出版物。而 Anderson 指出,Amazon.com 書籍 銷量的大部分都來(lái)自 13 萬(wàn)種流行出版物之外,換言之,Amazon.com 賣出的書中,大部分都是在傳 統(tǒng)的實(shí)體書店中買不到的。 復(fù)雜的企業(yè)軟件解決方案供應(yīng)商面臨著相似的市場(chǎng)境況。 與簡(jiǎn)單的套裝軟件不同,企業(yè)軟件需要針對(duì)不同客戶的需求進(jìn)行定制,可能包括現(xiàn)場(chǎng)安裝、廠商服務(wù)隊(duì) 伍上門服務(wù)等,通常還需要專門的服務(wù)器硬件和支持人員加以管理。提供上述專門服務(wù)的成本會(huì)一定程 度上增加供應(yīng)商銷售軟件的最低成本。因此,這種軟件通常面向大型企業(yè),只有大型企業(yè)才有實(shí)力來(lái)支 付專門服務(wù)。不過(guò),相對(duì)于購(gòu)買企業(yè)解決方案的大型企業(yè)數(shù)量而言,有著同樣需求的中小型企業(yè)的數(shù)量 要多得多,但他們卻難以承擔(dān)高昂的成本。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 9 SaaS 供應(yīng)商可消除維護(hù)成本,利用規(guī)模經(jīng)濟(jì)效益將客戶的硬件和服務(wù)需求加以整合,這樣就能提供比 傳統(tǒng)廠商價(jià)格低得多的解決方案,這不僅減輕了財(cái)務(wù)成本,而且大幅減少了客戶增加 IT 基礎(chǔ)設(shè)施建設(shè) 的需要。因此,SaaS 供應(yīng)商能面向全新的客戶群開展市場(chǎng)工作,而這部分客戶是傳統(tǒng)解決方案供應(yīng)商 所無(wú)力顧及的,因?yàn)樗麄兏揪蜎]辦法為這部分客戶提供低價(jià)格的服務(wù)。 有效面向小型客戶開展市場(chǎng)工作,這就要求習(xí)慣于通過(guò)人際交往以及傳統(tǒng)廠家和客戶關(guān)系搞營(yíng)銷的供應(yīng) 商們進(jìn)行思維轉(zhuǎn)型;大多數(shù)供應(yīng)商難以用大規(guī)模市場(chǎng)上的較低價(jià)格向更大的客戶群體提供個(gè)性化服務(wù)。 搞 SaaS 營(yíng)銷就像銷售手機(jī)彩鈴或音樂(lè)下載服務(wù)一樣,應(yīng)該讓客戶能訪問(wèn)您的 Web 站點(diǎn),成為您所 提供服務(wù)的付費(fèi)用戶,通過(guò)信用卡付費(fèi)就能開始享受服務(wù),整個(gè)過(guò)程無(wú)須供應(yīng)商方面的人為介入。這不 是說(shuō)您就不用對(duì)需求范圍廣的大規(guī)??蛻羧鹤鋈穗H聯(lián)系工作。不過(guò),在銷售工作的設(shè)計(jì)、營(yíng)銷、供應(yīng)和 定制過(guò)程中從頭到尾都是自動(dòng)化的,因此我們不僅能提供自動(dòng)化服務(wù),同時(shí)又能簡(jiǎn)化您支持部門員工的 工作,因而不用再幫助客戶完成相關(guān)任務(wù)。 應(yīng)用架構(gòu) 我們對(duì)軟件即服務(wù)理念還沒有最終定義,目前暫定的概念如下,即,軟件部署為托管服務(wù),通過(guò)因特網(wǎng) 存取。根據(jù)對(duì)軟件和存取這兩個(gè)詞定義的方式不同,上述定義可能包含很多含義,或許含義會(huì)多得不勝 枚舉。對(duì)應(yīng)用架構(gòu)師師而言,上述定義基本上不會(huì)對(duì)如何設(shè)計(jì)出可行的 SaaS 應(yīng)用發(fā)揮什么實(shí)際作 用,不能區(qū)別如何讓 SaaS 應(yīng)用成功,避免失敗。比方說(shuō),基本代碼有十年歷史的企業(yè)應(yīng)用,根據(jù)目 前需要現(xiàn)加上 HTML 前端,這種軟件也能算作廣義的軟件即服務(wù),不過(guò)這種應(yīng)用大多數(shù)都難以實(shí)現(xiàn)有 效擴(kuò)展,也不夠廉價(jià),因此都會(huì)遇到問(wèn)題。因此,為了定義什么才是成熟的 SaaS 應(yīng)用,我們必須提 出一些額外的標(biāo)準(zhǔn)。 單實(shí)例多用戶架構(gòu)的三大特點(diǎn) 從應(yīng)用架構(gòu)師的角度來(lái)看,設(shè)計(jì)出色的 SaaS 應(yīng)用與設(shè)計(jì)欠佳的應(yīng)用之間主要有三點(diǎn)不同之處。設(shè)計(jì) 出色的 SaaS 應(yīng)用具有可擴(kuò)展性、多用戶高效性,而且可配置。 應(yīng)用的可擴(kuò)展性是指能最大限度地提高并行性,以便更高效地利用應(yīng)用資源,例如,我們要優(yōu)化鎖定時(shí) 間、無(wú)態(tài)性、共享線程和網(wǎng)絡(luò)連接等匯集資源、高速緩沖參考數(shù)據(jù)以及對(duì)大型數(shù)據(jù)庫(kù)進(jìn)行分區(qū)等。 對(duì)習(xí)慣于設(shè)計(jì)獨(dú)立的單用戶應(yīng)用的架構(gòu)師而言,多用戶性要求他們進(jìn)行重要的思維轉(zhuǎn)型。例如,一家公 司的用戶使用 CRM 應(yīng)用服務(wù)存取客戶信息時(shí),該用戶連接的應(yīng)用實(shí)例同時(shí)可能還會(huì)為其他幾十家,甚 或是數(shù)百家公司的用戶提供服務(wù),各用戶之間彼此互不知情。這就要求應(yīng)用架構(gòu)能夠最大化不同用戶間 的資源共享,不過(guò)仍要區(qū)分屬于不同客戶的數(shù)據(jù)。 當(dāng)然,如果我們必須用一臺(tái)服務(wù)器上的單個(gè)應(yīng)用實(shí)例滿足多家不同公司的需求,那么我們就難以針對(duì)某 個(gè)最終用戶的使用體驗(yàn)編寫定制代碼,因?yàn)橹灰槍?duì)某個(gè)客戶進(jìn)行了應(yīng)用定制,就會(huì)改變其他用戶的使 用。因此,我們不是在傳統(tǒng)的意義上進(jìn)行應(yīng)用定制,而是讓每個(gè)客戶用元數(shù)據(jù)配置應(yīng)用的外觀和行為。 SaaS 架構(gòu)師面臨的挑戰(zhàn)在于,如何確??蛻魬?yīng)用配置的簡(jiǎn)易性,同時(shí)還不必為每項(xiàng)配置支付額外的開 發(fā)或運(yùn)營(yíng)成本。 軟件即服務(wù)的成熟模型 我們通過(guò)確定成熟 SaaS 應(yīng)用的三大重要特性進(jìn)一步改進(jìn)了 SaaS 的定義。不過(guò),成熟的 SaaS 模式 不一定同時(shí)具備這三個(gè)特性,有的應(yīng)用只具備其中的一種或兩種,但仍能滿足所有必需的商業(yè)要求。這 時(shí),如果實(shí)現(xiàn)其他的特點(diǎn)難以保持低成本性的話,那么應(yīng)用架構(gòu)師就不必實(shí)現(xiàn)其余的特性了。 從廣義上說(shuō),我們可采用四級(jí)模型來(lái)說(shuō)明 SaaS 應(yīng)用的成熟度,每一級(jí)都比前一級(jí)增加了上述三種成 熟特性中的一種。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 10 第一級(jí):特定的/定制的 成熟度的第一級(jí)類似于 20 世紀(jì) 90 年代傳統(tǒng)的應(yīng)用服務(wù)供應(yīng)商 (ASP) 提供軟件的模式。在這種情況 下,不同的客戶擁有各自主機(jī)應(yīng)用的定制版本,在主機(jī)服務(wù)器上運(yùn)行自己的應(yīng)用實(shí)例。從架構(gòu)上說(shuō),這 種成熟級(jí)別的軟件與傳統(tǒng)銷售的企業(yè)系列軟件很相似,即公司中的不同客戶連接到服務(wù)器上運(yùn)行的相同 實(shí)例,但該實(shí)例完全獨(dú)立于主機(jī)上其他客戶運(yùn)行的其他實(shí)例或進(jìn)程。 一般說(shuō)來(lái),傳統(tǒng)的客戶端—服務(wù)器應(yīng)用無(wú)需太多開發(fā)工作,也不必從頭重新設(shè)計(jì)整個(gè)系統(tǒng),就能轉(zhuǎn)變?yōu)?br>第一級(jí)成熟度的 SaaS 模型。盡管這一級(jí)別的成熟性難以提供全面成熟型 SaaS 解決方案的很多優(yōu) 勢(shì),但仍能幫助供應(yīng)商整合服務(wù)器硬件和管理,從而降低成本。 第二級(jí):可配置性 對(duì)于第二級(jí)成熟度而言,供應(yīng)商為不同的客戶(或用戶)分別提供應(yīng)用實(shí)例主機(jī)服務(wù)。就第一級(jí)成熟度 而言,每個(gè)實(shí)例都是對(duì)用戶分別定制的,而在第二級(jí)成熟度上,所有實(shí)例都使用相同的代碼實(shí)施,供應(yīng) 商提供詳細(xì)的配置選擇,讓客戶能改變應(yīng)用的外觀和行為,從而滿足客戶的需求。盡管不同實(shí)例在代碼 層面上彼此相同,但彼此之間仍完全隔離。 供應(yīng)商所有客戶都使用相同的代碼庫(kù),這大幅降低了 SaaS 應(yīng)用的服務(wù)要求,因?yàn)榇a庫(kù)的任何更改 都能立刻方便地作用于供應(yīng)商的所有客戶,從而無(wú)需逐一更新或優(yōu)化每個(gè)定制實(shí)例了。但是,在應(yīng)用最 初針對(duì)獨(dú)立定制而不是配置元數(shù)據(jù)進(jìn)行設(shè)計(jì)的情況下,將傳統(tǒng)的應(yīng)用轉(zhuǎn)變?yōu)榈诙?jí)成熟度的 SaaS 應(yīng) 用時(shí),比起第一級(jí)成熟度的轉(zhuǎn)型而言,將需要多得多的架構(gòu)重新設(shè)計(jì)工作。 與第一級(jí)成熟度類似,第二級(jí)成熟度也要求供應(yīng)商提供足夠的硬件和存儲(chǔ)資源,以支持大量應(yīng)用實(shí)例同 時(shí)運(yùn)行。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 11 第三級(jí):可配置性與多用戶效率 對(duì)于第三級(jí)成熟度,供應(yīng)商借助單個(gè)實(shí)例來(lái)滿足不同客戶的需求,并采用可配置的元數(shù)據(jù)為不同的用戶 提供獨(dú)特的用戶使用體驗(yàn)和特性集。授權(quán)與安全性策略可確保不同客戶的數(shù)據(jù)彼此區(qū)分開來(lái)。從最終用 戶的角度來(lái)看,不會(huì)察覺到應(yīng)用是與多個(gè)用戶共享的。 這使我們就不再需要為不同客戶的不同實(shí)例提供大量服務(wù)器空間,因此使用計(jì)算資源的效率將大大超過(guò) 第二級(jí)成熟度,從而直接降低了成本。但是,這時(shí)的一大弱點(diǎn)在于,應(yīng)用的可擴(kuò)展性有限。如果不用分 區(qū)來(lái)管理數(shù)據(jù)庫(kù)性能的話,我們只能通過(guò)采用更強(qiáng)大處理器來(lái)擴(kuò)展應(yīng)用(向上擴(kuò)展),但是這樣做只能 使投入回報(bào)逐漸降低,最終導(dǎo)致功能的提高難以適應(yīng)低成本的要求。 第四級(jí):可擴(kuò)展性、可配置性與多用戶效率 第四級(jí)成熟度也是最高級(jí)成熟度,這時(shí)供應(yīng)商在負(fù)載平衡的服務(wù)器群上為不同客戶提供主機(jī)服務(wù),運(yùn)行 相同的實(shí)例,不同客戶的數(shù)據(jù)彼此分開,可配置的元數(shù)據(jù)可以提供獨(dú)特的用戶體驗(yàn)與特性集。SaaS 系 統(tǒng)具備可擴(kuò)展性,可輕松適應(yīng)大規(guī)??蛻舻男枰?,可在無(wú)需對(duì)應(yīng)用進(jìn)行額外架構(gòu)設(shè)計(jì)的情況下根據(jù)需求 靈活地增減后端服務(wù)器的數(shù)量,不管有多少用戶,都能像針對(duì)單個(gè)用戶一樣方便地實(shí)施應(yīng)用修改。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 12 高級(jí)架構(gòu) 從架構(gòu)上看,SaaS 應(yīng)用與采用服務(wù)導(dǎo)向型設(shè)計(jì)原理開發(fā)的其他應(yīng)用很相似。 選擇成熟度級(jí)別 您的應(yīng)用應(yīng)采取哪種成熟度級(jí)別?我們可能認(rèn)為,所有 SaaS 應(yīng)用的最終目標(biāo)都是實(shí)現(xiàn)第四級(jí)的成 熟度,但事實(shí)并非如此。我們可將 SaaS 成熟度視為隔離數(shù)據(jù)和共享數(shù)據(jù)兩個(gè)極端之間的一點(diǎn)。 Per-tenant SLA Data separation Isolate Share Economy of scale Simpler management 具體應(yīng)用應(yīng)在兩端之間的哪一點(diǎn)上,這取決于您的業(yè)務(wù)、架構(gòu)及運(yùn)營(yíng)需求,也取決于客戶的考慮。 我們這里只做簡(jiǎn)單的說(shuō)明,不過(guò)您仍能看出,所有這些因素在一定程度上都是相互關(guān)聯(lián)的。 . 業(yè)務(wù)模型。隔離方法是否有利于贏利?如果拋棄了共享方案的經(jīng)濟(jì)性和管理優(yōu)勢(shì),這將意味著 您向消費(fèi)者提供應(yīng)用的成本將會(huì)更高。但在某些情況下,為了滿足其他需要,這種做法會(huì)是值 得的。此外,即便您向用戶解釋不存在機(jī)密數(shù)據(jù)遭竊的風(fēng)險(xiǎn),但有的客戶從法律或文化的角度 出發(fā),也會(huì)強(qiáng)烈抵制不同用戶共用應(yīng)用的架構(gòu)模型。當(dāng)然,說(shuō)到底,您的商業(yè)模型應(yīng)確保您不 管采取何種成熟度的模型,都能實(shí)現(xiàn)盈利。 . 架構(gòu)模型。您的應(yīng)用能否運(yùn)行統(tǒng)一的邏輯實(shí)例?如果您希望將基于臺(tái)式機(jī)或傳統(tǒng)客戶端—服務(wù) 器應(yīng)用轉(zhuǎn)移至基于因特網(wǎng)的交付系統(tǒng),那么原來(lái)的應(yīng)用可能根本不能與統(tǒng)一實(shí)例、以元數(shù)據(jù)為 中心的模式相兼容,您需要明確為了將原系統(tǒng)轉(zhuǎn)型為完全成熟的 SaaS 應(yīng)用進(jìn)行大量投資,到 底從財(cái)務(wù)上合不合算。如果您從頭設(shè)計(jì)和構(gòu)建網(wǎng)絡(luò)原生應(yīng)用,那么您在采用單個(gè)實(shí)例模式時(shí)才 會(huì)擁有更高的自由度。 . 運(yùn)營(yíng)模型。您能否確保始終滿足服務(wù)水平協(xié)議 (SLA) 的要求?您應(yīng)仔細(xì)考慮您與客戶之間現(xiàn)有 SLA 條款下您應(yīng)承擔(dān)的責(zé)任,其中包括停機(jī)時(shí)間、支持選項(xiàng)、災(zāi)難恢復(fù)等,并確定上述責(zé)任在 互不相關(guān)的客戶共用一個(gè)應(yīng)用實(shí)例的應(yīng)用架構(gòu)下能否得到保證。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 13 上圖描繪的大部分組件對(duì)大多數(shù)應(yīng)用架構(gòu)師而言都是相當(dāng)熟悉的。進(jìn)程服務(wù)給出了智能客戶端和/或網(wǎng) 絡(luò)供應(yīng)層可調(diào)用的界面,并能啟動(dòng)同步工作流程或長(zhǎng)時(shí)間運(yùn)行的事務(wù)處理,以調(diào)用其他商業(yè)服務(wù),與各 處的數(shù)據(jù)存儲(chǔ)進(jìn)行互動(dòng)以讀寫商業(yè)數(shù)據(jù)。安全性服務(wù)負(fù)責(zé)控制最終用戶和后臺(tái)軟件服務(wù)的存取。 最重要的區(qū)別在于增加了元數(shù)據(jù)服務(wù),其負(fù)責(zé)管理不同用戶的應(yīng)用配置。服務(wù)和智能客戶端與元數(shù)據(jù)服 務(wù)發(fā)生互動(dòng),以檢索描述各用戶配置和擴(kuò)展的相關(guān)信息。 元數(shù)據(jù)服務(wù) 就成熟的 SaaS 應(yīng)用而言,元數(shù)據(jù)服務(wù)供應(yīng)商為客戶提供了定制和配置應(yīng)用、滿足其特定需求的主要 手段。通常,客戶可在四大領(lǐng)域進(jìn)行配置更改: . 用戶界面與品牌??蛻敉ǔOM哂杏脩艚缑娴恼{(diào)整功能,以反映各自公司的品牌風(fēng)格,因此 SaaS 應(yīng)用通常都提供相關(guān)特性,以使客戶能夠更改諸如圖形、色彩、字體等相關(guān)內(nèi)容。 . 工作流程與商務(wù)規(guī)則。為了能廣泛地向各種潛在客戶提供服務(wù),任務(wù)關(guān)鍵型 SaaS 應(yīng)用必須能夠 滿足不同工作流程的需要。例如,對(duì)于跟蹤發(fā)票流轉(zhuǎn)的應(yīng)用而言,一家客戶可能要求所有發(fā)票均由 同一名經(jīng)理批準(zhǔn);另一家客戶則要求每張發(fā)票都由兩名經(jīng)理先后批準(zhǔn),第三家客戶則要求每張發(fā)票 得到兩名經(jīng)理批準(zhǔn),而不考慮先后。這時(shí),不同客戶應(yīng)能根據(jù)需要自行配置應(yīng)用的工作流程,以滿 足各自的商業(yè)進(jìn)程要求。 . 數(shù)據(jù)模型的擴(kuò)展。對(duì)于許多數(shù)據(jù)驅(qū)動(dòng)型 SaaS 應(yīng)用而言,單個(gè)模型顯然不能滿足所有需要。即便 對(duì)于相對(duì)簡(jiǎn)單的任務(wù)專用應(yīng)用而言,如果數(shù)據(jù)字段和表格一成不變,也會(huì)給客戶造成麻煩??蓴U(kuò)展 的數(shù)據(jù)模型使客戶能自由地讓應(yīng)用根據(jù)自身需要工作,而不必為了滿足應(yīng)用的要求而改變商業(yè)進(jìn) 程。在本文隨后部分,您將進(jìn)一步了解可擴(kuò)展客戶數(shù)據(jù)模型的架構(gòu)。 . 存取控制。通常,客戶負(fù)責(zé)創(chuàng)建每個(gè)最終用戶各自的賬戶,并確定每個(gè)用戶能夠存取使用的資源和 功能。我們用安全策略跟蹤每個(gè)用戶的使用權(quán)限,客戶應(yīng)能對(duì)安全策略加以配置。 為了幫助客戶靈活地根據(jù)需要進(jìn)行軟件配置,我們將上述選項(xiàng)組織成層級(jí)的配置單元,即“配置域”, 每個(gè)配置域都包括不同的選項(xiàng),以更針對(duì)上述四個(gè)領(lǐng)域做出相應(yīng)更改。每家客戶都擁有頂級(jí)配置域,使 他們能夠在需要時(shí)進(jìn)行配置,并能在頂級(jí)配置域下構(gòu)建任意層級(jí)的一個(gè)或多個(gè)配置域。我們還采用關(guān)系 Copyright . Microsoft Corporation 2006. All Rights Reserved. 14 策略來(lái)決定子節(jié)點(diǎn) (child node) 能否繼承母節(jié)點(diǎn) (parent node) 的配置設(shè)置,或忽略母節(jié)點(diǎn)的設(shè) 置。 舉例而言,如果普通客戶購(gòu)買了整個(gè)企業(yè)的應(yīng)用使用權(quán),其不同的業(yè)務(wù)部門有著不同的需要,那么這些 部門都應(yīng)遵循統(tǒng)一的公司標(biāo)準(zhǔn),同時(shí)還應(yīng)各自配置自身使用的應(yīng)用元素。在各業(yè)務(wù)部門內(nèi)部,同樣也會(huì) 存在下級(jí)單位,它們都有自己特殊的配置需要。對(duì)于上述各組織單元而言,客戶可分別建立配置域,登 錄不同的單元選擇各自的配置選項(xiàng),設(shè)置或更改均可。 與供應(yīng)商定制的傳統(tǒng)業(yè)務(wù)應(yīng)用不同,SaaS 應(yīng)用更多情況下是由客戶自身進(jìn)行配置的。因此,設(shè)計(jì)配置 界面非常重要。理想情況下,客戶應(yīng)能夠通過(guò)向?qū)Щ蚝?jiǎn)易而直觀的屏幕指導(dǎo)進(jìn)行應(yīng)用配置,屏幕上應(yīng)提 供所有可用的選項(xiàng),既避免客戶面臨一大堆信息無(wú)從下手,又能清晰地反映給定配置域下能否針對(duì)相關(guān) 選項(xiàng)進(jìn)行更改。 安全性服務(wù) 在任何軟件環(huán)境下,安全性都是至關(guān)重要的。SaaS 的性質(zhì)決定了安全性既是客戶的最大關(guān)注點(diǎn),又是 應(yīng)用架構(gòu)師需優(yōu)先考慮的重點(diǎn)。以下給出的一些基本指南,有助于確保用戶控制其專用數(shù)據(jù)。 認(rèn)證 SaaS 供應(yīng)商通常將創(chuàng)建和維護(hù)用戶賬戶的責(zé)任下放給客戶,這稱作下放管理權(quán)。管理權(quán)下放造成的 情況是,客戶負(fù)責(zé)創(chuàng)建不同的用戶賬戶,而 SaaS 供應(yīng)商應(yīng)認(rèn)證有關(guān)賬戶。根據(jù)管理權(quán)下放模式的要 求,SaaS 架構(gòu)師采用兩種通用辦法來(lái)解決認(rèn)證問(wèn)題:一是集中認(rèn)證系統(tǒng) (centralized authentication system),一是非集中認(rèn)證系統(tǒng) (decentralized authentication system)。所選 的認(rèn)證系統(tǒng)不同,將導(dǎo)致架構(gòu)的復(fù)雜性不同,也會(huì)導(dǎo)致最終用戶應(yīng)用體驗(yàn)的不同,因此您在制定決策 時(shí),應(yīng)根據(jù)商業(yè)模型的需要來(lái)確定應(yīng)用、客戶和最終用戶的需要。 對(duì)于集中認(rèn)證系統(tǒng)而言,供應(yīng)商管理中央用戶賬戶數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)為所有應(yīng)用的用戶提供服務(wù)??蛻?br>的管理員被授權(quán)在用戶賬戶目錄下創(chuàng)建、管理和刪除用戶賬戶。登錄應(yīng)用的用戶向應(yīng)用提供認(rèn)證信息, 有關(guān)信息根據(jù)中央目錄下的信息加以確認(rèn),如果數(shù)據(jù)有效,就允許該用戶訪問(wèn)。 這種方法所要求的認(rèn)證基礎(chǔ)設(shè)施相對(duì)簡(jiǎn)單,便于設(shè)計(jì)和實(shí)施,也不需要改變客戶自身的用戶基礎(chǔ)設(shè)施。 不過(guò)這種方法的重要缺點(diǎn)之一在于,集中認(rèn)證系統(tǒng)很難實(shí)現(xiàn)單點(diǎn)登錄 (single sign-on),即用戶一次 登錄,就始終能訪問(wèn)企業(yè)網(wǎng)絡(luò)。沒有單點(diǎn)登錄功能,用戶總會(huì)被提示輸入應(yīng)用登錄信息,每次都要手動(dòng) 再次輸入。 在非集中認(rèn)證系統(tǒng)中,客戶采用可與其自己的用戶目錄服務(wù)相連接的聯(lián)合服務(wù) (federation service)。當(dāng)最終用戶嘗試訪問(wèn)應(yīng)用時(shí),聯(lián)合服務(wù)將對(duì)用戶進(jìn)行本地認(rèn)證,并發(fā)布安全令牌, SaaS 供應(yīng)商的認(rèn)證系統(tǒng)將接受安全令牌,并允許用戶接入應(yīng)用。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 15 在單點(diǎn)登錄相當(dāng)重要的情況下,這是一種理想的方式,因?yàn)檎J(rèn)證在后臺(tái)進(jìn)行,不要求用戶記住并輸入一 系列相關(guān)信息。不過(guò),非集中認(rèn)證方案比集中認(rèn)證方案要復(fù)雜得多,而且,如果 SaaS 應(yīng)用有著幾千 家客戶的話,就要與眾多客戶的聯(lián)合服務(wù)分別建立聯(lián)邦式的信任關(guān)系。 在許多情況下,SaaS 供應(yīng)商都希望采用混合方式,對(duì)小型客戶采用集中認(rèn)證系統(tǒng)來(lái)認(rèn)證和管理,而對(duì) 要求單點(diǎn)登錄并愿為此付費(fèi)的大型企業(yè)提供聯(lián)合服務(wù)。 授權(quán) 通常,存取 SaaS 應(yīng)用中的資源和商務(wù)功能都用“角色”的概念來(lái)管理。角色與公司中的特定崗位功 能映射。每個(gè)角色都被賦予一項(xiàng)或更多“許可”,分配到某個(gè)角色的用戶就能根據(jù)相應(yīng)的“業(yè)務(wù)規(guī)則” 執(zhí)行行動(dòng)。 Purchaser Approver if(totalCost < 1500) if((role == ‘Purchaser‘) || (role==‘Approver‘ && duringOfficeHours==false)) Users & Groups Roles Permissions Business Rules Action SaaS 應(yīng)用內(nèi)部負(fù)責(zé)對(duì)角色進(jìn)行管理,角色可包含單個(gè)用戶的賬戶以及用戶群組。不同用戶賬戶和用 戶群組根據(jù)需要被分配到不同的角色。 根據(jù)用戶所分配到的角色,該用戶可獲得一項(xiàng)或者多項(xiàng)許可,以執(zhí)行特定的操作或活動(dòng)。這些活動(dòng)通常 直接與重要的商務(wù)功能或應(yīng)用管理本身映射。例如,購(gòu)買應(yīng)用可能包括創(chuàng)建、提交、批準(zhǔn)以及拒絕購(gòu)買 訂單的相關(guān)許可;抵押經(jīng)紀(jì)公司的應(yīng)用會(huì)包括檢查借款人信用和批準(zhǔn)貸款的許可,等等??筛鶕?jù)需要向 一個(gè)或多個(gè)角色分配一個(gè)許可;每個(gè)用戶可根據(jù)所屬的角色獲得相關(guān)角色的所有許可。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 16 應(yīng)用可根據(jù)商務(wù)規(guī)則對(duì)活動(dòng)和資源的使用實(shí)現(xiàn)比許可更精確的控制。商務(wù)規(guī)則規(guī)定了在允許使用前必須 滿足的條件。例如,您可使用相關(guān)商務(wù)規(guī)則,只允許用戶在正常辦公時(shí)間內(nèi)在不同賬戶間轉(zhuǎn)賬,或者規(guī) 定轉(zhuǎn)賬金額不得超過(guò)一定數(shù)量。 存取控制由配置域管理。每個(gè)配置域根據(jù)應(yīng)用的關(guān)系策略繼承上級(jí)配置域的角色、許可和商務(wù)規(guī)則,并 可在適當(dāng)?shù)臅r(shí)候?qū)ζ溥M(jìn)行修改、添加和刪除。例如,假設(shè)有家客戶總部設(shè)在美國(guó),并在加拿大多倫多設(shè) 有分支機(jī)構(gòu)。根配置域設(shè)有最基本的“福利管理員”角色,可針對(duì)雇員福利管理提供一系列許可,其中 包括管理公司的 401(k) 退休儲(chǔ)蓄計(jì)劃等。由于 401(k) 計(jì)劃是美國(guó)稅收法律的產(chǎn)物,不適用于加拿 大,因此我們可為加拿大辦事處構(gòu)建子配置域,在繼承“福利管理員”角色和相關(guān)許可的同時(shí),對(duì)角色 的許可給出特殊處理,以修改401(k) 計(jì)劃相關(guān)內(nèi)容。在修改原許可的同時(shí),客戶增加了新的許可, 允許該角色修改注冊(cè)退休儲(chǔ)蓄計(jì)劃 (RRSP) 項(xiàng)目,即加拿大相當(dāng)于美國(guó) 401(k) 的立法。 Root Scope Canada (child scope) Benefits Administrator Benefits Administrator 從最佳實(shí)踐角度看,應(yīng)用應(yīng)向所有用戶提供一系列默認(rèn)的角色、許可和商務(wù)規(guī)則,并應(yīng)允許不同用戶通 過(guò)直觀易用的界面定制這些規(guī)則和創(chuàng)建更多規(guī)則。 深入探討:多用戶數(shù)據(jù)模型 到此為止,我們已在相當(dāng)高級(jí)的層面上討論了應(yīng)用架構(gòu),下面我們不妨來(lái)詳細(xì)討論一個(gè)具體問(wèn)題,即如 何設(shè)計(jì)一款客戶能在多用戶環(huán)境下實(shí)現(xiàn)擴(kuò)展的數(shù)據(jù)模型。我們并不是要全面討論數(shù)據(jù)模型擴(kuò)展,不過(guò)這 有助于您在一定程度上了解 SaaS 應(yīng)用設(shè)計(jì)相關(guān)的各種架構(gòu)問(wèn)題。 根據(jù)設(shè)計(jì),您的應(yīng)用自然將包括標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)設(shè)置,根據(jù)解決方案的性質(zhì)提供默認(rèn)的表格、字段、查詢 和關(guān)系等。不過(guò),不同公司有著各自獨(dú)特的需求,僵化的、不能擴(kuò)展的數(shù)據(jù)模型難以滿足這種需求。例 如, SaaS 工作跟蹤系統(tǒng)的一位客戶需要存儲(chǔ)外部生成的分類代碼串,每項(xiàng)記錄都應(yīng)將系統(tǒng)與其他進(jìn) 程完全集成。而另一家客戶則不需要分類串字段,而要求支持類 ID 號(hào)(整數(shù))跟蹤。因此,除非在少 數(shù)專業(yè)領(lǐng)域,您開發(fā)和實(shí)施的方法通常應(yīng)讓客戶能擴(kuò)展默認(rèn)的數(shù)據(jù)模型,以滿足其各自的需求,同時(shí)又 不會(huì)影響其他客戶使用的數(shù)據(jù)模型。我們將討論可解決上述問(wèn)題的三種一般性方法:一是專用的用戶數(shù) 據(jù)庫(kù);二是共享數(shù)據(jù)庫(kù)配合固定擴(kuò)展集,;三是共享數(shù)據(jù)庫(kù)配合定制擴(kuò)展。 專用用戶數(shù)據(jù)庫(kù) 第一種方法就是為各客戶提供專用的數(shù)據(jù)庫(kù),客戶可根據(jù)需要擴(kuò)展數(shù)據(jù)庫(kù)。 就這種方法而言,如果有新客戶就創(chuàng)建新的標(biāo)準(zhǔn)默認(rèn)數(shù)據(jù)庫(kù),作為進(jìn)程部署的一部分,同時(shí)元數(shù)據(jù)服務(wù) 跟蹤數(shù)據(jù)庫(kù)分配給客戶的情況。一旦創(chuàng)建了新的數(shù)據(jù)庫(kù),客戶可在應(yīng)用的用戶界面和程序邏輯允許的情 況下隨意修改,包括創(chuàng)建新字段、新查詢,乃至新的表格和關(guān)系等。 如果提供服務(wù)的成本不是問(wèn)題的話,那么我們考慮這種方法就行了,因?yàn)檫@是最簡(jiǎn)單的方法,而且為客 戶擴(kuò)展默認(rèn)數(shù)據(jù)模型提供了最大的自由度。此外,銀行和醫(yī)療記錄管理等領(lǐng)域的客戶需要極高的數(shù)據(jù)隔 離,如果不能為不同的客戶提供獨(dú)立的數(shù)據(jù)庫(kù),甚至根本不會(huì)考慮有關(guān)應(yīng)用。這種方法的劣勢(shì)在于,每 Copyright . Microsoft Corporation 2006. All Rights Reserved. 17 部服務(wù)器只能支持?jǐn)?shù)量有限的數(shù)據(jù)庫(kù),因此基礎(chǔ)設(shè)施成本會(huì)不斷升高,而且比其他方法的成本增速都要 快。 共享數(shù)據(jù)庫(kù),固定擴(kuò)展集 第二種方法是所有客戶共享一個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)預(yù)設(shè)一些定制字段,允許用戶根據(jù)需要分配使用。 438 345 784 777 345 TenantID Pat Ned Mary Kay Ted FirstName 1952-11-04 1940-03-08 1962-12-21 1956-09-25 1970-07-02 BirthDate null null null 23 null Custom1 Custom2 Custom3 San Francisco Paid null null Paid Yes null null null null 上圖中,不同客戶的記錄在同一個(gè)表格中共存;客戶 ID 字段將不同記錄與相應(yīng)的客戶相關(guān)聯(lián)。除了標(biāo) 準(zhǔn)字段集外,還提供了一系列定制字段,各客戶可選擇字段的用途,以及如何收集數(shù)據(jù)。 定制字段可根據(jù)類型區(qū)分,因此客戶可通過(guò)應(yīng)用和數(shù)據(jù)庫(kù)提供的任何內(nèi)置的類型檢查和確認(rèn)功能來(lái)確認(rèn) 數(shù)據(jù)。此外,字段也可不分為類型,以便客戶用其存儲(chǔ)任何類型的數(shù)據(jù)。(客戶也可選擇提供自己的確 認(rèn)邏輯,避免用戶無(wú)意輸入無(wú)效數(shù)據(jù)。) 共享數(shù)據(jù)庫(kù)在提供服務(wù)方面的成本大大低于隔離的數(shù)據(jù)庫(kù),因?yàn)閱蝹€(gè)數(shù)據(jù)庫(kù)引擎在需要分區(qū)前可支持大 量客戶。這種方法的最大弱點(diǎn)在于,數(shù)據(jù)模型的可擴(kuò)展性受限于定制字段的數(shù)量。為了明智地決定定制 字段的數(shù)量,應(yīng)認(rèn)真分析客戶潛在的需要。如果定制字段太少,客戶就不能有效使用應(yīng)用;如果定制字 段太多,就會(huì)造成數(shù)據(jù)庫(kù)浪費(fèi),很多字段都得不到利用。 共享數(shù)據(jù)庫(kù),定制擴(kuò)展 第三種方法是構(gòu)建統(tǒng)一的共享數(shù)據(jù)庫(kù),并允許客戶自行擴(kuò)展數(shù)據(jù)模型,在不同的表格中將定制數(shù)據(jù)存儲(chǔ) 為名稱值對(duì) (name-value pair)。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 18 438 345 784 777 345 TenantID Pat Ned Mary Kay Ted FirstName 1952-11-04 1940-03-08 1962-12-21 1956-09-25 1970-07-02 BirthDate RecordID Affiliation Subscriber Expire Status Subscriber Name Acme No 2008-07-29 Gold Yes Value ∞ 1 301 117 564 564 893 RecordID 301 117 564 null 893 這時(shí),包含定制數(shù)據(jù)的每個(gè)客戶記錄都被分配到了一個(gè)唯一的記錄 ID,在獨(dú)立的擴(kuò)展表格中與一行或 多行相匹配。對(duì)于表格中的各行而言,都存儲(chǔ)了一個(gè)名稱值對(duì)。每個(gè)客戶都能根據(jù)商務(wù)需要?jiǎng)?chuàng)建任意數(shù) 量的名稱值對(duì)。當(dāng)應(yīng)用檢索客戶記錄時(shí),會(huì)在定制數(shù)據(jù)表格中進(jìn)行搜索,選擇所有對(duì)應(yīng)于記錄 ID 的 行,返回后作為普通字段數(shù)據(jù)處理。顯然,定制數(shù)據(jù)表格中的數(shù)據(jù)不能分類,因?yàn)槠渲邪臄?shù)據(jù)對(duì)不 同客戶而言可能采用多種不同格式。為了解決這一問(wèn)題,我們可選擇再增加一列,保存數(shù)據(jù)類型標(biāo)識(shí) 符,這樣在檢索數(shù)據(jù)時(shí)就能將數(shù)據(jù)與相應(yīng)的數(shù)據(jù)類型對(duì)應(yīng)。 這種方法使我們能夠隨意擴(kuò)展數(shù)據(jù)模型,同時(shí)還能保持采用共享數(shù)據(jù)庫(kù)的成本優(yōu)勢(shì)。其主要弱點(diǎn)在于增 加了數(shù)據(jù)庫(kù)功能的復(fù)雜性,如檢索、索引、查詢和更新記錄都變得更為復(fù)雜。如果您估計(jì)客戶在擴(kuò)展默 認(rèn)數(shù)據(jù)模型時(shí)需要高度靈活性而又不需要數(shù)據(jù)隔離,那么這種方法就是最佳選擇。 在開發(fā)可擴(kuò)展性數(shù)據(jù)模型時(shí),應(yīng)記住,客戶實(shí)施的任何擴(kuò)展都會(huì)要求商業(yè)邏輯的相應(yīng)擴(kuò)展,這樣應(yīng)用才 能使用定制數(shù)據(jù),同時(shí)也要求配置邏輯的擴(kuò)展,這樣用戶才能輸入定制數(shù)據(jù)并獲得輸出。因此,您向客 戶提供的配置界面應(yīng)針對(duì)上述三種方法提供相應(yīng)的更新機(jī)制,并最好以整合的方式提供。(在后續(xù)發(fā)布 的文章中,我們將討論如何采取相應(yīng)機(jī)制,幫助客戶擴(kuò)展商務(wù)邏輯和用戶界面。) 可擴(kuò)展性 大型企業(yè)軟件旨在讓數(shù)千人同時(shí)使用。如果您有過(guò)開發(fā)此類企業(yè)應(yīng)用的經(jīng)驗(yàn),您肯定已親自遇到過(guò)創(chuàng)建 可擴(kuò)展架構(gòu)的重大挑戰(zhàn)。對(duì)于 SaaS 應(yīng)用而言,可擴(kuò)展性更為重要:您所支持的用戶數(shù)量,是單個(gè)客 戶的平均用戶群乘以客戶總數(shù)。對(duì)那些習(xí)慣于設(shè)計(jì)內(nèi)部企業(yè)軟件的 ISV 來(lái)說(shuō),支持這樣大規(guī)模的用戶 群就如同從低級(jí)別聯(lián)賽進(jìn)級(jí)參加頂級(jí)聯(lián)賽一樣:規(guī)則是熟悉的,但賽事本身則是完全不同的級(jí)別。這時(shí) 您所構(gòu)建的不是一個(gè)廣泛部署的業(yè)務(wù)關(guān)鍵型企業(yè)應(yīng)用,而是一個(gè)因特網(wǎng)級(jí)的系統(tǒng),需要積極支持?jǐn)?shù)以百 萬(wàn)計(jì)的潛在用戶群。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 19 應(yīng)用擴(kuò)展 當(dāng)然,您的解決方案很難成為像 Hotmail 那樣擁有龐大的用戶群(如果確實(shí)擁有這么多用戶,真該恭 喜您?。2贿^(guò),可擴(kuò)展性方面的挑戰(zhàn)卻是相同的。 應(yīng)用可向上擴(kuò)展(將應(yīng)用轉(zhuǎn)移至更強(qiáng)大的較大型服務(wù)器上),也可橫向擴(kuò)展(在更多的服務(wù)器上運(yùn)行應(yīng) 用)。對(duì)所有曾用全新計(jì)算機(jī)取代過(guò)舊計(jì)算機(jī)的人來(lái)說(shuō),向上擴(kuò)展并不陌生,該解決方案通常更適用于 那些無(wú)需為眾多并發(fā)用戶提供服務(wù)的小型應(yīng)用。不過(guò),就 SaaS 而言,橫向擴(kuò)展通常是擴(kuò)充容量的最 佳辦法,這一點(diǎn)我們?cè)?SaaS 成熟度模型中已經(jīng)探討過(guò)了。設(shè)計(jì)出色的 SaaS 應(yīng)用可橫向擴(kuò)展到眾多 服務(wù)器上,每臺(tái)服務(wù)器都運(yùn)行應(yīng)用的一個(gè)或更多實(shí)例。設(shè)計(jì)“橫向擴(kuò)展型”應(yīng)用的一些設(shè)計(jì)指南如下: . 設(shè)計(jì)應(yīng)用運(yùn)行在無(wú)狀態(tài)模式下,所有必需的用戶和會(huì)話數(shù)據(jù)都存儲(chǔ)在客戶端或分布式存儲(chǔ)設(shè)備上, 任何應(yīng)用實(shí)例都能訪問(wèn)。無(wú)狀態(tài)是指每個(gè)事務(wù)處理都能由任何實(shí)例來(lái)完成,用戶在一次會(huì)話中可用 眾多不同的實(shí)例進(jìn)行事務(wù)處理,但用戶本身并不知情; . 設(shè)計(jì)應(yīng)用進(jìn)行異步 I/O 操作,這樣應(yīng)用在等待輸入輸出完成時(shí)也能進(jìn)行有用的工作; . 將線程、網(wǎng)絡(luò)連接和數(shù)據(jù)庫(kù)連接等資源集中,這有助于使計(jì)算資源最大化,并提高您預(yù)測(cè)資源使用 的能力; . 采用既可以實(shí)現(xiàn)并發(fā)最大化,同時(shí)還能使排它鎖定最小化的方式寫入數(shù)據(jù)庫(kù)操作。例如,在執(zhí)行只 讀操作時(shí),不要鎖定記錄。 當(dāng)然,這只是對(duì)這一問(wèn)題的最簡(jiǎn)單討論。關(guān)于如何實(shí)施可擴(kuò)展架構(gòu),我們可以大書特書,有關(guān)材料可謂 汗牛充棟。如欲了解更多指南,請(qǐng)參見《微軟模式和實(shí)踐》中有關(guān)性能與可擴(kuò)展性方面的資料,網(wǎng)址如 下:http://msdn.microsoft.com/practices/Topics/perfscale/default.aspx。 數(shù)據(jù)擴(kuò)展 隨著數(shù)據(jù)庫(kù)向越來(lái)越多的用戶同時(shí)提供服務(wù)以及數(shù)據(jù)庫(kù)的不斷擴(kuò)大,執(zhí)行查詢和搜索等操作所需的時(shí)間 也將大幅延長(zhǎng)。 SaaS 應(yīng)用通常使用相同的數(shù)據(jù)庫(kù)同時(shí)為數(shù)以千計(jì)的客戶提供服務(wù),因此特別容易受 到該類型性能降低的影響。所以,我們要為未來(lái)的發(fā)展做好充分計(jì)劃,這一點(diǎn)相當(dāng)重要。 擴(kuò)展數(shù)據(jù)庫(kù)的簡(jiǎn)便方法之一就是進(jìn)行分區(qū),將數(shù)據(jù)分入較小的塊,以提高查詢和更新的效率。我們不妨 考慮建立分區(qū)策略,明確數(shù)據(jù)分區(qū)的最佳途徑。例如,如果應(yīng)用的客戶來(lái)自世界各地,那么我們可采用 地理分區(qū)策略,屬于歐洲客戶的數(shù)據(jù)位于一個(gè)分區(qū),屬于亞洲客戶的數(shù)據(jù)位于另一個(gè)分區(qū),以此類推。 就大多數(shù)情況而言,數(shù)據(jù)庫(kù)的大小會(huì)不斷擴(kuò)展。因此,我們還應(yīng)采取一個(gè)適當(dāng)?shù)膭?dòng)態(tài)再分區(qū)策略,將已 經(jīng)分區(qū)的數(shù)據(jù)進(jìn)行再分區(qū),以滿足性能和擴(kuò)展的需要,這一點(diǎn)也相當(dāng)重要。 操作結(jié)構(gòu) 第三個(gè)重大思維轉(zhuǎn)變就是優(yōu)化應(yīng)用的操作結(jié)構(gòu):將應(yīng)用提供給客戶需要做哪些工作?如何保證應(yīng)用的可 用性以及如何經(jīng)濟(jì)有效地確保應(yīng)用良好運(yùn)行?對(duì)于許多 ISV 而言,他們從未幫助客戶運(yùn)行過(guò)數(shù)據(jù)中 心,這可能也是 SaaS 供應(yīng)商最不熟悉的環(huán)節(jié)。 SaaS 供應(yīng)商不僅應(yīng)是軟件設(shè)計(jì)和市場(chǎng)營(yíng)銷專家,還 需是操作和管理方面的專家。 微軟操作框架 (MOF) 等資源能夠針對(duì)維護(hù)系統(tǒng)可靠性、可用性、可支持性和易管理性等提供大量有益 的相關(guān)指導(dǎo)。除 MOF 能解決常見操作問(wèn)題外, SaaS 模式還具有一些自身特有的難題。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 20 共享服務(wù) 如果您曾經(jīng)親自創(chuàng)建過(guò)企業(yè)級(jí)萬(wàn)維網(wǎng),那么您可能會(huì)對(duì)網(wǎng)絡(luò)托管和中間件服務(wù)的基本情況有所了解。公 司既可獨(dú)立托管網(wǎng)站,也可與外部供應(yīng)商達(dá)成協(xié)議,共同進(jìn)行設(shè)備代管或包括硬件、存儲(chǔ)和網(wǎng)絡(luò)帶寬等 項(xiàng)目在內(nèi)的全業(yè)務(wù)托管。托管服務(wù)主要確保站點(diǎn)的可用性,但通常不負(fù)責(zé)站點(diǎn)的運(yùn)營(yíng)和維護(hù)。 在準(zhǔn)備托管時(shí),可考慮增加一個(gè) SaaS 附加層。根據(jù)您的業(yè)務(wù)計(jì)劃,您可能需要一個(gè)測(cè)量與計(jì)費(fèi)系 統(tǒng),以便實(shí)現(xiàn)如下目標(biāo): . 準(zhǔn)確跟蹤客戶的使用,根據(jù)用戶使用的時(shí)間和資源向他們開出賬單。 . 在某些時(shí)刻或滿足有關(guān)標(biāo)準(zhǔn)的情況下限制或阻止訪問(wèn)。 . 監(jiān)控站點(diǎn)訪問(wèn)和性能,確保符合 SLA 的規(guī)定。 . 執(zhí)行其他功能,確??蛻舻臒o(wú)縫體驗(yàn),滿足或超過(guò)客戶的預(yù)期目標(biāo)。 用于執(zhí)行上述功能的系統(tǒng)整體成為共享服務(wù)。 共享服務(wù)可進(jìn)一步分為兩小類。 . 運(yùn)營(yíng)支持服務(wù) (OSS) 處理賬戶激活、供應(yīng)、服務(wù)擔(dān)保、使用和測(cè)量等運(yùn)營(yíng)問(wèn)題。 . 業(yè)務(wù)支持服務(wù) (BSS) 支持計(jì)費(fèi)服務(wù)(其中包括發(fā)票、定價(jià)、稅收和收款等)和客戶管理(其中包 括訂單錄入、客戶自助服務(wù)、客戶關(guān)懷、故障記錄和客戶關(guān)系管理等)。 與傳統(tǒng)的 Web 主機(jī)托管一樣,您也應(yīng)確定是自建共享服務(wù)層并自己提供應(yīng)用的主機(jī)服務(wù),還是與外部 主機(jī)服務(wù)公司(即 SaaS 供應(yīng)商)達(dá)成合同,由其來(lái)提供相應(yīng)服務(wù)。 SaaS 供應(yīng)商可提供一系列共享 服務(wù),能夠有效解決上述商務(wù)與運(yùn)營(yíng)問(wèn)題。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 21 監(jiān)督 您與客戶達(dá)成的 SLA 將您應(yīng)滿足的運(yùn)營(yíng)標(biāo)準(zhǔn)加以量化。SLA 是具有法律約束力的合同,如果不能滿足 協(xié)議要求,就意味著將損失大量收入,對(duì)您的商譽(yù)造成影響。監(jiān)督應(yīng)用架構(gòu),防范其出問(wèn)題,這是在問(wèn) 題導(dǎo)致嚴(yán)重停機(jī)或降低性能之前查出并修復(fù)故障的重要途徑。 可用性監(jiān)控 確保系統(tǒng)的高度可用性是所有 SaaS 開發(fā)商的重中之重。停機(jī)不僅影響一臺(tái)服務(wù)器或數(shù)據(jù)中心,還會(huì) 導(dǎo)致大部分客戶數(shù)據(jù)丟失,降低工作效率,甚至影響到所有用戶!有些 ISV 從傳統(tǒng)的臺(tái)式機(jī)或客戶端 —服務(wù)器軟件開發(fā)向 SaaS 模式轉(zhuǎn)型,對(duì)他們來(lái)說(shuō),確保以網(wǎng)絡(luò)為中心的應(yīng)用模型的可用性,將是全 新的、從未遇到過(guò)的挑戰(zhàn)。我們建議您在應(yīng)用中建立中心監(jiān)控 (heartbeat monitoring) 與告警機(jī)制 等基本方法的支持,并特別關(guān)注潛在的薄弱連接,如不在您控制之下的到數(shù)據(jù)庫(kù)的遠(yuǎn)程連接。 當(dāng)然,告警等技術(shù)機(jī)制只是確保高度可用性的一部分,如果發(fā)出告警卻沒有任何反應(yīng),那么也根本不能 起作用。要確保您的運(yùn)營(yíng)中心制定具體到位的行動(dòng)措施和標(biāo)準(zhǔn),在系統(tǒng)發(fā)生故障時(shí)能發(fā)揮實(shí)效。 如欲了解與高可用性相關(guān)問(wèn)題的概括介紹,請(qǐng)參見微軟 TechNet 上的文章“服務(wù)管理功能:可用 性”,網(wǎng)址為: http://www.microsoft.com/technet/itsolutions/cits/mo/smf/smfavamg.mspx。 性能監(jiān)控 客戶希望您提供的應(yīng)用達(dá)到可接受的性能水平。從一定意義上說(shuō),SLA 作為您與客戶達(dá)成合同的一部 分,對(duì)這種性能要求提出了明確規(guī)定。不過(guò),除了 SLA 的明文規(guī)定外,如果客戶感覺您的應(yīng)用速度 慢,反應(yīng)遲鈍,那么他們也很可能終止合同,或拒絕繼續(xù)作為付費(fèi)用戶。牢騷滿腹的用戶會(huì)在網(wǎng)站上大 發(fā)不滿或在行業(yè)出版物上抱怨連連,從而使您的應(yīng)用聲名狼藉。相反,快速高效的應(yīng)用不僅能滿足用戶 需求,還能使他們開心。如果客戶從反應(yīng)較慢的傳統(tǒng)軟件套件轉(zhuǎn)而采用您的軟件的話,您還會(huì)使他們更 容易接受整個(gè) SaaS 模式。 為了確保高級(jí)性能,只要有可能,就應(yīng)直接在應(yīng)用設(shè)計(jì)中構(gòu)建相應(yīng)的性能支持。要對(duì) CPU 占用和應(yīng)用 響應(yīng)時(shí)間等性能指標(biāo)設(shè)定標(biāo)準(zhǔn),如果出現(xiàn)管理問(wèn)題,要馬上通知相關(guān)人員解決。 確定性能底線通常是最重要的工作。性能底線將便于我們?cè)诓徽G闆r發(fā)生時(shí)及時(shí)察覺問(wèn)題的癥結(jié)所 在。 結(jié)論 本文討論的有關(guān)問(wèn)題還有大量的篇幅可談可寫,不過(guò),您讀到現(xiàn)在,應(yīng)該對(duì) SaaS 模式以及如何讓您 和您的客戶受益于這種模式有了一定的了解,并建立了一個(gè)基本的相關(guān)概念框架。作為一種軟件服務(wù)的 新模式,SaaS 是建立在多用戶效率、高度可擴(kuò)展性與元數(shù)據(jù)可配置性基礎(chǔ)上的架構(gòu)模型,能夠以極低 的成本為現(xiàn)有與潛在客戶提供出色的軟件。采用新的理念與原理將助您更有效地把握長(zhǎng)尾部分的商機(jī)。 Copyright . Microsoft Corporation 2006. All Rights Reserved. 22 反饋 本文作者歡迎您就本文內(nèi)容提供反饋意見。請(qǐng)將您的反饋意見發(fā)送至以下電子郵件地址: fredch@microsoft.com 或 gianpc@microsoft.com。謝謝! |
|
來(lái)自: ShangShujie > 《document》