FEATURE TOGGLE
別再開 BRANCH 了,來試試
ABOUT MILES
CURRENT
Senior Developer @ 104 Corp.
Volunteer @ DevOps Taiwan
TAG
PHP, Docker, DevOps
jangconan@gmail.com
MilesChou
這場分享會聊聊下⾯這些主題
• Continuous Delivery
• Trunk-based Development
• Feature Toggle
• Coding Dojo
為什麼要寫程式︖
耍廢不是很好嗎
• 為了了⽣生活?
• 為了了興趣?
• 為了了⼈人⽣生的遠⼤大理理想?
為了價值
CONTINUOUS DELIVERY
• 持續交付價值給使⽤用者
• 更更快獲得使⽤用者的回饋
怎樣最快︖
⾸先先…
然後再…
接著就會持續收到…
解決不了了問題
就解決製造問題的⼈人
-靠北麥爾斯
保護好程式
GIT FLOW
• develop 開 feature branch
• feature 合 develop branch
• develop 開 release branch
• release 合 master branch
到處都要合併
主要分⽀互相合併
開分⽀ = 挖陷阱
GIT 就是要開分⽀啊,不然要怎麼辦
TRUNK-BASED
DEVELOPMENT
世界上沒有什什麼事是流程無法解決的
如果有,那就再定義⼀一個
-幹話麥爾斯
— Frank Compagner, Guerrilla Games
BRANCHES CREATE DISTANCE
BETWEEN DEVELOPERS
 AND WE DO NOT WANT THAT
"
"
DISTANCE
COMPONENT A
COMPONENT B
COMPONENT A + B
DISTANCE
• 合併後會破壞意想不到的東⻄西
• 很難合併
• 合併前,無法發現是否有重⼯工
• 合併前,無法發現程式是否不相容
非 TBD
圖片來來源:https://trunkbaseddevelopment.com/
使⽤ TBD
圖片來來源:https://trunkbaseddevelopment.com/
TRUNK-BASE DEVELOPMENT 的實踐
• 程式隨時可發佈
• 頻繁提交、簽出、同步程式碼
• 承上,commit 的粒度通常很⼩小
• 必須做 code review
• 串串接 CI,若若 build 失敗,將會⾃自動 rollback
• PR 維持的時間通常不長
有誰在⽤ TBD︖
• Google
• Facebook
• Microsoft Office
它很簡單,可是很難
哪裡簡單︖
• 任何 commit 都可以佈署
• commit 粒度⼩小,code review 簡單
• 只有⼀一個 master 分⽀支
哪裡難︖
• 開發⼈人員的⼼心態與專業能⼒力力要求⾼高
• 必須要有⾃自動化測試
• 決定適當⼤大⼩小的 commit
• commit 順序與上線順序不⼀一定相同
所以我說
那個上線順序要怎麼辦呢︖
回顧 TBD 這張圖
圖片來來源:https://trunkbaseddevelopment.com/
上線順序不能亂改
那改 COMMIT 順序好了
COMMIT 順序不能亂改
那只能改程式了
FEATURE TOGGLE
主角您終於回來了
圖片來來源:https://martinfowler.com/bliki/FeatureToggle.html
開關基本概念
使⽤者 開關 結果 / 開或關
調整上線順序
功能 AB 已完成
使⽤者 開關
功能 A
功能 B
功能 A 先上線
使⽤者 開關
功能 A
功能 B
功能 B 先上線
使⽤者 開關
功能 A
功能 B
功能 AB 摻在⼀起上線
使⽤者 開關
功能 A
功能 B
案例分享
舊版登入⾴
新版登入⾴
實際狀況
• 2019/1/16 - 開 100%
• 2019/1/9 - 開 50%
• 2019/1/2 - 開 10%
• 2018/12/26 - 上線開 0%
實際狀況
• 2019/1/16 - 開 100%
• 2019/1/9 - 開 50%
• 2019/1/2 - 開 10%
• 2018/12/26 - 上線開 0%
• 2018/11/7 - WIP 程式已上線
不同產品的登入⾴控制
• 2019/5/2 - 全產品開啟
• 2019/3/13 - 會員中⼼心開啟
• 2019/1/16 - 104 ⼈人⼒力力銀⾏行行開啟
對開關再做點⼿腳
104 ⼈⼒銀⾏
其他產品
流量控制開關
OFF FOREVER
結果
OFF
從 COOKIE 獲得前⼀次的狀態
使⽤者 開關 前⼀次的結果
COOKIE
設定的優先順序
機器設定 ENV 設定 預設設定
絕對設定 從外載入 執⾏開關
設定檔
設定值
總結
總結⼀下
• 開發上,Feature toggle 是 CD 或 TBD 的⽀支援功能
• 維運上,Feature toggle 是⾦金金絲雀佈署的核⼼心概念念
• 業務上,Feature toggle 是 A/B Testing 或設定功能的核⼼心功能
業配套件
• https://github.com/MilesChou/toggle
• https://github.com/MilesChou/toggle-simplify
參考網站
• https://trunkbaseddevelopment.com/
• https://featureflags.io/

2019/7/27 先別開 Branch 了,你聽過 Feature Toggle 嗎?