程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 改進.NET應用程序的性能和可伸縮性(三)-Remoting性能

改進.NET應用程序的性能和可伸縮性(三)-Remoting性能

編輯:關於.NET

設計上的考慮

Use .NET remoting for communicating between application domains in the same process.

在同一進程內使用.NET Remoting為應用程序域間通信。

Choose the right host.

選擇正確的宿主(譯注:應該是指IIS,windows service等)。

Choose the right activation model.

選擇正確的激活模型(譯注:客戶端激活,服務端激活等)。

Choose the right channel.

選擇正確的通道(譯注:TcpChannel,HttpChannel等)。

Choose the right formatter.

選擇正確的Formatter。

Choose between synchronous or asynchronous communication.

在同步和異步通信之間選擇。

Minimize round trips and avoid chatty interfaces.

最小化不必要的來回及避免啰嗦的接口(譯注:可能翻譯的不准確)。

Avoid holding state in memory.

避免在內存裡保持狀態。

激活

Use client-activated objects (CAO) only where you need to control the lifetime.

僅在當你需要控制生命周期的時候使用客戶端激活對象。

Use SingleCall server activated objects (SAO) for improved scalability.

使用SingleCall的服務端激活對象來改進可伸縮性。

Use singleton where you need to access a synchronized resource.

當你需要訪問一個同步的資源的時候使用Singleton激活模式(譯注:singletion是說無論多少次請求 服務端都是一個對象在執行調用)。

Use singleton where you need to control lifetime of server objects.

當你需要控制服務端對象的生命周期的時候使用Singletion方式(譯注:可以重寫 MarshalByRefObject的InitializeLifetimeService方法)。

Use appropriate state management to scale the solution.

使用適當的狀態管理以提高你的解決方案的可伸縮性(譯注:scale不知道在這兒咋翻譯)。

生命周期的考慮

Tune default timeouts based on need.

在需要的時候調整默認的超時時間(譯注:based不知道需不需要翻譯出來)。

宿主

Use Internet Information Services (IIS) to authenticate calls.

使用IIS來驗證請求(譯注:IIS自帶關閉匿名訪問並啟用集成身份驗證的功能,所以可以直接用來進 行客戶端身份驗證,該方法只適用於HTTP通道。如果不使用IIS,就得實現自定義通道來實現客戶端驗證 了。)。

Turn off HTTP keep alives when using IIS.

在使用IIS做宿主的時候關閉HTTP的keep alives選項(譯注:在IIS承載一半web應用的時候打開保持 鏈接選項會提高性能,因為一個網頁上的多個圖片的下載可能用一個連接就能下載,避免多次創建網絡鏈 接,而IIS承載remoting會為每個remoting請求使用一個連接,所以關閉保持連接選項IIS就不用考慮是否 要保持連接了,從而提高了性能)。

Host in IIS if you need to load balance using network load balancing (NLB).

如果你需要使用網絡負載平衡來實現負載均衡用IIS來宿主你的remoting應用(譯注:使用IIS和 HttpChannel可以讓每次的方法調用都是單獨的連接,並且和機器無關,而使用TcpChannel就不能在一個 服務器場裡實現負載均衡,因為TcpChannel使用的是TCP長鏈接,每次調用一個對象的方法都到同一台機 器,不能自動在一個服務器場的多台機器上均衡請求)。

通道

Use TcpChannel for optimum performance.

使用TcpChannel來達到最優化的性能。

Use the TcpChannel in trusted server scenarios.

在信任的服務器場景中使用TcpChannel(譯注:因為自定義宿主,如控制台程序,windows服務等沒有 內置的身份驗證機制,而且自定義宿主為了提高性能一般都用TcpChannel,所以你一半應該在不考慮身份 驗證的時候使用自定義的宿主,一般是在內網服務與服務之間的調用。如果要實現自定義宿主的身份驗證 ,需要你自己開發自定義的Sink來實現安全機制,關於擴展remoting,可以參看idior的有關remoting的 帖子)。

Formatters

Use the BinaryFormatter for optimized performance.

使用BinaryFormatter達到最好的性能。

Consider Web services before using the SoapFormatter.

在使用SoapFormatter前考慮使用Web服務。

按引用(Marshal)封送還是按值封送

Use MBR (marshal by reference) when the object state should stay in the host application domain.

當對象狀態保存在主機應用程序域的時候使用按引用封送(marshal by reference)(譯注:比如一 個對象引用本地的一個文件或者數據庫連接,或者網絡連接,它們的狀態只在本機的應用程序域裡,這時 候要用MBR,讓別人用代理訪問它們,如果按值封送的話就是拷貝一份狀態傳送給客戶端,但這些狀態只 在本機有效,就會出錯)。

Use MBR when you need to update data frequently on the server.

當你需要在服務器上經常更新數據的時候使用MBR(marshal by reference)(譯注:如果用按值封送 的話,每次調用都會對整個對象進行序列化和反序列化,這很耗費性能,而用按引用封送就會提高性能, 代理會在服務器的應用程序域裡marshal數據)。

Use MBR when the size of the object is prohibitively large.

當對象的大小不會太大的時候使用MBR(譯注:如果對象很大,使用MBV就因序列化而耗費很大的性能 ,相反,用MBR就可以只通過網絡獲取需要的數據下來,而不是整個很大的對象,從而提高了性能)。

Use MBV (marshal by value) when you need to pass object state to the target application domain.

當你需要傳遞對象狀態到目標應用程序域的時候使用MBR (marshal by value)。(譯注:如果對象很 小而且很容易的在應用程序域間傳遞,就用MBV,這樣就沒有必要每次調用方法都會通過透明代理跨越進 程邊界或者應用程序域邊界去改變真實對象,這樣減少了邊界之間的來回交互)

Use MBV when you do not need to update data on the server.

當你不需要在服務端更新數據的時候使用MBV(marshal by value)(譯注:這個很容易理解,真實對 象都是只讀的,那就把對象都傳遞給客戶端,讓它用呗,否則每次獲取對象的狀態都會跨越邊界通信)。

Use small MBV objects when you need to update data frequently on the server.

當你需要經常在服務端上更新數據的時候使用小的MBV(marshal by value)對象(譯注:把大的服務 端對象拆分成多個小的MBV對象來更新服務端的數據,可以減少marshal和unmarshal的資源消耗,特別是 那種non-blittable(表示在封送的時候需要對象的內存存儲,http://msdn.microsoft.com/en- us/library/75dwhxf7(VS.80).aspx)類型的數據。該條和本節第二條要權衡考慮,要權衡對要更新的數 據不斷的序列化反序列化耗費的性能大,還是對要更新的數據進行不斷的marshal和unmarshal耗費性能。 )。

序列化和封送。

Consider using a data facade.

考慮使用數據的外觀(譯注:facade模式大家應該都理解,一個對象可能有多個狀態,可以把這些狀 態分成幾組,只給客戶端返回客戶端關心的那組狀態就行,這樣比序列化整個對象的所有狀態性能好)。

Marshal data efficiently and prefer primitive types.

有效的封送數據盡量使用基元類型(譯注:跨越remoting邊界的調用昂貴而且很慢,所以盡量只傳遞 你需要的數據,如果這個數據你自己本地簡單計算一下就能得到,就別去遠程調用了。盡量使用基元類型 或結構,因為對他們的序列化和封送耗費的性能都相對較小)。

Reduce serialized data by using NonSerialized.

使用NonSerialized特性來減少序列化的數據(譯注:可以把一定對象裡不需要序列化的字段用該特性 標記)。

Prefer the BinaryFormatter.

盡量使用BinaryFormatter(譯注:性能好)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved