開發高效能的webservice應用
一、 webservice概述
1、 效能
?設計時就考慮效能
?不要在事後再加入效能!
?在專案開發的整個過程中反覆測試
?兩種量化web效能的方法:
1) 機器吞吐率(requests/sec)
2) 響應時間(time tofirst/last bytes)
2、物件導向
?應用於同一平台和執行環境
?共享型別而不是schemas
?採用便宜, 透明通訊
?物件的標識與生命週期由系統維護
?客戶機和伺服器的同步的部署
?容易概念化,因而提供乙個自然的模型
?一般不需要狀態管理
?應用於乙個可**的序列、期限和結果
?目標是遠端透明地使用方法和型別
3、面向服務
? 應用於異構平台和執行環境
? 共享schemas而不是型別
? 採用高成本, 明確通訊
? 服務是自治的: 安全和失效是隔離
? 允許的連續, 分離部署客戶機和伺服器
? 基於軟體元件和分布的物件,依賴服務的協議
? 擁有並維護狀態
? 基於訊息, 非同步的, 和長通訊
? 目標是提供服務隔離和呼叫的標準。
4、web service效能設計的考慮
? 設計"大塊頭"的介面減少往返。
? 基於訊息的程式設計而不是遠端過程呼叫(rpc) 。
? 使用xml字串作為引數。
? 盡量使用原始資料型別引數。
? 避免在呼叫之間維護伺服器狀態。
? 考慮為複雜的webmethod提供輸入校驗。
? 考慮對webmethod的結果進行快取。
? 選擇適用的大資料報傳送方式。
? 避免呼叫本地的webservice。
5、基於訊息程式設計和rpc
? 訊息
//client
string msg = "...";
mymethod(msg);
//server
[webmethod]
void mymethod(string msg)
? rpc
serv.senditemstobepurchased(array items);
serv.shippingaddress(string address);
serv.checkout();
二、webservice效能最佳實踐
? 連線與執行緒優化
? webmethod的優化
? 高效地呼叫webmethod
? 設定超時
? 快取
? 狀態管理
1、連線
?配置maxconnection 屬性。
示例:
修改:
?對webservice按優先順序分配連線資源
?使用單一身份進行呼叫。
serv = new webservice1();
serv.preauthenticate=true;
icredentials concredentials =new
networkcredential("uid","pwd","npstest" );
serv.credentials = concredentials;
serv.allowautoredirect=false;
serv.connectiongroupname = "sameforallusers";
?為整合認證使用unsafeauthenticatedconnectionsharing 。
?為基本驗證使用preauthenticate 。
2、webmethods
?使用原始型別引數。
?考慮使用緩衝。
?將webmethod的返回快取。
?只在需要會話狀態時才使用它。
大資料報的處理
?使用位元組陣列作為引數或返回值
?返回乙個url
?使用序列化流
序列化?使用xmlignore減少序列化。
?減少往返。
?考慮使用xml 壓縮。
public class myclass
非同步webmethod
?用非同步webmethods對i/o 操作。
?當webmethods依賴於工作執行緒時,不要使用非同步。
//webservice
[webmethod]
iasyncresult beginmyproc(...) //the wsdl will show the method as myproc(...)
[webmethod]
endmyproc(...)
單工通訊
?如果不需要返回,考慮使用oneway屬性。
[soapdocumentmethod(oneway=true)]
[webmethod(description="return immediately")]
public void somemethod()
com互動
?建議: 盡量避免互動
?最好將com**移植到.net
?可能會很昂貴, 尤其對於陣列操作
?「受管」 與「不受管」 轉換
?注意單元執行緒元件
?預設情況asp.net 使用mta執行緒
?損害sta 元件效能
注意所有vb6元件!
3、非同步呼叫
?當有併發任務時例用非同步呼叫webservice。
?使用非同步呼叫多個不相關的webservice。
?非同步叫呼叫webservice可以增加ui 響應。
4、超時
?適當地設定**的超時。
?設定您的asp.net 超時大於您的webservice的超時。
?如果頁面超時,則放棄頁面與webservice的連線。
mywebserv obj = new mywebserv();
obj.timeout = 15000; // in milliseconds
5、快取
?對時效性不強的資料進行快取。
?考慮提供與快取所相關的資訊給客戶。
?考慮使用邊界快取,如isa上的快取。
6、狀態管理
開發高效能的WebService應用
一 webservice概述 1 效能 設計時就考慮效能 不要在事後再加入效能 在專案開發的整個過程中反覆測試 兩種量化web效能的方法 1 機器吞吐率 requests sec 2 響應時間 time tofirst last bytes 2 物件導向 應用於同一平台和執行環境 共享型別而不是sc...
高效能web Server 開發心得
高併發web伺服器處理 一 html靜態化 效率最高 消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的 上的頁面採用靜態頁面來實現,如使用資訊發布系統cms 二.伺服器分離 對於web伺服器來說,不管是apache iis還是其他容器,是最消耗資源的,於是我們有必要將與頁面進行分離,在處...
高效能網頁開發規則
1 原則一如果能使頁面html顯示跟後台處理同時進行,這是乙個比較好的方式 比如說將頁面上容易顯示的部分優先反饋給瀏覽器,然後再接著繼續處理下面的步驟這樣比較 象php中在html的後可以使用flush 方法,提前將部分資訊返回給客戶端,通常有css js等資訊 然後可以將js css打包 壓縮 儘...