2017-04-18 26 views
0

實際上,對於我所需要的可能存在更好的術語,但我不知道它,並且會感謝任何人提出建議和/或編輯該問題的主題適當。B是退步時的一種A/B測試

考慮部署到生產服務器的web api服務S。讓我們將其視爲真相的工作來源。

然後,我需要更新一些外部依賴關係或更改基礎結構代碼,既不直接影響核心業務邏輯也不服務的公共合同。

因此,我得到S_updated必須通過階段的階段,然後才能部署到生產。由於對代碼庫所做的更改,我期望此服務既可以作爲以前的版本工作,也可以不工作,因爲集成問題。仍然有改變系統行爲的風險,但我可以忍受,希望單元測試是一個相當好的安全網。實踐也證明了這一點。

我真正想要的是能夠將S_updated部署到生產環境,並讓一些代理服務將全部或部分(取決於配置)失敗的請求分派到前S服務。

是否存在用於此類功能的一些通用可配置解決方案?

+1

你需要研究金絲雀的釋放和藍/綠部署。這些是你所描述的模式。 – Paolo

回答

1

保羅的評論是正確的。您正在詢問Canary release process.

部署時,客戶端將很有可能到達舊服務並且很少有機會到達新服務。所以如果一個呼叫失敗(由於新服務中的錯誤),客戶可以重複呼叫並且很有可能獲得舊服務的成功。

如何做到這一點取決於您使用的基礎設施。

例如,如果要使用kubernetes羣集,則可以將服務的前端負載均衡器配置爲僅將一部分流量發送到第二個羣集(或第二個服務,如果在同一羣集上運行)運行新版本的服務。

另一個例子是,如果您使用的是基於DNS的負載平衡解決方案,則必須將DNS策略更改爲加權模式,該模式會使用新服務向服務器發送一小部分流量。

+0

是的,非常類似於加那利。但是我不能劃分請求,因爲用戶基數太小。=)測試需要幾個月。 –

+1

另一種替代方法是使用API​​網關並對其進行配置,以將失敗的請求重新路由到替代端點。用Hystrix的東西來看看Kong或Zuul。如果你的用戶無法爲你測試,也可以考慮編寫更多的自動化測試:) –

相關問題