灰度發佈是近兩年互聯網產品必備的一個基礎能力,在新功能發佈時,只對一小部分用戶開放,經過採集、分析用戶的數據與反饋,逐步擴大範圍,直至向全部用戶開放。前端
灰度發佈能使咱們及早得到用戶的意見反饋,完善產品功能,提高產品質量,讓用戶參與到產品的體驗測試中,增強用戶互動,下降產品升級所影響的用戶範圍。程序員
E融匯是中國銀行一款外匯貴金屬期權原油投資APP,其功能繁多,對價格和交易敏感,每次新功能發佈都當心翼翼、心驚膽戰,稍有問題,即會影響所有用戶,輕則體驗較差,重則帶來資金損失。所以,E融匯於去年開始了灰度發佈之路。測試
最初爲達到灰度測試的效果,在後臺功能投產後,前端APP先不上架,由項目組人員安裝新版本APP到手機上,進行功能驗證。因爲安裝繁瑣,灰度測試包流通範圍不易控制,iOS的ipa安裝包沒法直接安裝等條件限制,灰度測試人員僅限於項目組同事,線上不少場景沒法覆蓋(如期權交易要求帳戶上必須有外幣存款等)。cdn
後來,DevOps條線同事開發出移動產品持續交付平臺,提升了APP產品的持續交付能力。藉助該平臺,項目組提交代碼便可生成灰度測試包,你們只需掃描二維碼便可直接安裝到手機上。安裝難度下降後,即可把總分行業務部門的相關同事都加入到灰度測試的範圍當中,大大增強了場景的覆蓋度,可達到全功能的覆蓋。配合着灰度白名單的控制,能嚴格控制灰度測試包的流通範圍和下載次數,方便管理。ip
雖然有了持續交付平臺,可是對於已經發布的版本,功能仍是對全部用戶開放,若是某個監管規定要求緊急調整某項規則(對銀行軟件來講很常見),沒法即時關閉或下架原有功能,只能緊急發佈新版本,並強制用戶更新,對用戶來講是不可接收的體驗。iOS版本從提交審覈到發佈至少須要2天時間,期間只能祈禱審覈不要被拒絕。開發
爲了知足以上需求,咱們在E融匯APP中,給每一個功能編號,並在後臺給每一個功能配上開關標識。用戶在打開APP時,只能看到開放的功能,關閉的功能沒法看到,即便經過某個連接或者某個廣告位跳轉相當閉的功能,也會提示用戶「該功能升級中,敬請期待」等字樣。產品
有了功能開關以後,灰度發佈就簡單了。每次新功能發佈時,只針對特定白名單內的用戶打開該功能。同是線上同一版本,不一樣的用戶看到的是不一樣的功能,初步實現了灰度發佈功能。hash
基於開關功能,將來能夠實現不少灰度發佈策略。如it
基於用戶標識的灰度發佈策略:hash(userid) % 1000 <= n,則開放功能。設置不一樣的n值,能夠控制新功能的流量,初期能夠開放千分之一的流量,逐步擴大,直至所有io
基於地域的灰度發佈策略:設置某個功能針對某些地域的用戶開放,如上海分行的特點功能,只開放給上海的用戶
能夠制定更加複雜的規則引擎,實現更復雜的策略
A/B測試是灰度發佈的一個重要方式,咱們也會積極嘗試,敬請期待~
若是各位有好的想法,歡迎關注個人公衆號(程序員順仔)留言討論~