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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

多租户saas 架构_[译/注] Force.com 多租户互联网应用开发平台的设计

發(fā)布時(shí)間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多租户saas 架构_[译/注] Force.com 多租户互联网应用开发平台的设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文地址?


http://cloud.pubs.dbs.uni-leipzig.de/sites/cloud.pubs.dbs.uni-leipzig.de/files/p889-weissman-1.pdf

譯注:原文發(fā)表于 ACM,2009年6月

作者


  • Craig D Weissman, CTO, Salesforce.com

  • Steve Bobrowski, Technical Marketing Consultant, Salesforce.com

  • 摘要


    Force.com 是當(dāng)今杰出的按需應(yīng)用程序開發(fā)平臺(tái),支持著 55000 多個(gè)組織。個(gè)體企業(yè)和商業(yè)軟件即服務(wù) (SaaS) 供應(yīng)商相信該平臺(tái)能夠提供強(qiáng)大、可靠的、互聯(lián)網(wǎng)規(guī)模的應(yīng)用程序。為了滿足大規(guī)模用戶需求,Force.com 通過(guò)以元數(shù)據(jù)驅(qū)動(dòng)的軟件架構(gòu)為基礎(chǔ)來(lái)支持多租戶應(yīng)用。

    本論文的重點(diǎn)是多租戶,這是一種可以大大改善 SaaS 應(yīng)用程序管理的基本設(shè)計(jì)方法。本論文定義了多租戶,解釋它的優(yōu)點(diǎn),以及說(shuō)明了為什么元數(shù)據(jù)驅(qū)動(dòng)的軟件架構(gòu)是實(shí)現(xiàn)多租戶的首選。

    目錄結(jié)構(gòu)


    1.介紹

    2.多租戶應(yīng)用

    3.對(duì)比云計(jì)算和 PaaS

    4.元數(shù)據(jù)驅(qū)動(dòng)架構(gòu)

    5.架構(gòu)總覽

    6.數(shù)據(jù)定義和存儲(chǔ)

    6.1 對(duì)象元數(shù)據(jù)表

    6.2 字段元數(shù)據(jù)表

    6.3 數(shù)據(jù)表

    6.4 CLOBs 表

    6.5 索引數(shù)據(jù)透視表

    6.6 UniqueFields 數(shù)據(jù)透視表

    6.7 關(guān)系數(shù)據(jù)透視表

    6.8 附加數(shù)據(jù)透視表

    6.9 數(shù)據(jù)與元數(shù)據(jù)的分區(qū)

    7.應(yīng)用開發(fā)、邏輯和處理

    7.1 應(yīng)用框架

    7.2 元數(shù)據(jù)和 Web Service APIs

    7.3 通過(guò) API 調(diào)用進(jìn)行批量處理

    7.4 刪除、取消刪除和回收站

    7.5 數(shù)據(jù)定義處理

    7.6 APEX

    8.內(nèi)部查詢優(yōu)化

    9.全文檢索引擎

    10.結(jié)論?

    正文


    1.介紹

    歷史表明,每一個(gè)在技術(shù)上頻繁和增量的進(jìn)步以及在商業(yè)模式上的變更,都會(huì)造成軟件應(yīng)用的主要模式轉(zhuǎn)型,這種轉(zhuǎn)型體現(xiàn)在在設(shè)計(jì)、構(gòu)建以及對(duì)于終端用戶的交付。如今,可靠帶寬的互聯(lián)網(wǎng)訪問(wèn)、面向服務(wù)的架構(gòu) (SOA),以及效率低下的專用內(nèi)部部署應(yīng)用程序管理,這些都推動(dòng)著向一種可管理、可共享、基于Web Service的交付模式轉(zhuǎn)型,這種交付模式稱之為軟件即服務(wù) (SaaS)。

    2.多租戶應(yīng)用

    為了降低成本,越來(lái)越多的應(yīng)用程序是多租戶的,向許多不同用戶提供相同的應(yīng)用程序。傳統(tǒng)的單租戶應(yīng)用程序?yàn)榱藵M足一個(gè)組織的需求,要求一組專用的資源;多租戶的應(yīng)用程序可以通過(guò)使用硬件資源和管理單個(gè)軟件實(shí)例,來(lái)滿足多個(gè)租戶 (多個(gè)公司或者一個(gè)公司內(nèi)的多個(gè)部門等) 的需求,如圖1。?

    圖1 一個(gè)多租戶應(yīng)用程序共享單一堆棧資源以滿足多個(gè)組織的需求

    租戶使用同一個(gè)多租戶服務(wù),同時(shí)能夠?qū)崿F(xiàn) (與其他租戶) 相互之間虛擬隔離。組織可以使用和定制一個(gè)應(yīng)用程序,就像它們各自擁有一個(gè)單獨(dú)的實(shí)例一樣,但是他們的數(shù)據(jù)和自定義設(shè)置仍然是安全的,并且與所有其他租戶的活動(dòng)保持隔離。單個(gè)應(yīng)用程序?qū)嵗谶\(yùn)行時(shí)可以在任何時(shí)候?qū)τ谌魏翁囟ㄗ鈶暨M(jìn)行有效地變形。

    譯注:這里的「變形」的理解:對(duì)于不同的租戶,功能表現(xiàn)上按需做不同的變更和呈現(xiàn)。

    多租戶是一種架構(gòu)方法,它能夠同時(shí)為應(yīng)用程序供應(yīng)商和最終用戶帶來(lái)收益。通過(guò)一個(gè)應(yīng)用程序?yàn)槎鄠€(gè)組織服務(wù),將為應(yīng)用程序供應(yīng)商帶來(lái)巨大的經(jīng)濟(jì)效益。只需一組硬件資源即可滿足所有用戶的需求,只需要相對(duì)較少和經(jīng)驗(yàn)豐富的 (運(yùn)維) 管理人員就能有效地管理一套軟件和硬件,并且開發(fā)人員只需要在一個(gè)平臺(tái) (操作系統(tǒng)、數(shù)據(jù)庫(kù)等) 上構(gòu)建和維護(hù)一套代碼庫(kù)。從經(jīng)濟(jì)上來(lái)講,多租戶使得應(yīng)用軟件提供商能夠更低成本地為客戶服務(wù)。

    多租戶還有一些有趣的附加好處,包括提升了質(zhì)量、用戶滿意度和客戶留存率。單租戶應(yīng)用程序部署在應(yīng)用程序供應(yīng)商無(wú)法訪問(wèn)的隔離孤島上,與這不同的是,多租戶應(yīng)用程序是由供應(yīng)商本身托管的一個(gè)大型社區(qū)。這種設(shè)計(jì)轉(zhuǎn)變使得供應(yīng)商可以從用戶群收集操作信息 (如哪些查詢響應(yīng)慢、發(fā)生錯(cuò)誤等),并對(duì)服務(wù)進(jìn)行頻繁、漸進(jìn)地改進(jìn),使得整個(gè)用戶社區(qū)立即受益。

    基于多租戶平臺(tái)的兩個(gè)附加好處是協(xié)作和集成。由于所有用戶在一個(gè)空間運(yùn)行所有應(yīng)用程序,因此很容易允許任何應(yīng)用程序的任何用戶對(duì)特定的數(shù)據(jù)集進(jìn)行不同的訪問(wèn)。這個(gè)能力極大地簡(jiǎn)化了集成相關(guān)應(yīng)用程序及其管理的數(shù)據(jù)所需的工作。?

    3.對(duì)比云計(jì)算和 PaaS

    原先的云計(jì)算是「以機(jī)器為中心」的服務(wù),可以為應(yīng)用程序部署按需提供基礎(chǔ)設(shè)施,即基礎(chǔ)設(shè)施即服務(wù) (IaaS)。這樣的云只提供了執(zhí)行包含應(yīng)用程序的虛擬服務(wù)器所需的計(jì)算能力和存儲(chǔ)能力。一些希望快速進(jìn)入市場(chǎng)的 SaaS 供應(yīng)商,通過(guò)基于 IaaS 實(shí)現(xiàn)單租戶實(shí)例交付的策略,避免了開發(fā)真正多租戶方案的技術(shù)挑戰(zhàn)。

    譯注:這里可以看出,「基于 IaaS 實(shí)現(xiàn)單租戶實(shí)例交付」在 salesforce.com 看來(lái)是「?jìng)味嘧鈶簟?。但?shí)際上隨著時(shí)代的發(fā)展,這也被認(rèn)為是多租戶的一種形態(tài)。后來(lái)在 Gartner 定義的多租戶七層模型中,這種屬于「Shared Nothing」或者「Shared Hardware」。

    平臺(tái)即服務(wù) (PaaS),比如 Force.com,基于一個(gè)「以應(yīng)用為中心」的方法,它抽象了服務(wù)器的概念。PaaS 讓開發(fā)者在一開始就專注在應(yīng)用開發(fā),并且通過(guò)一鍵部署應(yīng)用。供應(yīng)商無(wú)需擔(dān)心多租戶、高可用、負(fù)載均衡、可伸縮性、系統(tǒng)備份、補(bǔ)丁和安全性以及其他基礎(chǔ)架構(gòu)相關(guān)的問(wèn)題。

    譯注:PaaS 鼻祖 Heroku 2007年6月起開始開發(fā),2010年被 Salesforce.com 收購(gòu)。

    4.元數(shù)據(jù)驅(qū)動(dòng)架構(gòu)

    僅當(dāng)多租戶可以支持應(yīng)用 (實(shí)現(xiàn)) 可靠、可自定義、可升級(jí)、安全和快速 (迭代),它才是實(shí)用的。但是,多租戶應(yīng)用程序如何允許每個(gè)租戶為標(biāo)準(zhǔn)的數(shù)據(jù)對(duì)象創(chuàng)建自定義擴(kuò)展,以及定制全新的自定義數(shù)據(jù)對(duì)象?如何在共享數(shù)據(jù)庫(kù)中確保特定租戶的數(shù)據(jù)的安全性?租戶如何自定義應(yīng)用程序的界面和業(yè)務(wù)邏輯,而不會(huì)影響所有其他租戶的應(yīng)用程序功能或可用性?如何在不破壞租戶自定義內(nèi)容的情況下,打補(bǔ)丁和升級(jí)應(yīng)用程序?

    創(chuàng)建一個(gè)靜態(tài)編譯的可執(zhí)行應(yīng)用程序來(lái)滿足這些和其他獨(dú)特的多租戶挑戰(zhàn),這是很困難的。本質(zhì)上,多租戶應(yīng)用程序必須本質(zhì)上是動(dòng)態(tài)的或多態(tài)的,才能滿足各種租戶及其用戶的個(gè)人期望。

    圖2 定義良好的元數(shù)據(jù)驅(qū)動(dòng)架構(gòu)

    由于這些原因,多租戶應(yīng)用程序設(shè)計(jì)需要演變成,使用一個(gè)運(yùn)行時(shí)引擎從元數(shù)據(jù) (有關(guān)應(yīng)用程序本身的數(shù)據(jù)) 生成應(yīng)用程序組件,見圖2。在定義良好的元數(shù)據(jù)驅(qū)動(dòng)架構(gòu)中,已編譯的運(yùn)行時(shí)引擎(內(nèi)核)、應(yīng)用程序數(shù)據(jù)、描述應(yīng)用程序基本功能的元數(shù)據(jù)、以及對(duì)應(yīng)租戶數(shù)據(jù)和定制相關(guān)的元數(shù)據(jù),這些內(nèi)容之間有明顯的邊界。有了這些不同的邊界,使得可以獨(dú)立更新系統(tǒng)內(nèi)核、修改核心應(yīng)用程序或者自定義特定租戶的組件,并且沒有互相影響的風(fēng)險(xiǎn)。?

    譯注:從租戶的角度,考慮抽象出系統(tǒng)中變與不變的部分、租戶特有和公用的部分,把系統(tǒng)按照這些分解成有確定邊界的部分。

    5.架構(gòu)總覽

    Force.com 經(jīng)過(guò)優(yōu)化過(guò)的元數(shù)據(jù)驅(qū)動(dòng)架構(gòu),可以為按需的多租戶應(yīng)用提供出色的性能、可伸縮性和可自定義能力。

    在 Force.com 中,暴露給開發(fā)人員和應(yīng)用程序用戶的全部?jī)?nèi)容,在內(nèi)部表示為元數(shù)據(jù)。表單、報(bào)表、工作流、用戶訪問(wèn)權(quán)限、特定租戶自定義和業(yè)務(wù)邏輯,甚至是底層數(shù)據(jù)表和索引的定義,都是抽象結(jié)構(gòu),僅作為元數(shù)據(jù)存在于 Force.com 的通用數(shù)據(jù)字典 (UDD) 中。例如,當(dāng)開發(fā)人員構(gòu)建新的自定義應(yīng)用程序并定義一個(gè)自定義表、布置表單或編寫一些過(guò)程代碼時(shí),Force.com 不會(huì)在數(shù)據(jù)庫(kù)中創(chuàng)建「實(shí)際」的表或者編譯任何代碼。取而代之的是,Force.com 只是存儲(chǔ)元數(shù)據(jù),平臺(tái)引擎可以在運(yùn)行時(shí)使用元數(shù)據(jù)生成「虛擬」的應(yīng)用程序組件。當(dāng)某人想要修改或者自定義應(yīng)用程序的某些內(nèi)容時(shí),只需要對(duì)相應(yīng)的元數(shù)據(jù)進(jìn)行簡(jiǎn)單的無(wú)阻塞更新即可。

    由于元數(shù)據(jù)是 Force.com 應(yīng)用程序的關(guān)鍵組成部分,因此平臺(tái)的運(yùn)行時(shí)引擎必須優(yōu)化對(duì)元數(shù)據(jù)的訪問(wèn);否則,頻繁的元數(shù)據(jù)訪問(wèn)將妨礙平臺(tái)擴(kuò)展。考慮到這一潛在瓶頸,Force.com 使用元數(shù)據(jù)緩存來(lái)維護(hù)內(nèi)存中最近使用的元數(shù)據(jù),避免降低磁盤 I/O 和代碼重新編譯的性能,并縮短應(yīng)用程序響應(yīng)時(shí)間。

    Force.com 將所有虛擬表的應(yīng)用程序數(shù)據(jù)存儲(chǔ)在一些用作堆存儲(chǔ)的大型數(shù)據(jù)庫(kù)表中。然后平臺(tái)引擎會(huì)在運(yùn)行時(shí)通過(guò)考慮相應(yīng)的元數(shù)據(jù)來(lái)實(shí)現(xiàn) (進(jìn)行不同的表現(xiàn)) 虛擬表的數(shù)據(jù)。

    為了優(yōu)化對(duì)系統(tǒng)大表中數(shù)據(jù)的訪問(wèn),Force.com 的引擎依賴于一組專門的數(shù)據(jù)透視表,這些數(shù)據(jù)透視表為各種目的維護(hù)非規(guī)范化的數(shù)據(jù),例如索引、唯一性、關(guān)系等。

    Force.com 的數(shù)據(jù)處理引擎通過(guò)透明地批量執(zhí)行數(shù)據(jù)修改操作來(lái)幫助簡(jiǎn)化大型數(shù)據(jù)負(fù)載和在線事物處理應(yīng)用程序的開銷。這個(gè)引擎具有內(nèi)置的故障恢復(fù)機(jī)制,該機(jī)制可在排除導(dǎo)致錯(cuò)誤的記錄之后自動(dòng)重試批量保存操作。

    為了進(jìn)一步提高應(yīng)用程序的響應(yīng)時(shí)間,該平臺(tái)采用了外部搜索服務(wù),該服務(wù)可優(yōu)化全文索引和搜索。隨著應(yīng)用程序更新數(shù)據(jù),搜索服務(wù)的后臺(tái)進(jìn)程幾乎實(shí)時(shí)地異步更新租戶和用戶特定的索引。應(yīng)用程序引擎和搜索服務(wù)之間的這種職責(zé)分離使平臺(tái)應(yīng)用程序可以有效地處理事務(wù),而不會(huì)增加文本索引更新的開銷,同時(shí)可以快速為用戶提供準(zhǔn)確的搜索結(jié)果。

    Force.com 的運(yùn)行時(shí)應(yīng)用程序生成器可以響應(yīng)特定用戶的請(qǐng)求,動(dòng)態(tài)構(gòu)建應(yīng)用程序,因此,引擎嚴(yán)重依賴其「多租戶感知」查詢優(yōu)化器來(lái)盡可能高效地執(zhí)行內(nèi)部操作。查詢優(yōu)化器考慮哪個(gè)用戶正在執(zhí)行給定的應(yīng)用程序功能,然后使用通用數(shù)據(jù)字典 (UDD) 中維護(hù)的相關(guān)特定于租戶的元數(shù)據(jù)以及內(nèi)部系統(tǒng)數(shù)據(jù)透視表,構(gòu)建并執(zhí)行作為優(yōu)化數(shù)據(jù)庫(kù)查詢的數(shù)據(jù)訪問(wèn)操作。

    現(xiàn)在你對(duì)構(gòu)成 Force.com 的底層機(jī)制的關(guān)鍵架構(gòu)組件有了大致了解。以下各章將更詳細(xì)地說(shuō)明各種內(nèi)部系統(tǒng)元素的結(jié)構(gòu)和構(gòu)建目的。?

    譯注:定義元素到通用數(shù)據(jù)字典 (UDD),通過(guò)「元數(shù)據(jù)」描述應(yīng)用程序,實(shí)現(xiàn)引擎基于元數(shù)據(jù)動(dòng)態(tài)生成「租戶特定的虛擬應(yīng)用程序」。分別針對(duì)元數(shù)據(jù)訪問(wèn)、大表數(shù)據(jù)訪問(wèn)、數(shù)據(jù)處理、搜索等進(jìn)行了相應(yīng)的優(yōu)化。

    6.數(shù)據(jù)定義和存儲(chǔ)

    Force.com 存儲(chǔ)模型不是試圖管理一個(gè)龐大的、不斷變化的、代表每個(gè)應(yīng)用和租戶的一組實(shí)際的數(shù)據(jù)庫(kù)結(jié)構(gòu)集,而是使用一組元數(shù)據(jù)、數(shù)據(jù)和數(shù)據(jù)透視表來(lái)管理「虛擬」數(shù)據(jù)庫(kù)結(jié)構(gòu),如圖 3 所示。?

    圖3 Force.com 的數(shù)據(jù)定義和存儲(chǔ)模型?

    當(dāng)組織創(chuàng)建自定義應(yīng)用程序?qū)ο髸r(shí),通用數(shù)據(jù)字典 (UDD) 會(huì)跟蹤有關(guān)的對(duì)象、其字段、關(guān)系和其他對(duì)象定義特征的元數(shù)據(jù)。

    同時(shí),一些大型數(shù)據(jù)庫(kù)表存儲(chǔ)所有虛擬表的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),還有一組相關(guān)的專用數(shù)據(jù)庫(kù)透視表維護(hù)非規(guī)范化數(shù)據(jù),使數(shù)據(jù)集極其有用。

    譯注:在「邏輯上」實(shí)現(xiàn)隔離

    6.1 對(duì)象元數(shù)據(jù)表

    對(duì)象元數(shù)據(jù)表,存儲(chǔ)組織為應(yīng)用程序定義的自定義對(duì)象 (又名,表或者實(shí)體)的信息,包括對(duì)象的唯一標(biāo)識(shí)符 (ObjID),擁有該對(duì)象的組織 (OrgID) 以及為其指定的對(duì)象名稱 (ObjName)。

    6.2 字段元數(shù)據(jù)表?

    字段元數(shù)據(jù)表,存儲(chǔ)組織為自定義對(duì)象定義的自定義字段 (又名,列或者屬性),包括字段的唯一標(biāo)識(shí)符 (FieldID),擁有該對(duì)象的組織 (OrgID),包含該字段的對(duì)象 (ObjID),該字段的名稱 (FieldName),該字段的數(shù)據(jù)類型,標(biāo)識(shí)該字段是否需要索引 (IsIndexed) 的布爾值以及該字段在對(duì)象中相對(duì)于其他字段的位置 (FieldNum)。

    6.3 數(shù)據(jù)表

    數(shù)據(jù)表存儲(chǔ)應(yīng)用程序可訪問(wèn)的數(shù)據(jù),該數(shù)據(jù)映射到所有自定義對(duì)象及其字段,這由對(duì)象和字段中的元數(shù)據(jù)定義。每行包括標(biāo)識(shí)字段,例如全局唯一標(biāo)識(shí)符 (GUID),擁有該行的組織 (OrgID) 以及包含對(duì)象標(biāo)識(shí)符 (ObjID)。數(shù)據(jù)表的每行還具有一個(gè)名稱字段,該字段存儲(chǔ)相應(yīng)對(duì)象的「自然名」;例如,一個(gè) Account 對(duì)象可能會(huì)使用「Account Name」,一個(gè) Case 對(duì)象,可能會(huì)用「Case Name」,等等。Value0,…,Value500 等這些列存儲(chǔ)應(yīng)用數(shù)據(jù),分別映射到對(duì)象表和字段表中聲明的對(duì)象和字段。所有「flex」列都可以使用可變長(zhǎng)度的字符串?dāng)?shù)據(jù)類型,因此它們可以存儲(chǔ)任何結(jié)構(gòu)化類型的應(yīng)用程序數(shù)據(jù) (字符串、數(shù)字、日期等)。

    自定義字段可以使用多種標(biāo)準(zhǔn)結(jié)構(gòu)化數(shù)據(jù)類型中的任何一種,例如文本、數(shù)字、日期和時(shí)間,以及特殊用途的結(jié)構(gòu)化數(shù)據(jù)類型,如選擇列表 (枚舉字段)、自動(dòng)編號(hào)、公式、主從關(guān)系 (外鍵)、復(fù)選框 (布爾值)、電子郵件、URL等。自定義字段也可能是必需的,并且有自定義驗(yàn)證規(guī)則 (例如,一個(gè)字段必需大于另一個(gè)字段),這兩個(gè)規(guī)則均由平臺(tái)的應(yīng)用服務(wù)器強(qiáng)制執(zhí)行。

    當(dāng)一個(gè)組織聲明或者修改一個(gè)自定義應(yīng)用對(duì)象,Force.com 將在對(duì)象表中管理定義該對(duì)象的元數(shù)據(jù)行。同樣,對(duì)于每個(gè)自定義字段,Force.com 管理字段表中的一行,包括將字段映射到數(shù)據(jù)表中特定彈性列的元數(shù)據(jù),以存儲(chǔ)相應(yīng)的字段數(shù)據(jù)。因?yàn)?Force.com?將對(duì)象和字段定義作為元數(shù)據(jù)而不是實(shí)際的數(shù)據(jù)庫(kù)結(jié)構(gòu)來(lái)管理,所以該平臺(tái)可以容忍多租戶應(yīng)用程序架構(gòu)的維護(hù)活動(dòng),而不會(huì)阻止其他租戶和用戶的并發(fā)活動(dòng)。

    同一對(duì)象的兩個(gè)字段都不能映射到數(shù)據(jù)表中的同一 flex 列 (slot) 進(jìn)行存儲(chǔ);但是,只要每個(gè)字段都來(lái)自不同的對(duì)象,則單個(gè) flex 列就可以管理多個(gè)字段的信息。?

    圖4 單個(gè) flex 列

    如圖 4 中的數(shù)據(jù)表的簡(jiǎn)化表示所示,flex 列具有通用數(shù)據(jù)類型(可變長(zhǎng)度字符串),這允許 Force.com 在多個(gè)字段間共享一個(gè) flex 列,使用各種結(jié)構(gòu)化數(shù)據(jù)類型 (字符串,數(shù)字、日期等)。

    Force.com 使用規(guī)范格式存儲(chǔ)所有 flex 列數(shù)據(jù),當(dāng)應(yīng)用程序向 flex 列讀寫數(shù)據(jù),必要時(shí)可以使用基礎(chǔ)數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)類型轉(zhuǎn)換功能 (例如TO_NUMBER,TO_DATE,TO_CHAR)。?

    6.4 CLOBs 表

    Force.com 支持將字段聲明為字符大對(duì)象 (CLOB),以允許存儲(chǔ)最多 32,000 個(gè)字符的長(zhǎng)文本字段。?對(duì)于數(shù)據(jù)表中具有字符大對(duì)象 (CLOB) 的每一行,Force.com?將 CLOB 離線存儲(chǔ)在稱為 CLOBs 的數(shù)據(jù)透視表中,系統(tǒng)可以根據(jù)需要將其與數(shù)據(jù)表中的相應(yīng)行合并。

    6.5 索引數(shù)據(jù)透視表

    傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)依靠索引來(lái)快速定位數(shù)據(jù)庫(kù)表中具有匹配特定條件的字段的特定行。?但是,為數(shù)據(jù)表的 flex 列創(chuàng)建本機(jī)數(shù)據(jù)庫(kù)索引是不切實(shí)際的,因?yàn)?Force.com?可能使用單個(gè) flex 列來(lái)存儲(chǔ)具有不同結(jié)構(gòu)化數(shù)據(jù)類型的許多字段的數(shù)據(jù)。?相反,Force.com?通過(guò)將標(biāo)記為建立索引的字段數(shù)據(jù)同步復(fù)制到數(shù)據(jù)透視表中稱為索引的適當(dāng)列中,從而管理數(shù)據(jù)表的索引。

    索引表包含強(qiáng)類型化的索引列,例如 StringValue,NumValue 和 DateValue,Force.com 用來(lái)查找對(duì)應(yīng)數(shù)據(jù)類型的字段數(shù)據(jù)。?例如,Force.com?會(huì)將數(shù)據(jù)表 flex 列中的字符串值復(fù)制到索引中的 StringValue 字段,將日期值復(fù)制到 DateValue 字段中,等等。索引表的基礎(chǔ)索引是標(biāo)準(zhǔn)的非唯一數(shù)據(jù)庫(kù)索引。?當(dāng)內(nèi)部系統(tǒng)查詢包含引用自定義對(duì)象中結(jié)構(gòu)化字段的搜索參數(shù)時(shí),平臺(tái)的查詢優(yōu)化器將使用索引表來(lái)幫助優(yōu)化關(guān)聯(lián)的數(shù)據(jù)訪問(wèn)操作。

    注意:Force.com 可以處理多種語(yǔ)言的搜索,因?yàn)樵撈脚_(tái)的應(yīng)用程序服務(wù)器使用大小寫折疊算法,該算法將字符串值轉(zhuǎn)換為不區(qū)分大小寫的通用格式。?索引表的 StringValue 列以這種格式存儲(chǔ)字符串值。?在運(yùn)行時(shí),查詢優(yōu)化器將自動(dòng)構(gòu)建數(shù)據(jù)訪問(wèn)操作,以便優(yōu)化的 SQL 語(yǔ)句根據(jù)與搜索請(qǐng)求中提供的文字相對(duì)應(yīng)的大小寫折疊的 StringValue 進(jìn)行過(guò)濾。?

    6.6 UniqueFields 數(shù)據(jù)透視表

    Force.com 使組織可以聲明對(duì)象中的字段何時(shí)必須包含唯一值(區(qū)分大小寫或不區(qū)分大小寫)??紤]到數(shù)據(jù)表的排列和「值」列對(duì)于自定義字段數(shù)據(jù)的共享用法,為該表創(chuàng)建唯一的數(shù)據(jù)庫(kù)索引是不切實(shí)際的。

    為了支持自定義字段的唯一性,Force.com 使用了名為 UniqueFields 的數(shù)據(jù)透視表。該表與「索引數(shù)據(jù)透視表」非常相似,不同之處在于 UniqueFields 表的基礎(chǔ)數(shù)據(jù)庫(kù)索引具有唯一性。?當(dāng)應(yīng)用程序嘗試在要求唯一性的字段中插入重復(fù)值,或者管理員嘗試對(duì)包含重復(fù)值的現(xiàn)有字段強(qiáng)制執(zhí)行唯一性時(shí),Force.com?會(huì)將適當(dāng)?shù)腻e(cuò)誤消息傳遞到應(yīng)用程序。

    6.7 關(guān)系數(shù)據(jù)透視表

    Force.com 提供了「關(guān)系」數(shù)據(jù)類型,組織可以使用該數(shù)據(jù)類型來(lái)聲明應(yīng)用程序?qū)ο笾g的關(guān)系 (參照完整性)。當(dāng)組織使用關(guān)系類型聲明對(duì)象的字段時(shí),平臺(tái)會(huì)將該字段映射到數(shù)據(jù)表中的值字段,然后使用該字段存儲(chǔ)相關(guān)對(duì)象的 ObjID。

    為了優(yōu)化 join 操作,Force.com 維護(hù)一個(gè)關(guān)系數(shù)據(jù)透視表。關(guān)系索引表具有兩個(gè)基礎(chǔ)數(shù)據(jù)庫(kù)唯一的復(fù)合索引,這些索引可根據(jù)需要在任一方向上高效地遍歷對(duì)象。

    6.8 附加數(shù)據(jù)透視表

    以下數(shù)據(jù)透視表還為 Force.com 提供了重要功能:

    • FallbackIndex 表:記錄所有對(duì)象的名稱,允許應(yīng)用程序服務(wù)器在 Name 字段上執(zhí)行 fall-back 搜索,并在平臺(tái)的外部搜索引擎過(guò)載的情況下返回合理的搜索結(jié)果。

    • NameDenorm 表:存儲(chǔ)每個(gè)對(duì)象實(shí)例的 ObjID 和名稱,這使 Force.com 可以執(zhí)行一個(gè)簡(jiǎn)單的查詢,檢索每個(gè)引用的對(duì)象實(shí)例的名稱以顯示為超鏈接的一部分。

    • 歷史記錄跟蹤表:存儲(chǔ)有關(guān)所有字段更改的信息,這使 Force.com 可以提供審核跟蹤中使用的歷史記錄跟蹤。?

    6.9 數(shù)據(jù)與元數(shù)據(jù)的分區(qū)

    所有 Force.com 數(shù)據(jù)、元數(shù)據(jù)以及數(shù)據(jù)透視表結(jié)構(gòu) (包括基礎(chǔ)數(shù)據(jù)庫(kù)索引) 均使用原生數(shù)據(jù)庫(kù)分區(qū)機(jī)制由 OrgID (按租戶) 進(jìn)行物理分區(qū)。?數(shù)據(jù)分區(qū)是數(shù)據(jù)庫(kù)系統(tǒng)提供的一種行之有效的技術(shù),可以將大型邏輯數(shù)據(jù)結(jié)構(gòu)物理上分成較小的,更易于管理的部分。?分區(qū)還可以幫助提高大型數(shù)據(jù)庫(kù)系統(tǒng) (如多租戶環(huán)境) 的性能、可伸縮性和可用性。?例如,根據(jù)定義,每個(gè)?Force.com?應(yīng)用程序查詢都針對(duì)特定租戶的信息,因此查詢優(yōu)化器只需要考慮訪問(wèn)包含租戶數(shù)據(jù)的數(shù)據(jù)分區(qū),而不是訪問(wèn)整個(gè)表或索引,這種常見的優(yōu)化有時(shí)稱為「partition pruning」。?

    譯注:可以看到主要的設(shè)計(jì)中都會(huì)體現(xiàn)租戶標(biāo)識(shí) (OrgID),在數(shù)據(jù)和元數(shù)據(jù)的存儲(chǔ)上也可以基于「物理隔離」。

    7.應(yīng)用開發(fā)、邏輯和處理

    Force.com 支持兩種不同的方式來(lái)創(chuàng)建自定義應(yīng)用程序及其各個(gè)組件:通過(guò)使用本機(jī)平臺(tái)應(yīng)用程序框架進(jìn)行聲明式聲明,以及通過(guò)使用應(yīng)用程序編程接口 (API) 以編程方式進(jìn)行聲明。?

    以下各節(jié)詳細(xì)介紹了每種方法和相關(guān)的應(yīng)用程序開發(fā)主題。

    7.1 應(yīng)用框架

    開發(fā)人員可以使用 Force.com 應(yīng)用程序框架以聲明方式構(gòu)建自定義 Force.com 應(yīng)用程序。?該平臺(tái)的原生界面支持應(yīng)用程序開發(fā)過(guò)程的所有方面,包括創(chuàng)建應(yīng)用程序的數(shù)據(jù)模型 (自定義對(duì)象及其字段、關(guān)系等)、安全性和共享模型 (用戶、組織層次結(jié)構(gòu)、配置文件等) 、用戶界面 (屏幕布局、數(shù)據(jù)輸入表單、報(bào)表等) 以及邏輯和工作流程。

    由于不涉及任何編碼,因此?Force.com?應(yīng)用程序框架的用戶界面易于構(gòu)建。?在后臺(tái),它們支持所有常見的數(shù)據(jù)訪問(wèn)操作,包括查詢、插入、更新和刪除。

    Force.com 的原生集成開發(fā)環(huán)境 (IDE) 可以輕松訪問(wèn)許多內(nèi)置的平臺(tái)功能,從而可以輕松實(shí)現(xiàn)常見的應(yīng)用程序功能,而無(wú)需編寫復(fù)雜且易于出錯(cuò)的代碼。這些功能包括:

    • 聲明式工作流:由對(duì)象實(shí)例 (行) 的插入或更新觸發(fā)的預(yù)定義操作。工作流程可以觸發(fā)任務(wù)、發(fā)送電子郵件告警、更新數(shù)據(jù)字段或發(fā)送消息。

    • 加密/屏蔽的字段:開發(fā)人員配置為加密相應(yīng)數(shù)據(jù)并使用輸入掩碼隱藏屏幕信息的文本字段。

    • 驗(yàn)證規(guī)則:無(wú)需任何編程即可強(qiáng)制執(zhí)行域完整性規(guī)則的規(guī)則。

    • 公式字段:Force.com 應(yīng)用程序框架的聲明式功能,可輕松將計(jì)算出的字段添加到對(duì)象。

    • 匯總摘要字段:跨對(duì)象字段,可輕松在父對(duì)象中匯總子字段信息。?

    7.2 元數(shù)據(jù)和 Web Service APIs

    Force.com 還提供用于構(gòu)建應(yīng)用程序的編程API。?這些 API 與基于 SOAP 的開發(fā)環(huán)境兼容,包括 Visual Studio .NET (C#) 和 Apache Axis (Java and C++)。

    Force.com 元數(shù)據(jù) API 可用于管理應(yīng)用程序組件 - 創(chuàng)建和修改與自定義對(duì)象定義、頁(yè)面布局、工作流等相對(duì)應(yīng)的元數(shù)據(jù)。應(yīng)用程序可以使用?Force.com Web服務(wù) API 創(chuàng)建、檢索、更新或刪除對(duì)象實(shí)例 (數(shù)據(jù)行)。

    要訪問(wèn) Force.com Web服務(wù),開發(fā)人員首先下載 Web 服務(wù)描述語(yǔ)言 (WSDL) 文件。?然后,在開發(fā)平臺(tái)使用 WSDL 文件生成API,以訪問(wèn)組織的相應(yīng)?Force.com Web服務(wù) (數(shù)據(jù)模型)。

    有兩種類型的 Force.com WSDL 文件。企業(yè) WSDL 文件適用于構(gòu)建特定于組織的應(yīng)用程序的開發(fā)人員。企業(yè) WSDL 文件是組織數(shù)據(jù)模型的強(qiáng)類型表示。它為開發(fā)環(huán)境提供有關(guān)組織的架構(gòu)、數(shù)據(jù)類型和字段的信息,從而可以使其與?Force.com Web服務(wù)進(jìn)行更緊密的集成。如果將自定義字段或自定義對(duì)象添加、重命名或從組織的應(yīng)用程序架構(gòu)中刪除,則企業(yè) WSDL 會(huì)發(fā)生變化。?相反,合作伙伴 WSDL 文件適用于為多個(gè)組織開發(fā)客戶端應(yīng)用程序的?Salesforce.com?合作伙伴。?作為?force.com?對(duì)象模型的松散表示形式,合作伙伴 WSDL 提供了一個(gè)API,可用于訪問(wèn)任何組織內(nèi)的數(shù)據(jù)。?

    7.3 通過(guò) API 調(diào)用進(jìn)行批量處理

    事務(wù)密集型應(yīng)用程序在合并和執(zhí)行批量重復(fù)操作時(shí)產(chǎn)生的開銷較小,并且性能更高。?例如,對(duì)比應(yīng)用程序可以加載對(duì)象的許多新實(shí)例的兩種方式。?一種低效的方法是使用帶有循環(huán)的例程,該例程插入單個(gè)對(duì)象實(shí)例,并為每個(gè)插入操作進(jìn)行一個(gè) API 調(diào)用。一種更有效的方法是創(chuàng)建對(duì)象實(shí)例的數(shù)組,并使例程通過(guò)單個(gè) API 調(diào)用將所有實(shí)例插入。

    Force.com Web服務(wù) API ,例如create(),update() 和delete() 等支持批量操作。?為了獲得最高效率,該平臺(tái)隱式批量處理與顯式批量操作相關(guān)的所有內(nèi)部步驟,如圖5所示。?

    圖5 Force.com?批量處理引擎

    圖5 還顯示了 Force.com 的批量處理引擎如何解決整個(gè)過(guò)程中任何步驟遇到的孤立故障。?當(dāng)批量操作以部分保存模式開始時(shí),引擎會(huì)識(shí)別一個(gè)已知的啟動(dòng)狀態(tài),然后嘗試執(zhí)行過(guò)程中的每個(gè)步驟 (批量驗(yàn)證字段數(shù)據(jù),bulk fire pre-triggers,批量保存記錄等)。?如果引擎在任何步驟中都檢測(cè)到錯(cuò)誤,則引擎會(huì)回退有害的操作和所有副作用,刪除造成錯(cuò)誤的行,然后繼續(xù)嘗試批量處理其余的行子集。?此過(guò)程反復(fù)遍歷過(guò)程的每個(gè)階段,直到引擎可以提交行的子集而沒有任何錯(cuò)誤。?應(yīng)用程序可以檢查返回對(duì)象,以識(shí)別哪些行失敗以及它們引發(fā)了哪些異常。

    注意:根據(jù)應(yīng)用程序的判斷,批量操作也可以使用全有或全無(wú)模式 (all-or-nothing mode)。?同樣,在批量操作期間執(zhí)行觸發(fā)器要受內(nèi)部工作量的限制。?

    7.4 刪除、取消刪除和回收站

    當(dāng)有人從自定義對(duì)象中刪除單個(gè)對(duì)象實(shí)例 (記錄) 時(shí),Force.com 只需通過(guò)修改對(duì)象實(shí)例的 IsDeleted 字段 (在數(shù)據(jù)表中) 將其標(biāo)記為刪除即可。?這樣可以有效地將對(duì)象放置在平臺(tái)的回收站中。?Force.com?允許用戶從回收站中查看和還原選定的對(duì)象實(shí)例長(zhǎng)達(dá)30天,然后才能將其從內(nèi)部數(shù)據(jù)表中永久刪除。?平臺(tái)會(huì)根據(jù)組織的用戶許可證總數(shù)來(lái)限制其為組織保留的記錄總數(shù)。

    當(dāng)某人刪除涉及主從關(guān)系的父記錄時(shí),Force.com 會(huì)自動(dòng)刪除所有相關(guān)的子記錄,前提是這樣做不會(huì)破壞任何完整性規(guī)則。?例如,當(dāng)用戶刪除 SalesOrder 時(shí),Force.com?會(huì)自動(dòng)將刪除級(jí)聯(lián)到相關(guān)的 LineItems。?如果隨后有人從回收站還原了父記錄,則平臺(tái)也會(huì)自動(dòng)還原所有子對(duì)象實(shí)例。

    相反,當(dāng)有人刪除涉及查找關(guān)系的引用父記錄時(shí),Force.com 會(huì)自動(dòng)將所有從屬鍵設(shè)置為 null。?如果隨后有人還原了父記錄,Force.com?將自動(dòng)還原以前為空的查找關(guān)系,但在刪除和還原操作之間重新分配的關(guān)系除外。

    回收站還存儲(chǔ)丟棄的字段及其數(shù)據(jù),直到組織永久刪除它們或45天過(guò)去之后 (以先到者為準(zhǔn))。?在此之前,整個(gè)字段及其所有數(shù)據(jù)都可用于恢復(fù)。?

    7.5 數(shù)據(jù)定義處理

    某些類型的對(duì)象定義修改,不僅僅需要簡(jiǎn)單地更新通用數(shù)據(jù)字典 (UDD) 元數(shù)據(jù)。在這種情況下,Force.com?使用有效的機(jī)制來(lái)幫助減少對(duì)平臺(tái)多租戶應(yīng)用程序的總體性能影響。

    例如,考慮當(dāng)有人將一列的數(shù)據(jù)類型從「選擇列表」修改為「文本」時(shí),后臺(tái)發(fā)生的事情。Force.com?首先為該列的數(shù)據(jù)分配一個(gè)新的 slot,批量復(fù)制與當(dāng)前值關(guān)聯(lián)的選擇列表標(biāo)簽,然后更新該列的元數(shù)據(jù),使其指向新的 slot。?盡管發(fā)生了所有這些情況,但是對(duì)數(shù)據(jù)的訪問(wèn)是正常的,應(yīng)用程序繼續(xù)運(yùn)行不會(huì)產(chǎn)生任何明顯的影響。

    譯注:通過(guò)冗余來(lái)實(shí)現(xiàn)平滑變更。

    另一個(gè)示例,考慮當(dāng)某人向表中添加「匯總摘要字段」時(shí)會(huì)發(fā)生什么。?在這種情況下,Force.com?使用高效的批量操作在后臺(tái)異步計(jì)算初始摘要。?在進(jìn)行后臺(tái)計(jì)算時(shí),查看新字段的用戶會(huì)收到一個(gè)提示,說(shuō)明?Force.com?正在計(jì)算該字段的值。?

    7.6 APEX

    Apex 是一種強(qiáng)類型的,面向?qū)ο蟮倪^(guò)程編程語(yǔ)言,開發(fā)人員可以使用它來(lái)聲明程序變量和常量并執(zhí)行傳統(tǒng)的流控制語(yǔ)句 (if-else,循環(huán)等),數(shù)據(jù)操作操作 (插入、更新、向上插入、刪除),以及代表 Force.com 應(yīng)用程序的事務(wù)控制操作 (setSavepoint,回滾)。開發(fā)人員可以構(gòu)建 Apex 例程,以將自定義業(yè)務(wù)邏輯添加到大多數(shù)應(yīng)用程序事件中,包括按鈕單擊、數(shù)據(jù)更新、Web 服務(wù)請(qǐng)求、自定義批處理服務(wù)等。

    Apex 與 Java 類似,是一個(gè)不可或缺的 Force.com 組件,可幫助平臺(tái)交付可靠的多租戶應(yīng)用程序。?例如,Force.com 自動(dòng)驗(yàn)證 Apex 類中的所有嵌入式 Sforce 對(duì)象查詢語(yǔ)言 (SOQL) 和Sforce對(duì)象搜索語(yǔ)言 (SOSL) 語(yǔ)句,以防止代碼在運(yùn)行時(shí)失敗。?然后,平臺(tái)會(huì)為有效的 Apex 類維護(hù)相應(yīng)的對(duì)象依賴項(xiàng)信息,并使用此信息來(lái)防止對(duì)元數(shù)據(jù)進(jìn)行更改,否則這些更改會(huì)破壞被依賴的應(yīng)用程序。

    為了防止共享的多租戶平臺(tái)資源被惡意或無(wú)意壟斷,Force.com 具有與 Apex 代碼執(zhí)行相關(guān)的大量調(diào)控器和資源限制。例如,Force.com 密切監(jiān)視 Apex 腳本的執(zhí)行情況,并限制它可以使用多少 CPU 時(shí)間,它可以消耗多少內(nèi)存,它可以執(zhí)行多少查詢和 DML 語(yǔ)句等等。平臺(tái)優(yōu)化器認(rèn)為過(guò)于昂貴而無(wú)法執(zhí)行的單個(gè)查詢會(huì)向調(diào)用者拋出運(yùn)行時(shí)異常。盡管這樣的限制聽起來(lái)有些限制性,但對(duì)于保護(hù)所有相關(guān)應(yīng)用程序的共享平臺(tái)的總體可伸縮性和性能而言,它們是必需的。從長(zhǎng)遠(yuǎn)來(lái)看,這些措施有助于在平臺(tái)開發(fā)人員中推廣更好的編碼技術(shù),并為每個(gè)人創(chuàng)造更好的體驗(yàn)。例如,最初嘗試編寫一個(gè)循環(huán)以低效率地一次更新一千行的循環(huán)的開發(fā)人員將由于資源限制而收到運(yùn)行時(shí)異常,然后開始使用 Force.com 的高效批量處理 API 調(diào)用。

    為了進(jìn)一步避免編寫不當(dāng)?shù)膽?yīng)用程序引起的潛在平臺(tái)問(wèn)題,新生產(chǎn)應(yīng)用程序的部署是嚴(yán)格管理的過(guò)程。?在組織可以將新的自定義應(yīng)用程序從開發(fā)狀態(tài)轉(zhuǎn)換為生產(chǎn)狀態(tài)之前,Salesforce.com 需要進(jìn)行單元測(cè)試,以驗(yàn)證該應(yīng)用程序的 Apex 例程的功能。?提交的單元測(cè)試必須覆蓋不少于應(yīng)用程序源代碼的75%。Salesforce.com 在 Force.com 沙盒環(huán)境中執(zhí)行提交的單元測(cè)試,以確定該應(yīng)用程序是否會(huì)對(duì)整個(gè)多租戶群體的性能和可伸縮性產(chǎn)生不利影響。?單個(gè)單元測(cè)試的結(jié)果提供基本信息,例如執(zhí)行的總行數(shù),以及有關(guān)測(cè)試未執(zhí)行的代碼的特定信息。

    一旦 Salesforce.com 對(duì)應(yīng)用程序進(jìn)行了生產(chǎn)驗(yàn)證,則部署過(guò)程將由單個(gè)事務(wù)組成,該事務(wù)將所有應(yīng)用程序的元數(shù)據(jù)復(fù)制到生產(chǎn) Force.com 實(shí)例中并重新運(yùn)行相應(yīng)的單元測(cè)試。?如果該過(guò)程的任何部分失敗,Force.com 只會(huì)回滾事務(wù)并返回異常以幫助解決問(wèn)題。

    生產(chǎn)應(yīng)用程序上線后,Force.com 的內(nèi)置性能分析器會(huì)自動(dòng)分析并向管理員提供相關(guān)的反饋。?性能分析報(bào)告包括有關(guān)慢查詢,數(shù)據(jù)操作和子例程的信息,開發(fā)人員可以查看這些信息并使用它們來(lái)調(diào)整應(yīng)用程序功能。?該平臺(tái)還記錄有關(guān)運(yùn)行時(shí)異常的信息,并將其返回給管理員,以幫助調(diào)試其應(yīng)用程序。?

    譯注:資源管控、故障管理、性能分析反饋一個(gè)都不能少。

    8.內(nèi)部查詢優(yōu)化

    大多數(shù)現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)采用基于成本的查詢優(yōu)化器來(lái)確定最佳查詢執(zhí)行計(jì)劃,該優(yōu)化器考慮了有關(guān)目標(biāo)表和索引數(shù)據(jù)的相關(guān)統(tǒng)計(jì)信息。但是,常規(guī)的基于成本的優(yōu)化器統(tǒng)計(jì)信息是為單租戶應(yīng)用程序設(shè)計(jì)的,無(wú)法解決在多租戶環(huán)境中執(zhí)行查詢的任何給定用戶的數(shù)據(jù)訪問(wèn)特征。?例如,針對(duì)具有大量數(shù)據(jù)的對(duì)象 (表) 的給定查詢最有可能針對(duì)具有高可見性的用戶 (可以查看所有對(duì)象實(shí)例的管理者) 與具有低可見性的用戶 (只能看到與自己相關(guān)的行的銷售人員) 使用不同的執(zhí)行計(jì)劃來(lái)更有效地執(zhí)行。

    為了提供足夠的統(tǒng)計(jì)信息來(lái)確定多租戶平臺(tái)中的最佳查詢執(zhí)行計(jì)劃,Force.com 為每個(gè)虛擬多租戶對(duì)象維護(hù)了一套完整的優(yōu)化器統(tǒng)計(jì)信息 (租戶級(jí)、組級(jí)和用戶級(jí))。?統(tǒng)計(jì)信息反映了特定查詢可能訪問(wèn)的行數(shù),并仔細(xì)考慮了特定于特定租戶的對(duì)象統(tǒng)計(jì)信息 (租戶整體擁有的總行數(shù)等等) 以及更精細(xì)的統(tǒng)計(jì)信息 (特定的特權(quán)組或最終用戶可以訪問(wèn)等)。

    Force.com 還維護(hù)其他類型的統(tǒng)計(jì)信息,用來(lái)證明某些查詢有幫助的。?例如,平臺(tái)維護(hù)所有自定義索引的統(tǒng)計(jì)信息以顯示相應(yīng)字段中非空值和唯一值的總數(shù),以及維護(hù)選擇列表字段的直方圖以顯示每個(gè)列表值的基數(shù)。

    當(dāng)現(xiàn)有統(tǒng)計(jì)數(shù)據(jù)不存在或不被認(rèn)為有用時(shí),Force.com 的優(yōu)化器會(huì)使用幾種不同的策略來(lái)幫助構(gòu)建合理的最佳查詢。?例如,當(dāng)查詢?cè)趯?duì)象的「名稱」字段上進(jìn)行過(guò)濾時(shí),優(yōu)化器可以使用 FallbackIndex 數(shù)據(jù)透視表來(lái)有效地找到請(qǐng)求的對(duì)象實(shí)例。在其他情況下,優(yōu)化器將在運(yùn)行時(shí)動(dòng)態(tài)生成丟棄的統(tǒng)計(jì)信息。

    與優(yōu)化器統(tǒng)計(jì)信息一起使用時(shí),Force.com 的優(yōu)化器還依賴于內(nèi)部安全相關(guān)表 (組、成員、GroupBlowout 和 CustomShare),這些表維護(hù)有關(guān)平臺(tái)用戶安全域的信息,包括指定用戶的組和自定義對(duì)象訪問(wèn)權(quán)限。?

    圖6 Force.com?數(shù)據(jù)查詢過(guò)程?

    圖6中的流程圖說(shuō)明了 Force.com 截取數(shù)據(jù)請(qǐng)求時(shí)發(fā)生的情況,比如在一個(gè)大堆表 (例如數(shù)據(jù)表) 中的數(shù)據(jù)請(qǐng)求。?該請(qǐng)求可能來(lái)自許多來(lái)源,例如來(lái)自應(yīng)用框架的應(yīng)用程序的頁(yè)面請(qǐng)求,Web服務(wù) API 調(diào)用或 Apex 腳本。?首先,平臺(tái)執(zhí)行考慮多租戶感知統(tǒng)計(jì)信息的「預(yù)查詢」。?然后,考慮預(yù)查詢返回的結(jié)果,平臺(tái)將構(gòu)建一個(gè)最佳數(shù)據(jù)庫(kù)查詢以在特定設(shè)置中執(zhí)行。?

    表1 Force.com?根據(jù)預(yù)查詢的結(jié)果為數(shù)據(jù)訪問(wèn)請(qǐng)求構(gòu)建數(shù)據(jù)庫(kù)查詢?

    如表1所示,Force.com 可以通過(guò)四種不同的方式執(zhí)行相同的查詢,具體取決于提交查詢的人和的選擇的查詢過(guò)濾條件。

    9.全文檢索引擎

    基于Web的應(yīng)用程序的用戶期望交互式搜索功能可以掃描應(yīng)用程序的數(shù)據(jù),以及最新排名結(jié)果秒級(jí)反饋。為了為平臺(tái)應(yīng)用程序提供這種強(qiáng)大的功能,Force.com 使用基于外部搜索引擎的架構(gòu)。

    當(dāng)應(yīng)用程序更新文本字段 (CLOB、名稱等) 中的數(shù)據(jù)時(shí),索引服務(wù)器池將異步更新相應(yīng)的索引,搜索引擎將其維護(hù)在核心數(shù)據(jù)庫(kù)之外。為了優(yōu)化索引過(guò)程,Force.com 在事務(wù)提交時(shí)將修改后的文本數(shù)據(jù)塊同步復(fù)制到內(nèi)部「待索引」表中,從而提供了一個(gè)相對(duì)較小的數(shù)據(jù)源,該數(shù)據(jù)源最大程度地減少了索引服務(wù)器必須從中讀取的數(shù)據(jù)量磁盤。搜索引擎自動(dòng)為每個(gè)租戶維護(hù)單獨(dú)的索引。

    根據(jù)索引服務(wù)器的當(dāng)前負(fù)載和利用率,文本索引更新可能會(huì)明顯滯后于實(shí)際事務(wù)。為了避免源自過(guò)時(shí)索引的意外搜索結(jié)果,Force.com 還維護(hù)了平臺(tái)應(yīng)用程序服務(wù)器在實(shí)現(xiàn)全文搜索結(jié)果時(shí)考慮的最近更新對(duì)象的 MRU 緩存。該平臺(tái)在每個(gè)用戶和每個(gè)組織的基礎(chǔ)上維護(hù) MRU 緩存,以有效地支持可能的搜索范圍。

    Force.com 使用幾種不同的方法來(lái)優(yōu)化搜索結(jié)果中記錄的排名。例如,系統(tǒng)考慮執(zhí)行搜索的用戶的安全域,并權(quán)衡當(dāng)前用戶有權(quán)訪問(wèn)的那些對(duì)象。該系統(tǒng)可以將比較活躍的更新對(duì)象排在相對(duì)靜態(tài)的對(duì)象之前。用戶可以選擇根據(jù)需要對(duì)搜索結(jié)果進(jìn)行加權(quán),例如,將重點(diǎn)放在最近修改的對(duì)象上。

    譯注:使用外部搜索引擎,更新數(shù)據(jù)的時(shí)候冗余數(shù)據(jù)用于「索引」,縮小范圍;為每個(gè)租戶維護(hù)單獨(dú)索引,考慮租戶的權(quán)限范圍,實(shí)現(xiàn)隔離和提升性能。

    10.結(jié)論

    平臺(tái)即服務(wù) (PaaS) 和軟件即服務(wù) (SaaS) 是當(dāng)代的軟件應(yīng)用程序開發(fā)和交付模型,越來(lái)越多的組織正在使用這種模型來(lái)縮短產(chǎn)品上市時(shí)間,減少資本支出并提高在具有挑戰(zhàn)性的全球經(jīng)濟(jì)中的整體競(jìng)爭(zhēng)力?;诨ヂ?lián)網(wǎng)的共享計(jì)算平臺(tái)之所以具有吸引力,是因?yàn)樗鼈兪蛊髽I(yè)能夠按需快速訪問(wèn)托管的、被管理的軟件資產(chǎn),并且避免了在本地?cái)?shù)據(jù)中心模式下相關(guān)的購(gòu)買、安裝、配置和持續(xù)維護(hù)相關(guān)的成本和復(fù)雜性。

    按需 SaaS/PaaS 最成功的公司是 salesforce.com。該公司開發(fā)了 Force.com 平臺(tái),該平臺(tái)的元數(shù)據(jù)驅(qū)動(dòng)架構(gòu)使任何人都可以有效地構(gòu)建和交付復(fù)雜的、可定制的、關(guān)鍵任務(wù)的、互聯(lián)網(wǎng)規(guī)模擴(kuò)展的多租戶應(yīng)用程序。使用基于標(biāo)準(zhǔn)的Web、服務(wù) API和原生平臺(tái)開發(fā)工具,Force.com 開發(fā)者能夠輕松構(gòu)建基于 Web 的應(yīng)用程序的所有組件,包括數(shù)據(jù)模型、用戶界面、業(yè)務(wù)邏輯,與其他應(yīng)用程序集成等。

    在過(guò)去的十年中,salesforce.com 工程師針對(duì)多租戶優(yōu)化了 Force.com 平臺(tái)的所有層,其功能使該平臺(tái)能夠提供前所未有的因特網(wǎng)可擴(kuò)展性,每天高達(dá) 1.7 億個(gè)事務(wù)。諸如批量數(shù)據(jù)處理 API、Apex 編程語(yǔ)言、外部全文搜索引擎及其獨(dú)特的查詢優(yōu)化器之類的平臺(tái)功能可幫助多租戶平臺(tái)的應(yīng)用程序變得高效、可擴(kuò)展,而開發(fā)人員幾乎無(wú)需考慮。

    Salesforce.com 用于生產(chǎn)應(yīng)用程序部署的托管方法,可確保所有相關(guān)應(yīng)用程序具有一流的性能、可伸縮性和可靠性。此外,salesforce.com 持續(xù)監(jiān)控和收集來(lái)自 Force.com 應(yīng)用程序的操作信息,以幫助推動(dòng)增量改進(jìn)和新的平臺(tái)功能,這些功能將立即使現(xiàn)有和新應(yīng)用程序受益。?

    ---本文完---

    總結(jié)

    以上是生活随笔為你收集整理的多租户saas 架构_[译/注] Force.com 多租户互联网应用开发平台的设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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