陳應(yīng)權(quán)
摘 要:SOAP(SimpleObjectAccessProtocol,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)主要是從信息服務(wù)角度提升性能和功能水平,通過(guò)分散和數(shù)據(jù)接口交換信息服務(wù)處理,可以保證信息服務(wù)符合資源定位的需求,提高客戶端和服務(wù)端信息服務(wù)能力。保證各項(xiàng)信息交換服務(wù)符合協(xié)議控制的要求。
關(guān)鍵詞:SOAP;信息服務(wù);XML
中圖分類(lèi)號(hào):TP393
SOAP架構(gòu)的底層是傳送協(xié)議,如HTTP和SMTP。采用和傳統(tǒng)客戶機(jī)/服務(wù)器模式的集中式共享不同的架構(gòu)。SOAP模式在網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)都是“對(duì)等”。這些數(shù)量巨大的節(jié)點(diǎn)共同構(gòu)建了一個(gè)網(wǎng)絡(luò)環(huán)境(重疊網(wǎng)、網(wǎng)中網(wǎng)、覆蓋網(wǎng)),每個(gè)節(jié)點(diǎn)都能迅速查詢路由表,訪問(wèn)任何一個(gè)節(jié)點(diǎn),同時(shí)任何一個(gè)節(jié)點(diǎn)都能訪問(wèn)此節(jié)點(diǎn),也就是每個(gè)節(jié)點(diǎn)同時(shí)充當(dāng)服務(wù)器和客戶端的角色。F載資源時(shí),可以從多個(gè)節(jié)點(diǎn)并行下載數(shù)據(jù),不會(huì)有C/S結(jié)構(gòu)的服務(wù)器端的瓶頸.而且節(jié)點(diǎn)越多下載資源的速度反而越快。
1 面向SOAP的信息服務(wù)架構(gòu)設(shè)計(jì)
SOAP技術(shù)的一個(gè)核心問(wèn)題就是資源定位,圍繞著資源定位算法誕生2種主要的SOAP架構(gòu),稱為結(jié)構(gòu)化SOAP和非結(jié)構(gòu)化SOAP架構(gòu)。
1.1 非結(jié)構(gòu)化SOAP
非結(jié)構(gòu)化SOAP是指其中一臺(tái)計(jì)算機(jī)充當(dāng)中心控制,負(fù)責(zé)響應(yīng)所有接入計(jì)算機(jī)的資源定位請(qǐng)求,所有的資源位置信息都在這個(gè)中央服務(wù)器上,這時(shí)的SOAP并不是一個(gè)嚴(yán)格對(duì)等的結(jié)構(gòu)。資源的分享需要通過(guò)中央服務(wù)器“路由”。但這有個(gè)缺陷就是當(dāng)接入的計(jì)算機(jī)越多中心服務(wù)器的壓力就越犬,最大好處就是簡(jiǎn)單,以及資源存儲(chǔ)的位置和網(wǎng)絡(luò)結(jié)構(gòu)無(wú)關(guān),這也是這種模式被稱為“非結(jié)構(gòu)”的原因。這種結(jié)構(gòu)是典型的資源分享方式。
1.2 結(jié)構(gòu)化SOAP
SOAP結(jié)構(gòu)化體系就是所有接入的計(jì)算機(jī)都處于對(duì)等的地位,也稱為純SOAP。相對(duì)于非結(jié)構(gòu)的SOAP來(lái)說(shuō)是沒(méi)有中心控制點(diǎn)。結(jié)構(gòu)化SOAP有著復(fù)雜的資源定位算法,資源的定位和一個(gè)具體的Hash算法密切相關(guān),各種不同的結(jié)構(gòu)化SOAP其區(qū)別主要在于Hash算法不同,最為典型的Hash算法為Chord這類(lèi)算法也叫DHT(DistributedHashTable),該算法廣泛應(yīng)用于分布資源。
2 Web網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)
對(duì)于結(jié)構(gòu)化SOAP只能通過(guò)Hash碼查找資源,不支持模糊查詢,每次查找聯(lián)動(dòng)多個(gè)Node,查詢效率不如非結(jié)構(gòu)SOAP高。網(wǎng)絡(luò)波動(dòng)對(duì)結(jié)構(gòu)SOAP的影響比較大,Node的加入和退出對(duì)覆蓋網(wǎng)路結(jié)構(gòu)有改變,不能保證數(shù)據(jù)的安全。退出的Node有可能帶走部分?jǐn)?shù)據(jù),加入Node可能需要移動(dòng)數(shù)據(jù)。還有這2種SOAP體系不太適合存儲(chǔ)大尺寸數(shù)據(jù)文件,也沒(méi)有統(tǒng)一的存儲(chǔ)空間分配調(diào)度和管理。結(jié)構(gòu)化SOAP沒(méi)有負(fù)載分擔(dān)。
雖然SOAP有其局限性,但相對(duì)于傳統(tǒng)C/S模式,SOAP思想的出現(xiàn)為軟件的開(kāi)發(fā)帶來(lái)新的思路,SOAP最初主要用來(lái)在Internet上構(gòu)建數(shù)據(jù)分享平臺(tái),我們也可以利用其基本的構(gòu)建分享平臺(tái)思想,構(gòu)建新的存儲(chǔ)平臺(tái)。本文就是在某種意義上充分借鑒了非結(jié)構(gòu)化SOAP的思想的基礎(chǔ)上,構(gòu)建的一個(gè)數(shù)據(jù)接口交換文件系統(tǒng)。
不同組的存儲(chǔ)服務(wù)器之間不會(huì)相互通信,同組內(nèi)的存儲(chǔ)服務(wù)器之間會(huì)相互連接進(jìn)行文件同步。存儲(chǔ)服務(wù)器采用binlog文件記錄文件上傳、刪除等更新操作。binlog中只記錄文件名,不記錄文件內(nèi)容。
文件同步只在同組內(nèi)的存儲(chǔ)服務(wù)器之間進(jìn)行,采用push方式,即源頭服務(wù)器同步給目標(biāo)服務(wù)器。只有源頭數(shù)據(jù)才需要同步,備份數(shù)據(jù)并不需要再次同步,否則就構(gòu)成環(huán)路了。有個(gè)例外,就是新增加一臺(tái)存儲(chǔ)服務(wù)器時(shí),由已有的一臺(tái)存儲(chǔ)服務(wù)器將已有的所有數(shù)據(jù)(包括源頭數(shù)據(jù)和備份數(shù)據(jù))同步給該新增服務(wù)器。
存儲(chǔ)服務(wù)器中由專(zhuān)門(mén)的線程根據(jù)binlog進(jìn)行文件同步。為了最大程度地避免相互影響以及出于系統(tǒng)簡(jiǎn)潔性考慮,存儲(chǔ)服務(wù)器對(duì)組內(nèi)除自己以外的每臺(tái)服務(wù)器都會(huì)啟動(dòng)一個(gè)線程來(lái)進(jìn)行文件同步。
3 可擴(kuò)展標(biāo)識(shí)語(yǔ)言select設(shè)計(jì)
select最早于1983年出現(xiàn)在4.2BSD中,它通過(guò)一個(gè)select()系統(tǒng)調(diào)用來(lái)監(jiān)視多個(gè)文件描述符的數(shù)組,當(dāng)select()返回后,該數(shù)組中就緒的文件描述符便會(huì)被內(nèi)核修改標(biāo)志位,使得進(jìn)程可以獲得這些文件描述符從而進(jìn)行后續(xù)的讀寫(xiě)操作。
select目前幾乎在所有的平臺(tái)上支持,其良好跨平臺(tái)支持也是它的一個(gè)優(yōu)點(diǎn),事實(shí)上從現(xiàn)在看來(lái),這也是它所剩不多的優(yōu)點(diǎn)之一。select的一個(gè)缺點(diǎn)在于單個(gè)進(jìn)程能夠監(jiān)視的文件描述符的數(shù)量存在最大限制,在Linux上一般為1024,不過(guò)可以通過(guò)修改宏定義甚至重新編譯內(nèi)核的方式提升這一限制。
另外,select()所維護(hù)的存儲(chǔ)大量文件描述符的數(shù)據(jù)結(jié)構(gòu),隨著文件描述符數(shù)量的增大,其復(fù)制的開(kāi)銷(xiāo)也線性增長(zhǎng)。同時(shí),由于網(wǎng)絡(luò)響應(yīng)時(shí)間的延遲使得大量TCP連接處于非活躍狀態(tài),但調(diào)用select()會(huì)對(duì)所有socket進(jìn)行一次線性掃描,所以這也浪費(fèi)了一定的開(kāi)銷(xiāo)。
3.1 信息服務(wù)文件訪問(wèn)模型設(shè)計(jì)優(yōu)化
一個(gè)系統(tǒng)的設(shè)計(jì)存在著很多的約束條件,系統(tǒng)運(yùn)行的環(huán)境便是其中重要的約束條件之一。本系統(tǒng)主要是為廣大中、小型的電商網(wǎng)站考慮而設(shè)計(jì),因此并不是運(yùn)行在商用的、高性能的服務(wù)器上,而是運(yùn)行于普通機(jī)器所組成的集群上以便于節(jié)省成本以及便于擴(kuò)展。又因?yàn)楸鞠到y(tǒng)被設(shè)計(jì)為主要用作諸如圖片服務(wù)器等場(chǎng)合,因此雖然對(duì)大文件存儲(chǔ)同樣支持的非常好,但更加主要的還是用于存儲(chǔ)數(shù)量巨大的小型文件,并對(duì)此做出了特別的優(yōu)化。本系統(tǒng)主要應(yīng)用的是“一次寫(xiě)入多次取出”的文件訪問(wèn)模型。一個(gè)文件一旦經(jīng)上傳、寫(xiě)入后,就不需要改變了。
另外,眾所周知大多數(shù)網(wǎng)站都需要存儲(chǔ)用戶上傳的文件,如圖片、視頻、電子文檔等。出于降低帶寬和存儲(chǔ)成本的考慮,網(wǎng)站通常都會(huì)限制用戶上傳的文件大小,例如圖片文件不能超過(guò)5兆字節(jié)、視頻文件不能超過(guò)100兆字節(jié)等。本系統(tǒng)不對(duì)文件進(jìn)行分塊存儲(chǔ),與支持文件分塊存儲(chǔ)的其它數(shù)據(jù)接口交換文件系統(tǒng)相比,更加簡(jiǎn)潔高效,并且完全能滿足絕大多數(shù)互聯(lián)網(wǎng)應(yīng)用的實(shí)際需要。
3.2 系統(tǒng)的技術(shù)方案
數(shù)據(jù)接口交換系統(tǒng)設(shè)計(jì)中有一個(gè)重要的目標(biāo),是以這樣的方式構(gòu)建系統(tǒng):它可以從部分失效中自動(dòng)恢復(fù),而且不會(huì)嚴(yán)重的影響整體性能。特別是,當(dāng)故障發(fā)生時(shí),數(shù)據(jù)接口交換系統(tǒng)應(yīng)該在進(jìn)行恢復(fù)的同時(shí)繼續(xù)以可接受的方式進(jìn)行操作,也就是說(shuō),它應(yīng)該能容忍錯(cuò)誤,在發(fā)生錯(cuò)誤時(shí)某種程度上可以繼續(xù)操作。
由于本數(shù)據(jù)接口交換文件系統(tǒng)運(yùn)行在由多臺(tái)普通的機(jī)器所組成的集群上[15],而普通機(jī)器一般相對(duì)商用高性能服務(wù)器來(lái)說(shuō)更容易發(fā)生故障一些,比如操作系統(tǒng)存在的缺陷,人為的非法操作造成的錯(cuò)誤或者磁盤(pán)、內(nèi)存、網(wǎng)絡(luò)、意外斷電造成的問(wèn)題等等。正因?yàn)槿绱?,某些機(jī)器在某些時(shí)間可能是無(wú)法工作的,而一些機(jī)器發(fā)生故障后則可能不能恢復(fù)。因此,系統(tǒng)的設(shè)計(jì)必須滿足可用性、可靠性、安全性以及可維護(hù)性。
4 總結(jié)
客戶端和存儲(chǔ)服務(wù)器主動(dòng)連接跟蹤服務(wù)器。存儲(chǔ)服務(wù)器主動(dòng)向跟蹤服務(wù)器報(bào)告其狀態(tài)信息,包括磁盤(pán)剩余空間、文件同步狀況、文件上傳下載次數(shù)等統(tǒng)計(jì)信息。存儲(chǔ)服務(wù)器會(huì)連接集群中所有的跟蹤服務(wù)器,向他們報(bào)告自己的狀態(tài)。存儲(chǔ)服務(wù)器啟動(dòng)一個(gè)單獨(dú)的線程來(lái)完成對(duì)一臺(tái)跟蹤服務(wù)器的連接和定時(shí)報(bào)告。需要說(shuō)明的是,一個(gè)組包含的存儲(chǔ)服務(wù)器不是通過(guò)配置文件設(shè)定的,而是通過(guò)跟蹤服務(wù)器獲取到的。
參考文獻(xiàn):
[1]孫健.單點(diǎn)登錄技術(shù)在數(shù)字化校園網(wǎng)中的應(yīng)用[J].科技信息,2010(30).
[2]胡立春,武友新,張燁.SOAP環(huán)境下的統(tǒng)一用戶管理系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(04).
[3]杜淑琴.基于輕量目錄訪問(wèn)協(xié)議和SOAP的統(tǒng)一認(rèn)證框架設(shè)計(jì)[J].現(xiàn)代計(jì)算機(jī),2006(02).
[4]薛宏智,王俊,張書(shū)杰.基于SOAP的企業(yè)訪問(wèn)控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與信息技術(shù),2006(Z1).
[5]趙保翠,劉崗.基于SOAP的統(tǒng)一用戶管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2005(11).