Salesforce架構(gòu):日事務(wù)過13億,2.4萬TPS的數(shù)據(jù)庫峰值
近日,salesforce.com的可靠性工程師發(fā)表了Salesforce核心平臺和應(yīng)用的架構(gòu)概覽,其中并未涉及Heroku的Dyno、work.com等其它產(chǎn)品的子系統(tǒng),但是覆蓋了database.com。以下為譯文:
自1999年,salesforce.com就專注于互聯(lián)網(wǎng)技術(shù),致力傳統(tǒng)企業(yè)軟件的置換。首先從salesforce.com的一些術(shù)語開始:
術(shù)語定義
1. 實例——系統(tǒng)、網(wǎng)絡(luò)及存儲設(shè)施的一個完整集合,包括共享和不共享兩種,將Salesforce的服務(wù)打包成子集提供給用戶。比如na14.salesforce.com就是一個實例。
2. Superpod——由系統(tǒng)、網(wǎng)絡(luò)和存儲設(shè)施組成的1個集合,包括外出代理服務(wù)器(outboud proxy server)、負載均衡器、電子郵件服務(wù)器、SAN設(shè)備及支撐多種實例的其它基礎(chǔ)設(shè)施。Superpod提供數(shù)據(jù)中心級別的服務(wù)隔離,因此在共享和復(fù)雜組件上產(chǎn)生的問題不會波及數(shù)據(jù)中心上的所有實例。
3. Org(又名organization)——Salesforce應(yīng)用程序的***用戶。在www.salesforce.com或者developer.force.com上的每次訪問都會產(chǎn)生一個新的org。org可以高度定制,讓標(biāo)準salesforce.com CRM對象(甚至是REST API)可以擁有不同的安全設(shè)置、記錄可見度以及共享設(shè)置,UI界面外觀、工作流、觸發(fā)器、定制對象、定制字段。Org支持任何場景,可以用來支撐1到100萬的獨立授權(quán)用戶、門戶用戶以及Force.com Sites用戶。
4. 沙箱——salesforce.com實例的一種,為客戶應(yīng)用部署托管完整產(chǎn)品org的全拷貝。讓用戶在Salesforce應(yīng)用平臺上可以進行完整的應(yīng)用程序開發(fā)周期。在產(chǎn)品變動部署前,提供針對應(yīng)用程序的測試環(huán)境。
統(tǒng)計數(shù)據(jù)(截止2013年8月)
·18個北美實例、4個EMEA實例及2個APAC實例
·20個沙箱實例
·13億以上的日事務(wù)處理
·峰值情況下每秒2.4萬個數(shù)據(jù)庫事務(wù)
·1.5萬個以上的硬件系統(tǒng)
·原始存儲容量高于22 PB
·5000個以上的SAN port
使用的技術(shù)
·作為開發(fā)和主要產(chǎn)品系統(tǒng)的Linux
·Solaris 10 w/ ZFS
·Jetty
·Solr
·Memcache
·Apache QPID
·QFS
·Puppet, Razor
·Perl, Python
·Nagios
·Perforce, Git, Subversion
·硬件及軟件架構(gòu)
1. 支撐登錄
Salesforce運維了大量的服務(wù)器為實例支撐登錄,其中一部分的服務(wù)器被用來處理登錄請求,并把會話重定義到用戶自己的實例,這也是登錄login.salesforce.com時候所做的事情。
用戶流量開始于Salesforce的外部DNS,一旦實例收到IP地址,會通過標(biāo)準的互聯(lián)網(wǎng)路由將其直接發(fā)送給合適的數(shù)據(jù)中心。
一旦這個流量進入了某個數(shù)據(jù)中心,它將被指向IP地址對應(yīng)的負載均衡器,所有來自互聯(lián)網(wǎng)的IP都會在active/standby服務(wù)器上以VIP的形式配置。
2. 實例內(nèi)部
負載均衡器將流量指向應(yīng)用程序?qū)又付ǖ膶嵗瑯?biāo)準網(wǎng)頁流量及API流量都會放到這個層。API占所有流量的60%,基于用戶的需求,它將被轉(zhuǎn)到附加服務(wù)器層進行不同類型的后端處理。
3. 核心應(yīng)用
核心應(yīng)用層使用了10到40個服務(wù)器,數(shù)量主要取決于實例。每個服務(wù)器都單獨運行一個多達14 GB堆配置的Hotspot JVM,,主要取決于服務(wù)器硬件配置。
批處理服務(wù)器主要負責(zé)數(shù)據(jù)庫層的既定、自動化進程。舉個例子,在單歸檔文件格式下,Weekly Export進程被作為一種備份形式,用以導(dǎo)出用戶數(shù)據(jù)。
Salesforce.com提供了一系列的服務(wù),包括了基礎(chǔ)及高級的內(nèi)容管理。使用一個內(nèi)容搜索服務(wù)器和一個批處理服務(wù)器來管理內(nèi)容應(yīng)用層的異步進程。內(nèi)容批處理服務(wù)器負責(zé)內(nèi)容類型進程的調(diào)度,擁有指定文件類型渲染預(yù)覽及文件類型轉(zhuǎn)換等功能。
4. 數(shù)據(jù)庫
主數(shù)據(jù)流一般發(fā)生在核心應(yīng)用層和數(shù)據(jù)庫層之間,從軟件的觀點來看,所有處理都會通過數(shù)據(jù)庫,所以數(shù)據(jù)庫的性能至關(guān)重要。每個主實例(比如NA、AP或者EU實例)使用了1個8節(jié)點集群數(shù)據(jù)庫層。用戶沙箱,比如CS實例,使用了1個4節(jié)點集群數(shù)據(jù)庫層。
鑒于salesforce.com系統(tǒng)偏向于數(shù)據(jù)庫驅(qū)動,減少數(shù)據(jù)庫上的負載至關(guān)重要。為了減少負載,他們開發(fā)了ACS——API Cursor Server,它可以幫助解決提高數(shù)據(jù)庫性能上的兩個問題。首先,之前他們在數(shù)據(jù)庫中儲存游標(biāo),但是刪除操作會影響性能。其次,在使用數(shù)據(jù)庫表格來處理游標(biāo)之后,DDL開銷會帶來負效應(yīng)。ACS是個運行在2個服務(wù)器上的游標(biāo)緩存系統(tǒng),讓數(shù)據(jù)庫在游標(biāo)處理上得以解放。
5. 搜索
Salesforce的搜索層運行在商用Linux主機上,每個都可以擴展到640 GB PCI-E閃存,一般使用它來緩存搜索結(jié)果。這些主機通過NFS文件系統(tǒng)從共享SAN陣列中讀取數(shù)據(jù),搜索索引被存儲在閃存上將提供更高的性能,從而獲得更大的搜索吞吐量。
搜索索引一般發(fā)生在轉(zhuǎn)換服務(wù)器上,它將通過Fibre Channel SAN從儲存陣列中mount LUN。這些LUN組成了QFS文件系統(tǒng),允許單寫及多讀。類似其它的核心系統(tǒng),使用active/passive模式,passive節(jié)點只用于執(zhí)行一些低優(yōu)先級索引搜索工作。之后會將結(jié)果返回給active節(jié)點,從而寫入QFS文件系統(tǒng)。
當(dāng)這些相同的LUN被一組4個在SPARC上運行Solaris 10的NFS服務(wù)器只讀mount時,會發(fā)生這種轉(zhuǎn)換,這些裝載了SAN的文件系統(tǒng)都通過NFS共享到之前描述的搜索層中。
6. Fileforce
我們同樣運維著對象存儲層,類似于Amazon的S3或者是OpenStack的Swift項目。Fileforce由內(nèi)部開發(fā),用以減少DB層上的負載。引用之前介紹的Fileforce,Binary Large Object(BLOB)被直接存儲到數(shù)據(jù)庫中。一旦使用Fileforce,所有大于32 KB的BLOB都被遷移其中,而小于這個值的BLOB仍然儲存在數(shù)據(jù)庫中。Fileforce中的BLOB在數(shù)據(jù)庫中都有引用,所以如果想從備份中恢復(fù)Fileforce中的數(shù)據(jù),必須在數(shù)據(jù)庫備份的基礎(chǔ)上,重新開啟一個擁有相同恢復(fù)點的數(shù)據(jù)庫。
Fileforce還包含了一個捆綁功能,用以減少Filfeforce服務(wù)器上的磁盤搜索。如果在數(shù)據(jù)庫上存儲了100個以上小于32KB的對象,一個運行在應(yīng)用服務(wù)器上的進程會將這些對象都整合到一個單一的文件。數(shù)據(jù)庫中會保存一個到整合文件的引用,并且記錄了文件在整合文件中的偏移量,這特性類似于Facebook的Haystack文件存儲系統(tǒng)。
7. 支持
每個實例都包含了多種服務(wù)器用以支持不同的任務(wù),比如:應(yīng)用層的應(yīng)用程序調(diào)試服務(wù)器“Hammer testing”、用以監(jiān)視每個實例健康狀態(tài)的hub服務(wù)器、以及運行Nagios的監(jiān)視服務(wù)器。而在實例之外仍然存在一些支持服務(wù)器,比如儲存管理、數(shù)據(jù)庫管理、日志聚合、產(chǎn)品身份驗證及其它功能。



























