最近在進行單元化建設方面的的工做,其中涉及服務分組和藍綠髮布相關的概念,在這裏總結一下了解到的相關知識。spring
在應用邏輯裏內置功能開關,經過開關的打開關閉來決定執行新舊邏輯,無需路由機制支持,開發人員能夠靈活的控制程序的表現。這種方式須要動態配置中心的支持,目前業界已經有比較完善的解決方案,好比Apollo、spring cloud config等等。具體的方式相似這樣:數據庫
if Config.SwitchOn {
//new logic
} else {
//old logic
}
複製代碼
功能開關的方式雖然簡單直觀,可是隨着版本的更新須要常常清理過時配置,維護成本比較高。後端
灰度部署是指先更新一小部分服務器好比2%,而後對應用進行測試驗證。若是驗證經過,則繼續更新剩餘部分的服務器,不然進行回滾。灰度部署的好處就是影響面小,出現問題時只會影響很小一部分用戶,適合對新功能信心不足或是對服務可用性要求比較高的場景。服務器
滾動部署更像是灰度部署的加強版,當新版本通過灰度驗證經過以後,咱們逐漸增大灰度部署的範圍,直到所有的服務器都更行到新版本。在部署過程當中須要支持平滑切換,即先把服務器從負載均衡列表中摘除;此外滾動發佈一般是分批次的,好比第一批10%,第二批30%,第三批100%等等。負載均衡
滾動部署相比灰度部署,須要自動化部署工具以及完善的路由機制支持,這樣才能保證用戶體驗足夠平滑;此外滾動部署比起灰度部署的發佈和回滾時間也會更長。運維
藍綠部署技術是指同時維護兩套相同的生產環境,咱們能夠稱之爲藍色環境和綠色環境,而只有一個顏色的環境負責提供完整的服務,另外一個環境則徹底空閒。當咱們須要部署新版本的服務時,咱們先在空閒的環境進行部署和驗證,當驗證完畢後,經過操做路由將客戶端流量切換至新版本的環境,而原先的環境則變爲空閒環境,依次循環交替。工具
要實現藍綠部署,須要幾個額外支持:測試
藍綠部署的好處:spa
藍綠部署的不足:設計
前面提到的藍綠部署須要兩個環境,實際上就至關於雙服務器組。二灰度部署和滾動部署也能夠用於雙服務器組。好比雙服務器組中的灰度部署就是在藍綠環境切換時不是一刀切,而是先切換一小部分到新環境,驗證經過後再全量切換到新環境;而滾動部署在雙服務器組中就是分批次切換到新環境。
在進行服務器組劃分時,能夠有不一樣程度的劃分:根據數據中心劃分,好比A機房爲一組、B機房爲一組;根據邏輯分組劃分,好比A、B機房的一半機器分爲一組、剩下的另外一半機器分爲一組。不管如何分組,請求在服務之間傳遞時都是須要識別某個機器的分組標識的,好比在註冊中心中服務實例的元數據裏須要有相似"group=group1"這樣的標識,這樣客戶端或者代理節點在進行路由時才能識別服務端實例所在的分組。
前面提到的各類部署策略,實際上都須要不一樣程度的路由機制支持。對於HTTP服務可使用代理節點的方式,在域名解析過程當中分發到不一樣的下游節點;RPC服務則須要實現配套的路由機制了。