《4-徐旋-Feature Toggles (特性切換)和Unleash的應用案例分享.pdf》由會員分享,可在線閱讀,更多相關《4-徐旋-Feature Toggles (特性切換)和Unleash的應用案例分享.pdf(49頁珍藏版)》請在三個皮匠報告上搜索。
1、Feature Toggles(特性切換)和Unleash的應用案例分享徐旋瑞典金融科技公司 高級研發經理徐 旋20年軟件測試與開發經驗,14年管理經驗;先后在通信,金融科技,流媒體等領域工作中國和海外工作,跨國跨文化團隊領導經驗;2020 QECON講師瑞典金融科技公司高級研發經理,目前管理三個研發團隊1432685https:/ 工程效能部門介紹及挑戰02 Feature Toggles(特性切換)03 Unleash 應用案例,經驗分享04 總結總結05 01瑞典金融科技行業簡介瑞典科技獨角獸及金融科技人口1000萬人均GDP$61028(2021全球第16)獨角獸融資金額歐洲第4 人均
2、獨角獸數量全球第1 專注領域:金融科技,游戲娛樂02工程效能部門及挑戰工程效能(Engineering Productivity)部門Vision 愿景愿景Mission 使命使命讓工程師能夠以快速的節奏迭代開發并交付高質量的產品。為工程師提供一流的工具、流程和服務,以簡化其軟件開發過程,使其能夠專注于編寫代碼和創造價值。BuildReleaseDeploy可靠安全快速01降低風險02提升客戶體驗03增強團隊信心04生產環境測試近期目標 減少因運維導致的宕機事件使我們能夠最小化問題代碼的影響范圍和波及面。提升我們的平臺客戶的體驗。由于沒有專門的測試團隊,這也會讓我們的研發團隊更有信心安全地發布
3、代碼。幫助進行測試-因為某些功能在本地進行測試非常困難。03Feature Toggles(特性切換)VS.Decoupling deploymentfrom release!將部署與發布脫鉤!Martin Fowler/2010什么是Feature Toggles/特性切換?什么是Feature Toggles/特性切換?一個最簡單直接的例子(代碼端)整體策略允許在運行時通過某種形式的管理界面修改切換配置。使用該管理界面在測試環境中啟用新功能。教會切換路由器如何做出動態的、每個請求的切換決策。這些決策會考慮到切換上下文,例如查找特定的 Cookie 或 HTTP 標頭。通常,切換上下文用作識
4、別發出請求的用戶的代理。讓切換路由器基于切換配置做出決策,并將該配置與環境相關聯。只在預生產環境中啟用新功能。場景1 實驗性測試場景2 數據遷移場景3-Canary Launch/灰度發布如何來選擇主流的特性切換工具PostHogFlagsmithUnleashLaunchdarklyAmazon Cloudwatch Evidently+AWS AppConfig評估考慮因素:主要功能是否齊全,流行度,社區活躍,價格,可用性,安全04Unleash 應用案例,經驗Unleash架構Unleash 的幾個關鍵配置1 Activation strategies/激活策略3 項目管理4 環境參數2
5、 切換類型StrategyEnvironmentProjectToggletype1 Activation Strategy/激活策略1.Standard 2.UserIDs3.Gradual Rollout 4.IPs 5.Hostnames 也可以自定義策略,例如指定區域,指定特定的市場,等等。1 Activation Strategy/激活策略-入口1 Activation Strategy/激活策略-多個策略1 Activation Strategy/激活策略-自定義策略Schedule Feature Releases/定時發布 1場景?1.新產品發布2.比賽截止時間3.24小時限時
6、搶購Schedule Feature Releases/定時發布 22 Toggle Types/切換類型切換類型,主要用于區分個體特性切換的生命周期。1.Release-發布 40天2.Experiment-實驗 40天3.Operational-運維 7天4.Kill switch-緊急停止開關 永久5.Permission-權限 永久2 Toggle Types/切換類型2 Archive Toggles/移除特性切換1.Console界面移除2.API移除,可以代碼3&4 Projects&Envs/項目和環境 13&4 Projects&Envs/項目和環境 2代碼端SDK服務端SD
7、KGo,Java,Node.js,PHP,Python,Ruby,Rust,.NET客戶端SDKAndroid,Flutter,iOS,Javascript,React,Svelte,VueUnleash 事故案例分享事故經過:修改Unleash的調用邏輯以便升級到企業端,改用了嵌套切換,配置錯誤導致Unleash API無法控制代碼,并且默認值False最終導致服務中斷了幾分鐘,部署舊版代碼恢復服務運行,而在測試環境中沒有捕捉到問題。經驗:每個Toggle的默認值必須不能影響關鍵服務邏輯,Unleash API畢竟是外部的,不能過分依賴導致自身核心業務收到影響避免多個客戶端多層調用,因為邏輯
8、越復雜越容易出錯定期管理Toggle,刪除沒必要的Unleash 成功案例分享問題:數據庫發生數據丟失事故,在修復過程中,需要逐個激活客戶,數據恢復后需要測試單個客戶的數據一致性和服務可用性。使用Unleash:配置混合激活策略,包括1.指定的客戶和 2.一定百分比的最終用戶從0.1%最終用戶開始,逐步測試到最終單一客戶業務的恢復,降低客戶之間的影響。增加了技術人員的士氣和信心,并且可以指定在半夜最終上線100%,降低風險。Unleash 命名規則建議Format:切換類型_jira 系統單據號_注釋舉例:Release_epn_1201_test_portal_featureExperime
9、nt_epn_1501_release_train_ab_testOperational_epn_1200_shut_down_borsKillswitch_epn_1691_degrade_portal_apipermission_epn_1601_elevate_ep_to_gods05總結Unleash 經驗建議11.計劃好切換的整個生命周期。這意味著不僅要為實施創建必要的工單,還要進行清理工作。一個很好的建議是,在引入新切換時,為切換創建一個清理的 PR。2.通過只引入單一責任的切換來避免復雜性,如果可能的話,盡量減少嵌套切換的數量。嵌套切換增加了復雜性和可能的路徑,使得測試和理解正在
10、發生的情況變得困難。3.如果對一個功能不確定,可以將其放在切換之后。Unleash 經驗建議21.避免使用多個切換/實驗,這與復雜性有關,但通過迭代工作、嘗試少量的切換結果清理下一個切換,可以更容易地避免和減少復雜性和技術債務。2.使用健康儀表盤。Unleash 提供了一個健康儀表盤,顯示了所有切換的使用指標。如果有一些你不確定是否在使用的切換,這將更容易做出清理的決策。3.驗證你的 API 密鑰:驗證你的服務是否將 API 密鑰傳遞給客戶端,并且使用的 API 密鑰是有效和正確的。Unleash 經驗建議31.默認代碼流應該是合理的:確保你測試了在添加功能切換時創建的所有可能的代碼路徑。切換
11、的默認值應該是合理和可行的,并且應該避免破壞整個服務。記住,Unleash 是一個外部依賴。2.測試切換:在引入切換后,可以通過打開和關閉切換,查看指標或日志,并驗證它是否按照你的預期工作。如果對切換進行任何操作都沒有任何效果,請檢查是否正確使用了切換。3.驗證切換的策略:如果你為切換使用了自定義策略(基于 appId、credentialsId、merchantId 等),請確保你的服務使用的 Unleash 客戶端識別該策略。最后的總結 Key Takeaways!2010年馬丁福勒第一次提出這個特性切換概念。2017年開始在持續部署領域流行。龜兔賽跑,如何用于devops的世界?將部署與發布脫鉤 可以使用特性切換feature toggles!更多更頻繁的部署,帶來更低的風險和試錯成本!根據自身產品的特性和需求,來自定義“激活策略”,可以非常的靈活??梢試L試不同的流行工具來找到最適合自己的。使用特性切換時也需要非常謹慎,操作不當有時候也會造成事故!感謝聆聽關注QECon公眾號