您好,登錄后才能下訂單哦!
來源:Redislabs
作者:Shabih Syed
翻譯:Kevin?(公眾號:中間件小哥)
?
為了讓系統運行更流暢,又避免 Knights Capital 在 2012 年犯下的 4.6 億美元的錯誤,一家領先的金融市場制造商的單日計算機系統故障給 IT 社區提供了一些教訓,包括系統組件的設計、實現,和DevOps 的重要性。在這個由兩部分組成的博客中,我將分享一些想法,以幫助開發團隊保持其持續集成和持續部署(CI / CD)流程的安全, 特別的,我將展示如何使用特性開關和特性上下文來來管理持續更新,如何創建一個容易訪問的日志數據庫,一個可以快速查找的錯誤信息數據庫--所有這些都借助 Redis。想象一下,您是一名工程總監,管理著一個由多個開發人員組成的團隊,這些開發人員負責具有數千個并發用戶的Web 應用程序的前端。您的應用程序已部署在 AWS 中,您需要每周推送新的版本,公司無法承受因Web 應用程序帶來的任何破壞,因此如果發生錯誤,您的團隊必須立即回滾到最近更新的版本。您必須快速識別出問題代碼,讓開發人員對其進行修復,并在后續對外發布,而且產品團隊總是要求盡快提供新功能,因此您如何迅速對錯誤做出反應,并以業務需求的速度上線新功能?
在 2019 年游戲開發者大會(GDC)上,我參加了一個主題為“大規模調試:每月活躍用戶超過 7 千萬的跨平臺穩定性”的議程,由Redis Labs 客戶 Roblox 和 Chris Swiedler 共同主持,描述了一種可以可以支撐每周更新的軟件發布過程。克里斯分享了他的團隊如何在 Roblox 上修改應用程序行為而不改變代碼,這樣可以減少現網問題的發生。他們使用特性標記,這與 Martin Fowler 的“特性開關”方法非常相似。
?
新功能發布的示例 CI / CD 流程
?
讓我們分解圖 2,其中概述了可以作為CI / CD 和分類過程的一部分的方法:
1.?開發人員開始研究新功能;
2.?開發人員和產品管理團隊決定哪些場景將使用新功能(可能僅針對部分用戶);
3.?開發人員提出了一種切換策略,其中新代碼和舊代碼由“ if and else”塊分隔;
4.?一旦開發人員完成新功能代碼的開發,他們便將Canary 版本發布到生產環境(借助 DevOps);
5.?人們在使用該應用程序中,根據其角色和切換,可以執行新代碼或者舊代碼;
6.?如果出現問題,可以將切換開關設置為false,以將所有用戶轉移到舊代碼;
7.?一段時間后,該功能將升級為正式發布版本(GA)。
此策略可有助于:
1.?將canary 版本發布到生產中,以實時流量和真實用戶(而不是模擬)進行測試;
2.?在不回滾任何代碼的情況下即時禁用功能;
3.?通過切換特性開關啟用功能或功能組合;
4.?可通過特性開關中的元數據輕松識別(對于大型開發團隊而言)負責的開發人員。但是可以將這種方法前進一步,以幫助分布式開發團隊安全地發布新功能,并在需要時以最小的影響回滾新功能。
?
Redis Enterprise 的 CI / CD
?
?
您需要快速,持久的數據庫時,Redis Enterprise 非常適合。其功能包括:
具有永久網絡存儲的完全托管的 Redis 數據庫即服務,可防止實例數據存儲丟失;
跨多個 RedisEnterprise 群集創建的無沖突可復制的數據庫,這些集群位于各地的不同數據中心,這提供高可用的雙活和主備部署。
強大的搜索功能(通過 RediSearch 模塊)可跨數據庫集群運行搜索查詢。
?
為了讓您的 CI/ CD 分流過程更加有效,在本系列的下一部分中,我將提供更多詳細信息和代碼段來具體展示如何使用 Redis 構建特性開關、特性上下文、錯誤數據庫和日志數據庫。
?
原文鏈接:https://redislabs.com/blog/using-redis-to-optimize-feature-rollouts-and-error-triaging/
更多優質中間件技術資訊/原創/翻譯文章/資料/干貨,請關注“中間件小哥”公眾號!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。