14

我開始使用Eureka和Zuul的Spring Cloud,並且對構建藍/綠和金絲雀部署有一些疑問。到目前爲止,我已經完成了基礎知識,並且擁有Eureka,Zuul和配置服務器按預期工作。我試圖完成的是建立一個有兩個版本的服務,比如1.0和1.1。對於特定用戶的一個子集,我想將它們路由到1.1版本,其他人應該轉到1.0版本。春雲:Zuul的金絲雀部署

Zuul過濾器API在文檔上有點亮,而且我正努力鑽研一些概念,所以我想我會在這裏問幾個問題。我也有一些基本的過濾器在運行,除了獲得他們要求的委託人和服務的身份之外,這些過濾器並不是一個很好的工作。我打牆的地方是瞭解如何向Eureka和Zuul公開兩種不同版本的相同服務。我很好奇幾件事:

  • 在文檔,文章和其他堆棧溢出之間,術語「服務」和「集羣」似乎可以互換使用。它是否正確?
  • 這樣說,如果我有一個服務名爲/simpleservice我是否暴露兩個不同的服務ID(即simpleservicesimpleservice-1.1)?如果我這樣做,當其中一個目標用戶請求/simpleservice時,我讓Zuul將它們發送到/simpleservice-1.1
  • 或者,是否將另一個節點添加到現有服務ID並向每個節點添加其他元數據,以便Zuul和區分版本1.0和1.1?
  • 正確的答案是「以上所有」? :)

回答

6

假設您使用功能區以及我將離開服務ID,因爲它們。相反,我會看看com.netflix.loadbalancer包。金絲雀部署本質上是非常具體的約束條件下的負載平衡。您可以實現您自己的AbstractLoadBalancerRule,該服務器根據您希望基於路由的某個屬性選擇服務器。然後將該規則添加到Zuul實例的配置中。

@Configuration 
public class CanaryConfiguration { 
    @Bean public IRule canaryDeploymentRule(IClientConfig config) { 
     CanaryDeploymentRule rule = new CanaryDeploymentRule(); 
     rule.initWithNiwsConfig(config); 
     return rule; 
    } 
} 

如果你讓你的服務註冊自己尤里卡不同的服務ID(「simpleservice」和「simpleservice-xy格式」),我想事情都會變得複雜。當從Eureka檢索可用服務器列表時,您將不得不擴展發現客戶端以忽略版本部分(「-xy」,同時仍能夠處理「foo-service」),然後執行一些選擇過程來選擇無論如何都是正確的。所以我想事情會變得更加複雜。

這都是基於最好的猜測,我沒有實際執行這個。我意識到這個問題已經快4個月了。因此,如果您在此期間找到了其他解決方案,那麼如果您可以將它分享給您自己的問題的答案,那將是非常好的。

+1

我們在功能區使用Zuul,但我沒有想到要查看規則示例的Ribbon項目。這有很大幫助。一旦我們深入瞭解,我會回來。 –

+0

@Ryan我對學習很感興趣,你是如何解決你的問題的? –

+0

你有更深入的瞭解@ RyanJ.McDonough? – Gerardo