簡體   English   中英

在不同服務器上托管表示層和應用程序層

[英]Hosting presentation layer and application layer on different servers

我的表示層包含MVC模式,應用程序層包含服務和DTO,所有服務和DTO都使用ASP.NET框架。

像這樣拆分代碼的想法是,可以將表示層托管在一個負載均衡的服務器群集上,而將應用程序層托管在另一個負載均衡的服務器群集上。

我們不想在服務器之間序列化數據,而是希望能夠激活類並在應用程序層中調用方法,就像它們是構成表示層的應用程序的一部分一樣。

我找不到任何有關如何實現這樣的設置的文檔,也找不到這樣的設置的名稱,因此我很難入門。 我要實現的目標有可能嗎?

您的第一個挑戰將是連接演示文稿層和服務層。 使用Web API或SOAP公開服務層應該很輕松。 您甚至可以使用Windows RPC或DCOM,盡管我懷疑這可能是侵入性的,並且會強制更改服務層代碼。

執行此操作時,您將引入額外的網絡躍點和數據編組/解組(因為將對象轉換為字符串表示形式,然后在網絡上傳輸后又轉換回對象),根據您的應用,這可能不會完全不同,但這是要牢記的。

您還需要解決如何縮放的問題。 這里最常用的方法是引入兩個負載平衡器,一個用於前端,另一個用於后端。 擴展並增加另一層復雜性。

一種更現代(更簡單,更高效)的方法可能是將您的應用組織為一組微服務。 您將部署應用程序功能的孤島(例如用戶管理或用戶首選項),並將用戶服務,DTO和演示控制器一起打包和部署。 然后,您可以分別部署應用程序的每個切片(並在每個切片中獲得本機性能)。

當您將控制器邏輯移至客戶端(Web瀏覽器)時,這種方法真正開始嶄露頭角。 單個客戶端通過REST與眾多后端通信。

否則,如果您以經典的mvc.net方式在服務器上模板化,那么微服務方法將變得不那么優雅。 至少,您必須解決在多個可部署對象之間分配通用模板資產(css,js,圖像)的問題。 這不是一個大問題,但是您可能需要將其納入構建過程中。 另外,您還必須考慮更改這些資產時會發生什么。 您是否需要重新部署所有全棧微服務?

您可以使用WCF ...

WCF的思想是允許您實現通過網絡連接公開的服務器端類的效果。

您可以使用其屬性和方法定義接口,構建其服務器端實現,並在實現的客戶端使Visual Studio為您自動生成API。

您可以通過TCP / IP或HTTP連接使用WCF(不確定TCP / IP是否適合負載平衡/擴展)。 TCP / IP顯然旨在用於同一LAN上的計算機之間的連接,我認為其開銷要小於HTTP。 WCF還可以在命名管道上工作,但這是供進程在同一台計算機上處​​理通信的方法-在此不相關。 無論如何,無論您使用哪種協議,都仍然需要一個序列化過程。 對於HTTP,它將是SOAP(有點沉重); 不確定TCP / IP。

我已經使用WCF通過TCP / IP,HTTP和命名管道成功實現了解決方案,但是擴展從來都不是其中的考慮因素。

對於大多數目的,我現在不再使用WCF,而是使用JSON作為序列化格式,而轉而使用RESTful .NET WEB API 2服務。 與使用WCF相比,使用它們可能需要更多的工作,但是在服務器端進行設置要容易得多。

附錄:

我應該為RESTful WEB API方法增加一個好處:靈活性。 今天,您不希望客戶端瀏覽器處理javascript,但是如果應該更改javascript,則無需對應用程序服務器進行任何更改。 更改將僅限於演示服務器將處理過程從其自身轉移到瀏覽器。 如果選擇RPC方法(如WCF),則您對該架構的承諾更大,並且失去了輕松脫離該架構的靈活性。

暫無
暫無

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

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