簡體   English   中英

Service Fabric如何選擇托管服務的端口?

[英]How does Service Fabric Choose a Port to Host a Service on?

我正在使用C#在Service Fabric上實現GRPC。 GRPC服務器需要ServerPort(負責將ssl憑證綁定到端口)和服務定義(負責在路徑上映射請求到方法委托)。 我做了一個通信監聽器,它報告分區和副本ID以及FQDN:端口。 這允許客戶端正確地確保其與正確的分區/副本進行通信。 我在服務mainifest中聲明了一個Endpoint資源,並將端口留空,表示我希望service fabric分配一個隨機端口。 我在本地開發中遇到的問題(我還沒有把它推到天藍色的集群中)是復制品似乎死了,因為它們被分配了相同的端口。 我還應該注意,我告訴聽眾聽二級副本。

我的問題是:

  1. 服務結構如何選擇一個端口來托管服務副本?
  2. 輔助副本的端口共享問題只是我在同一台機器上的本地開發問題嗎? (我假設真實集群中的副本將放在不同的故障/升級域上)

Service Fabric保留應用程序端口范圍,該范圍在您的群集設置中定義(如果您在Azure中托管,則在Resource Manager模板中)。 當您將端口空白留在端點資源中時,SF將從此范圍中選擇尚未分配給計算機上其他服務的端口。

需要注意的重要一點是,端口分配是按主機進程進行的 ,默認主機進程模式共享主機進程,其中相同服務類型的副本可以共享主機進程。 在這種情況下,同一主機進程中的副本將獲得相同的端口。

有幾種方法可以解決這個問題:

  1. 使用支持端口共享的網絡堆棧。 在Windows上,您擁有Windows HTTP Server API(由HttpListener使用,以及在其上構建的任何內容,例如Katana)和WCF。
  2. 使用獨占主機進程 ,在這種情況下,每個副本都有自己的主機進程,因此它自己的唯一端口。 進程隔離還有許多其他好處(例如,如果副本崩潰主機進程,它不會使其中的其他副本失效),代價是機器上的資源消耗增加。

暫無
暫無

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

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