簡體   English   中英

每個實例的AppDomain還是進程?

[英]AppDomain or process per instance?

我想知道是否應該為每個實例使用一個進程,或者我是否應該使用AppDomain在一個進程中運行多個實例。

我有一個服務器應用程序遵循設計類似telnet。 用戶始終通過TCP連接,服務器保持工作站上顯示的客戶端會話的完整狀態。

該軟件需要支持最多至少500個並發連接,可能更多。 典型的安裝需要連續運行3到7個應用程序實例,盡管除了一個實例之外只有幾個連接(它們用於測試,參考環境等)。 在內部,出於開發目的,每個環境最多有40個環境,最多20個並發連接。 我的目標主機環境將是64位Windows。

我知道IIS使用的模型只有一個進程和多個AppDomain ,但我也看到每個實例都有一個進程的優點。

我應該使用哪個以及為什么?

編輯:
不同的實例涉及同一應用程序的不同版本,這些版本無法一起在單個AppDomain運行。 此外,不同的實例不必彼此通信,僅用於管理目的的主服務。

總結一下:

  1. 你有一個像服務器應用程序的telnet。
  2. 您將在同一台計算機上運行此應用程序的多個版本。
  3. 不同的實例不需要相互通信; 只有共同的服務。

據推測,每個實例都通過不同的端口進行通信

有了這些要求,我永遠不會考慮構建與IIS相同的功能。 而是我將它們作為完全獨立的應用程序運行。

順便說一句,你說錯了,IIS只有1個進程有多個應用程序域。 IIS可以為單個站點啟動多個進程。 這被稱為Web Garden 此外,IIS為其擁有的每個應用程序池至少啟動一個進程。 您可以將這些視為在IIS服務器上執行的單獨的w3wp.exe進程。

通過一個共同流程運行所有東西的唯一好處是,如果主機提供了一切對所有東西都有的價值。 例如,日志記錄界面或故障處理。 編寫,設置和維護對於收效甚微來說非常復雜。

最后,用戶數量並不重要,因為它將受應用程序的資源使用控制。 這可能意味着網絡,內存甚至磁盤,具體取決於您的應用程序執行的功能。

好吧,你不能有每個用戶會話的進程,因為你計划500個。 500 appdomains也是如此。 IIS在主機進程(應用程序池)下使用每個應用程序的應用程序域,而不是用戶會話。

我可能會使用類似的設計嗎? 每個應用程序域中的實例(你說的最多40個實例?)每個用戶都由線程處理,沒有新的應用程序域/進程creaeted。(不會像指出的那樣)支持大量用戶,也許負載均衡器可以用於指導一群機器

構建服務器非常容易,以便您以后可以做出決定,並且更有可能有一點混合; 一些共享主機與多個應用程序域和一些單一主機?

復雜的位不會創建多個應用程序域並多次運行相同的應用程序。 復雜的位置已經到了可以創建單個應用程序域並托管單個應用程序的程度。 一旦您可以這樣做,使用相同或不同的應用程序擴展到多個應用程序域很容易。

我有一個示例服務器( 這里 )作為我的服務器框架的一部分,可以以兩種方式運行,它在一個端口上托管一個應用程序域,並在第二個端口上旋轉每個用戶應用程序域(我不建議)每個用戶應用程序域是您所需要的,只是它在每個服務器的單個應用程序域的規模的另一端)。

還有一個新的例子可以完成IIS所做的整個“影子復制,自動重啟”的事情,這有點復雜,但我已經在這里這里寫過了。 一旦你有了基本的主機,它就不會太復雜了。

我個人傾向於將所有這些構建到服務中,然后只需要運行多個副本,如果你想要多個服務器,那么你可以根據需要混合搭配,並且整個系統的分析表明你應該這樣做。

我想,總的來說,我會說你應該設計多個應用程序域的情況,因為你總是可以通過使用單個應用程序域配置服務器來運行單個應用程序域和多個進程...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM