慘淡人生,平淡生活

          The Feature Is Stupid

          實現(xiàn)web服務的三個誤區(qū) 讀后感

          我的消息吃了我的服務器!Kyle指出,通常,Web服務開發(fā)者開始經(jīng)歷“內(nèi)存溢出”的錯誤或者奇怪的“性能問題”時,總是會發(fā)現(xiàn)服 務器擁有極高的處理負載,CPU使用率接近100%,以及較低的吞吐量和高網(wǎng)絡延遲。導致這些癥狀的典型原因是非常大的(有時會達到50 MB或者更大)消息。而且,這些大消息往往包含了非常大的、作為XML消息主體的、采用base-64編碼的二進制編碼信息。導致其發(fā)生的原因通常是:

          ……開發(fā)者不理解技術(shù)的局限性:XML處理對解決許多問題都有用,但是你必須認識到消息是要被解析的——并且在大多數(shù)……產(chǎn)品中,這就意味著許多或者所有的消息都會駐留在內(nèi)存中。

          Kyle建議采用如下方法來改善這種情況:

          • 不要發(fā)送冗余信息。在許多情況下,發(fā)送二進制數(shù)據(jù)時,你可能會發(fā)現(xiàn)消息高度重復。如果是這樣,你可能就要考慮在HTTP層面使用壓縮技術(shù)來改善你的網(wǎng)絡延遲。雖然這不會幫助你處理負載,但可能有助于減輕其中一個問題。
          • 在XML消息體中,根本不要嵌入二進制信息。這是較好的解決方法,還有幾種不同的途徑可以實現(xiàn)這一效果。比如,你可以使用帶有附件的SOAP或者消息傳輸優(yōu)化機制(MTOM)繞過解析開銷,盡管這無助于網(wǎng)絡延遲問題。
          • ……還有一個更好的辦法,使用SOAP根本不發(fā)送大的二進制blob。替代方法,通過受控的文件傳輸系統(tǒng),使用一個“帶外數(shù)據(jù)”傳輸……或者“聲明標簽(claim Check,參見《EIP模式》或這里)”模式,避免在SOAP和HTTP上發(fā)送大的二進制文件。




          任何一種技術(shù)都有它使用的環(huán)境,在做架構(gòu)設計的時候一定要避免因為個人的偏好,無意識的舍棄某些選擇。 一種簡單的方法論是,根據(jù)需要達到的目的,列出所有可能的實現(xiàn)方案,最后做出決定。


          不好意思,你的數(shù)據(jù)正在顯示。根據(jù)Kyle所說,另一個典型的Web服務的“性能問題” 是,使用Web服務的層面非常、非常低——通常Web服務跟一個SQL語句相關(guān),這是因為:

          誤解了SOA架構(gòu)原則。一個優(yōu)秀SOA架構(gòu)的關(guān)鍵原則是你的服務應該具有高復用性。

          根據(jù)Kyle所說,這些情況通常發(fā)生在:

          ……如果設計是根據(jù)現(xiàn)有代碼“自上而下”衍生出服務,這類服務就會出現(xiàn);通常,開發(fā)者會看著他們現(xiàn)有的架構(gòu)圖并且決定將架構(gòu)中的每一層(包括表現(xiàn)層)轉(zhuǎn)變成服務集。

          相反,在SOA架構(gòu)的正確位置使用粗粒度的Web服務會更好。再次強調(diào),檢查一個架構(gòu)的標準分層模型,通常在架構(gòu)中會有一個明確定義的地方已經(jīng)封裝 了系統(tǒng)業(yè)務邏輯。可以使用“遠程門面模式(Remote Facade Pattern)”來包裝這些服務,以便用合適的方式來暴露基于模型的服務。



          同樣是可以利用方法論來避免問題,但對于粒度的把握就是一個經(jīng)驗的問題。




          模式(Schema)?我們不需要任何發(fā)臭的模式! Kyle指出,通常開發(fā)者試圖重用現(xiàn)有代碼來生成和解析作為Web服務實現(xiàn)基礎的XML。這些實現(xiàn)通常使用XML解析器來編組/解組消息,同時使用 Java HTTP類來發(fā)送和接收XML文檔。使用Web服務時,通用的方法是,創(chuàng)建使用模式元素的WSDL文檔,使XML不受阻地通過,然后在現(xiàn)有代碼中對它們進 行解析。

          這個問題的癥狀是組織沒有看到SOA承諾的好處,而且維護他們的解決方案似乎比以前使用Web服務的時候更難(而不是更容易)

          簡單的解決方案是,每當寫Web服務時,不管使用WS-*標準還是使用REST方法,都要確保你創(chuàng)建了代表你文檔結(jié)構(gòu)的完整準確的XML模式。

          如果你正在構(gòu)建WS-* Web服務,那么這個XML應該被包含在描述你的Web服務的WSDL之中。即使你在使用REST方法,擁有易于訪問的XML模式將鼓勵你的服務被重用。






          posted on 2009-03-16 14:55 季失羽 閱讀(227) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 财经| 高清| 青岛市| 东源县| 封丘县| 宁海县| 锦州市| 玉门市| 瑞丽市| 阳谷县| 皮山县| 邵武市| 个旧市| 延安市| 康乐县| 台南县| 敦化市| 柘城县| 西平县| 漳平市| 朝阳市| 杭锦旗| 海城市| 娱乐| 五指山市| 盐亭县| 郁南县| 焦作市| 特克斯县| 永德县| 九台市| 汶川县| 赤峰市| 平塘县| 正阳县| 衡南县| 桃源县| 盘锦市| 东港市| 惠安县| 井研县|