云計算時代的分布式WEB服務解決方案講解學習_第1頁
云計算時代的分布式WEB服務解決方案講解學習_第2頁
云計算時代的分布式WEB服務解決方案講解學習_第3頁
免費預覽已結(jié)束,剩余6頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、云計算時代的分布式WEES艮務解決方案SinaAppEngine(簡稱SAE是新浪研發(fā)中心丁2009年上半年開始內(nèi)部開發(fā),并在2009年11月3日正式推出第一個Alpha版本的國內(nèi)首個公有云計算平臺,是新浪云計算(簡稱浪云)戰(zhàn)略的核心組成部分。SAE作為國內(nèi)的公有云計算,借鑒吸納了Google、Amazon等國外公司的公有云計算的成功技術(shù)經(jīng)驗,并很快推出具有自身特色的云計算平臺。SAE選擇PHP作為首選的支持語言,We研發(fā)者可以在Linux/Mac/Windows上通過SD瑚者Web版在線SDK!行開發(fā)、部署、調(diào)試,團隊開發(fā)時還可以進行成員協(xié)作,不同的角色將對代碼、項目擁有不同的權(quán)限。SAE提

2、供了一系列分布式計算、存儲服務供開發(fā)者使用,包括分布式文件存儲、分布式數(shù)據(jù)庫集群、分布式緩存、分布式定時服務等,這些服務將大大降低開發(fā)者的開發(fā)成本。同時乂由丁SAESI體架構(gòu)的高可靠性和新浪的品牌保證,大大降低了開發(fā)者的運營風險。另外,作為典型的云計算,SAE用“所付即所用,所付僅所用”的計費理念,通過日志和統(tǒng)計中心精確的計算每個應用的資源消耗(包括CPU內(nèi)存、磁盤等)??傊?,SAEM是分布式WebK務的開發(fā)、運行平臺VPS岫護Jt嵌(/用戶說諾可用hik力爭唇此Df*秀廊有海,擔供手蠢獺戶快4便胃SI.A田窩保示廠可性摩尸ft的而昔承濡%.無尸琦咨役profit所#僅所用SAE的目標和發(fā)展云

3、計算在國外已經(jīng)有45年的歷史。2006年,AmazorB推出了以EC2為代表的公有云計算,并且實現(xiàn)了大規(guī)模盈利;2008年,Google推出了以GoogleAppEngine為代表的公有云計算。國內(nèi)的云計算一直是炒得很厲害,各大互聯(lián)網(wǎng)公司都在宣傳,但真正有技術(shù)實力做出來而乂對外公開使用的少之乂少。從2004年開始,新浪就開始了私有云方向的研究和實踐,以此為基礎(chǔ)的動態(tài)應用平臺目前已經(jīng)支撐新浪內(nèi)部的絕大部分業(yè)務。從2008年起,新浪乂啟動了“浪云”的公有云計算計劃,相繼開發(fā)了分布式隊列服務、P2P文件系統(tǒng)、分布式計算框架等一系列基礎(chǔ)服務。實際SAEM是“浪云”戰(zhàn)略的產(chǎn)物。SAER架構(gòu)設(shè)計和代碼編寫

4、開始,就明確了自身的兩個目標:第一,做公有云計算平臺,公有云不同于私有云,更強調(diào)安全性和可靠性,這也對整體的架構(gòu)設(shè)計和技術(shù)實現(xiàn)提出了更苛刻的要求;第二,為分布式Wet務提供一整套的解決方案,SA臥取提供開發(fā)者開發(fā)We吟用過程中所用到的所有服務。經(jīng)過技術(shù)團隊一年的開發(fā),SAE目前已經(jīng)提供了十多種服務,整體上分為計算型和存儲型,計算型乂包括同步計算和異步計算,而存儲型則分為持久化存儲和非持久化存儲,如表2所示。表2SAE提供的服務服務名稱說明HTTP+PHP同步計算號SAE沙盒的Apache和Zend為用戶提供Web計算服務Star持久化存儲提供分布式文件存儲Memcache非持久化存儲提供分布式

5、緩存服務RDC持久化存儲分布式數(shù)據(jù)座集羊,提供MySQL服務Taskqueue異步計算異步離線輕量級任務隊列,HTTP方式調(diào)用DeferredJob異步計算異步離線重量級任務隊列,系統(tǒng)方式調(diào)用Cron異步計算分布式定時服務FetchURL同步計篁分布式抓取服務Tmpfs非持久化存儲提供臨時文件存儲Appconfig提供應用配置功能,取代ApachehtaccessMail異步計算郵件發(fā)送服務Image同步計算圖像處理服務XHProf同步計算Foceboov福佚的強入的PHP調(diào)優(yōu)工具其他工具SDKWindowsGUISDK、Linux/MaccommandlineSDKOnlineSDK在線代碼

6、編輯器SA打2009年11月3日發(fā)布了Alphal版本,2010年2月1日發(fā)布了Alpha2版本,2010年9月1日發(fā)布了Beta版本,經(jīng)過將近一年的不斷完善和改進,盡管SAE一直沒有開放注冊(實際云計算的模式也不以注冊用戶的規(guī)模為評價標準),但已經(jīng)擁有了一批有價值的App和粉絲開發(fā)者。截止10月1日,SAE擁有開發(fā)者4000多名,App總數(shù)3000個,活躍App將近1000個,每天獨立代碼部署行為超過1000次。整體架構(gòu)SA或架構(gòu)上采用分層設(shè)計,從上往下分別為反向代理層、路由邏輯層、Web計算服務池。而從Wet#算服務層延伸出SAE附屆的分布式計算型服務和分布式存儲型服務,具體乂分成同步計算

7、型服務、異步計算型服務、持久化存儲服務、非持久化存儲服務。各種服務統(tǒng)一向日志和統(tǒng)計中心匯報如圖1所示。1.0C7層反向代理層:HTTFK向代理,在最外層,負責響應用戶的HTTFW求、分析請求并轉(zhuǎn)發(fā)到后端的Wet務池上,提供負載均衡、健康檢查等功能。服務路由層:邏輯層,負責根據(jù)請求的唯一標識,快速地映射(0(1)時間復雜度)到相應的Wet務池及相應的硬件路徑。如果發(fā)現(xiàn)映射關(guān)系不存在或者錯誤,則給出相應的錯誤提示。該層對用戶隱藏了很多具體地址信息,使開發(fā)者無須關(guān)心服務的內(nèi)部實際分配情況。Wet務池:由一些不同特性的Wet務池組成。每個Web服務池實際是由一組ApacheServer組成的,這些池按

8、照不同的SLA提供不同級別的服務。每個Web務進程實際處理用戶的HTTFW求,進程運行在HTTP服務沙盒內(nèi),同時還同樣內(nèi)嵌運行在SAE沙盒內(nèi)的PH確牟析引擎。用戶的代碼最終通過接口調(diào)用各種服務。日志和統(tǒng)計中心:負責對用戶所使用的所有服務的配額進行統(tǒng)計和資源計費,這里的配額有兩種,一種是分鐘配額,用來保證整個平臺的穩(wěn)定;一種是天配額,用戶可以給自己設(shè)定每天資源消耗的最高上限。日志中心負責將用戶所有服務的日志匯總并備份,并提供檢索查詢服務。各種分布式服務:SAE提供WebE用開發(fā)所需的大多數(shù)服務,同時支持接入第三方服務,用戶可以通過StdLib(可以理解為SAEPHP版的STD很方便地調(diào)用它們。真

9、正的用戶代碼是跑在SAE提供的Web行環(huán)境下的,為了提供公有云計算特有的安全性,SAE設(shè)計多層沙盒來保證用戶應用之間的隔離性,如圖2所示。最內(nèi)層的就是用戶代碼,大部分PHP代碼不需要做任何修改就可以跑在SAE平臺上,小部分代碼需要做一些修改以適應SAE的平臺特性。這主要有兩部分:第一,SAES為安全性禁用了本地I/O,所以fwrite等函數(shù)需要修改為使用Tmpfs讀寫本地臨時文件或者直接通過Stor讀寫我們的分布式文件存儲;第二,用戶在SAE不能通過Curl訪問非“SAEfeT的資源,用戶有抓取公網(wǎng)資源等需求,需要修改為調(diào)用FetchURL服務。我們提供了PHPWrapper以方便用戶的修改。

10、SAEZendSandbox為一個邏輯概念,為用戶的代碼運行提供良好的隔離性。這里有兩個層面,第一是通過標準的php.ini,我們設(shè)定了一些特殊配置和禁用函數(shù);第二,為了達到一些php.ini無法實現(xiàn)的沙盒功能,我們對Zend解釋器SAE核做了一些改進,以便通過用戶標識將資源進行隔離。另外我們還把一些的特定服務也在Zend層做了融合。Apache為標準的ApacheWebserver,版本為2.2。不過我們禁用了htaccess,并提供了自己實現(xiàn)的替換方案AppConfig。用戶可以通過類自然語言的方式編寫AppConfig,如-compress:if(out_header“Content-L

11、ength=500)compress表示按條件啟動頁面壓縮。目前AppConfig提供的功能有:目錄默認頁面、自定義錯誤頁面、壓縮、頁面重定向、頁面過期、設(shè)置響應頭的content-type、設(shè)置頁面訪問權(quán)限。我們選擇自行實現(xiàn)AppConfig還有一個考慮,就是因為傳統(tǒng)Apache的htaccess因為要按目錄遞歸方式合并配置文件,效率不能滿足SAE的需求。HTTPServer沙盒為Apache的安全可靠運行提供了多種保護功能,比如防止某個用戶惡意占用連接數(shù)從而導致整個Web服務不正常。最外層的是標準POSIX環(huán)境,目前我們的服務跑在Linux2.6上。上面就是對SAE整體架構(gòu)的概述,接著將詳

12、細討論我們在架構(gòu)設(shè)計上的一些具體考量點。擴展性擴展性是分布式系統(tǒng)的兩個主要目的之一,SAE作為公有云計算,同樣把服務的擴展性作為架構(gòu)設(shè)計的重要指標,要求在用戶增長、壓力提升的情況下,可以實現(xiàn)自動的服務擴展,同樣當壓力降低時,可以將服務收縮,以節(jié)約資源,整個過程無須人工參與。SAE人工只需做好容量規(guī)劃和管理。目前國外的公有云計算架構(gòu)的擴展性主要有靜態(tài)和動態(tài)兩個思路。靜態(tài)擴展:用戶和資源有強綁定關(guān)系。最典型的例子為Amazon的EC護日Ruby云計算平臺Heroku,用戶申請的資源和用戶有嚴格的一對一關(guān)系,換句話說,A用戶申請的虛擬機在A退還資源前,B用戶不能使用,哪怕A用戶的虛擬機處于閑置狀態(tài)。

13、動態(tài)擴展:用戶和資源沒有強綁定關(guān)系。最典型的例子為GoogleAppEngine,用戶申請的資源和用戶沒有嚴格的一對一關(guān)系,換句話說,處理A用戶請求的進程在處理完之后,可以馬上處理B用戶的請求。兩種擴展性各有利弊,靜態(tài)擴展的長處是為平臺提供了良好的隔離性,資源可以固定映射在某個用戶下,但缺點是資源利用率不高;動態(tài)擴展的長處是資源利用率高,這樣整個云計算平臺的成本會很低,但缺點是對隔離性有更高的要求,因為資源可以在很短的時間被多個用戶使用。相比較,在安全性上,動態(tài)擴展要比靜態(tài)擴展的技術(shù)門檻更高。在SAE平臺上,我們采用以動態(tài)擴展為主、靜態(tài)擴展為輔的兼而有之的設(shè)計。在Wet#算池層是典型的動態(tài)擴展

14、。而在SAE的某些服務中,乂是以靜態(tài)擴展的方式展現(xiàn),如RDC(RelationalDBCluster)分布式數(shù)據(jù)庫集群,當用戶申請了MySQL務,我們就會在RD弟端根據(jù)SLA創(chuàng)建一主多從的DB給用戶,在用戶顯式刪除該DB前,該DB都不會被別人使用。當然,通過RDC任何一個用戶也無需知道后端DB的實際地址,只需訪問RDC一的Host和Port即可。高可靠性(HighAvailability,簡稱HAHA是分布式系統(tǒng)的另一個主要目的,SAE同樣以提供服務的高可靠性為架構(gòu)設(shè)計的重要指標。HA的實現(xiàn)途徑主要有兩個:一個是硬件保證,另一個是架構(gòu)的冗余設(shè)計。在SAE平臺上,所有服務器都是新浪標準采購的硬件

15、設(shè)備,運行在國內(nèi)最好的機房內(nèi),網(wǎng)絡(luò)資源方面則享用門戶網(wǎng)站所使用的帶寬環(huán)境。另外,所有的硬件設(shè)備都有專門的運維部門負責,故障的響應速度和新浪內(nèi)部服務一樣。在架構(gòu)設(shè)計上,SAE通過對所有服務都進行冗余設(shè)計來提供服務的高可靠性。這里的服務可以分成計算型和數(shù)據(jù)型兩種類別討論。針對計算型服務,冗余設(shè)計就是程序在多節(jié)點運行。我們要求SAE0f有的內(nèi)部代碼程序要做到Stateless(無狀態(tài)依賴),即無依賴部署無依賴啟動,隨時終止進程隨時重啟進程,這樣一旦出現(xiàn)機器故障或者程序自身Bug時,所有進程能夠隨著硬件環(huán)境的重新恢復而在第一時間重啟。而多點執(zhí)行的程序可以保證,當某些程序出現(xiàn)故障時,整個系統(tǒng)仍然能夠正常

16、提供服務。計算型程序多點部署,會帶來一致性問題,最主要的困擾就是選舉問題,如何在多個節(jié)點中選出一個主節(jié)點來執(zhí)行。比如SAE上的分布式定時服務Cron,采用多點部署方式,多個計算節(jié)點相互隔離,通過時鐘同步服務同時觸發(fā)用戶設(shè)定的定時任務,但要求只能有一個節(jié)點負責執(zhí)行。為了解決這個問題,SAE設(shè)計出了一套分布式鎖算法來提供選舉服務。該算法可以在犧牲某些特定條件下的一致性來提供比Paxos算法更高的可靠性(3臺機器在最高任意2臺機器發(fā)生故障目前,該算法的情況下整個選舉過程仍然正常,而Paxos算法最多容忍1臺)正在申請專利,并廣泛應用在SAE內(nèi)部。針對數(shù)據(jù)型服務,SAE主要是通過復制來保證服務的高可靠性。SAE上的數(shù)據(jù)存儲服務普遍采用被動復制和主動復制兩種方式。如SAEMySQl|、0的主從Binlog同步就是典型的被動復制,用戶只寫寫庫,數(shù)據(jù)從寫庫同步到多個讀庫中。Taskqueue、DeferredJob等服務也采用被動復制的方式,用戶的任務描述會寫到主內(nèi)存級隊列中,主隊列利用后臺線程將寫操作同步到從隊

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論