從美國 FDA 新藥審批制度看分級發佈最佳實踐

美國FDA新藥審批流程被公認爲世界上最完備,最科學的程序,本文將從這個審批流程出發,類比互聯網公司的分級發佈策略,希望能夠更好的幫助大家理解。

新藥臨牀試驗的”黃金標準“

美國FDA新藥審批流程被公認爲世界上最完備,最科學的程序。目前的標準是從1962年開始實施,被稱爲是新藥臨牀試驗的”黃金標準“。其新藥審批流程整體如下圖所示,在此,我們重點介紹臨牀試驗階段的試驗規模和試驗方法

  • 臨牀一期實驗目標是安全性,允許小範圍的人羣試驗,通常招募20-100個健康的志願者,付錢給他們,讓他們服用該藥物,嚴密監測可能的毒副作用,耗時1年左右。如果毒副作用在可以接受的範圍內,就可以申請二期實驗。

  • 臨牀二期實驗目標是有效性,通常招募100-500個該藥物針對的病人,通過隨機分組雙盲對照試驗(病人被隨機編入實驗組和參照組,前者吃藥,後者吃安慰劑),耗時1-2年。如果藥物對小範圍人羣有效,且毒副作用在可以接受的範圍內,就可以申請三期實驗了。

  • 臨牀三期實驗目標是在全國範圍內證明有效,通常招募1000-5000個該藥物針對的病人,耗時1-4年,通過大樣本,隨機雙盲,多國多地區多中心進行試驗,如果試驗結果比較滿意,公司要向FDA遞交新藥申請NDA。

  • 非嚴格意義的臨牀四期實驗,藥物投放市場之後,讓成千上萬的人使用後,還需要嚴密監測可能的副作用,隨時向FDA報告。

即使如此,仍然有不少人指責FDA審批藥品的速度太快!比如,止疼藥Vioxx和治療糖尿病的新藥Rezulin就曾在上市後不久發現了新問題,被召回。另一方面,那些身患絕症的病人又在抱怨FDA速度太慢,貽誤時機。不少人實在等不及了,便四處打聽,要求加入三期臨牀試驗,充當志願者。

互聯網公司的分級發佈策略

藍綠部署

發佈新版本的時候,創建一套新的集羣部署新版本,然後逐漸將流量從舊版本切到新版本的集羣上,如果新版本有異常,則迅速切回到舊版本。待新版本穩定後,銷燬舊版本的集羣即可。

金絲雀部署

金絲雀部署和藍綠部署有點像,但升級的策略改爲階段性的進行,而非一次性從藍色版本切換到綠色版本,從而降低風險。

對照組

基於金絲雀部署的前提下,還可以增加對照組,如下圖示,當進行V2.0版本升級時,創建Canary分組,並且創建了一個同等機器規模的Baseline分組(使用V1.0),此時,兩者集羣規模一致,僅版本不同,可以更好的對比新舊版本的效果。如果沒有對照組的話,Canary分組的一些業務指標直接和Production分區的業務指標進行比對,可能會引入較多的噪音,導致比對困難。

Fackbook的發佈策略

Fackbook發佈策略的亮點在於對小流量用戶的選擇,從下圖可以看到,新版本發佈後,部署的集羣僅對Facebook員工可見,只有在通過了內部員工驗證後,纔會開始對外部用戶進行小流量

應用商店的灰度分佈策略

APP Store 分階段發佈策略

APP Store的分階段發佈策略主要內容是,新版本更新在 7 天內按百分比發佈給已打開自動更新的 macOS 或 iOS 用戶(根據用戶的 Apple ID 隨機挑選)。同時,所有下載了 App 的用戶可隨時在 App Store 中手動更新新版App。如果發現新版本存在問題,可以隨時暫停分階段發佈,分階段發佈累計最多可暫停30天,暫停次數不限。

筆者猜測該策略下存在的問題(因條件有限,未能一一證實):

  • 灰度僅僅針對老用戶而言,新用戶下載默認都是新版

  • 根據用戶的Apple ID隨機挑選,而不能針對硬件類型(IPAD還是Iphone),設備類型(Iphone11還是Iphone8),系統版本,軟件版本,自定義用戶標籤(付費用戶)等

  • 灰度發佈的版本一旦出現問題是無法回滾的,在修復版開發完成重新發布審覈上架之前,已經更新的用戶只能繼續使用bug版本,或者是將舊版本的程序以新版本號進行發佈

Google Play Store 分階段發佈策略

Google Play Store 的分階段發佈策略(staged rollout)給用戶的靈活性較大,默認策略如下圖所示,但用戶可以對分階段發佈策略進行修改,從而滿足自己的需求。

效果檢查

只有灰度而沒有效果檢查,這樣就無法發現灰度下的異常,那麼只能是不斷增加各個階段的時間間隔來被動等用戶反饋問題,長時間下去,必然會導致研發人員對發佈效率的不滿。因此,需要建立並逐步完善效果檢查機制,下圖是服務端和客戶端兩類場景下的效果檢查的截圖,供大家參考。

效果檢查需要和灰度發佈聯動起來,在一次灰度發佈完畢後,如果效果檢查通過,且停滯時間也達到要求,那麼就可以自動化的進行下一階段的發佈工作。反之,如果效果檢查不通過,則應該立即終止發佈過程並回滾版本,從而避免較大的業務影響。

全網客戶端分級發佈實戰

樣本選取

  • 硬件:選取所有規模超過1000臺的機型

  • 操作系統:選取所有規模超過1000臺的操作系統版本

  • 內核:選取所有規模超過1000臺的內核版本

  • 備機池:選取備機池所有的機器

  • IDC:覆蓋所有IDC機房

  • 業務:覆蓋所有核心業務線

  • 基礎設施:覆蓋所有基礎設施

發佈階段

第一階段:備機池,備機池的機器常態下處於空閒狀態,僅部署離線計算任務。樣本豐富度上雖然不盡如人意,但因爲規模較大,且對線上完全無損,因此非常適合作爲敢死隊角色。從實際效果上看,在該階段,我們攔截了大量的異常,從而避免線上遭受損失

第二階段:測試機,之所以選取測試機集羣,是因爲整個公司的測試機規模很大,更爲重要的是測試機部署了線上絕大部分應用場景,在樣本的豐富度上幾乎等同於線上環境了。且測試機的故障,相較於線上故障來說,嚴重程度會低一些

第三階段:樣本補齊,對於備機池和測試機無法覆蓋的樣本,則需要從線上隨機抽樣進行覆蓋,確保樣本的覆蓋度達到要求,在實際抽樣的時候,會盡量選取非核心業務的機器。樣本選取的數量應該佔總體數量的0.5%到1%爲宜

第四階段:自運維集羣升級,在確保程序能穩定運行在各類樣本後,就開始正式的升級流程了,首先需要將自身的集羣進行升級,從而能夠在第一時間發現可能存在的問題

第五階段:分地域升級,需要遵循以下原則:

  • 按照地域進行升級,華南----華中----華北

  • 同一地域內,按照故障域逐個升級,假設AZ1+AZ2是一個故障域,AZ3+AZ4是一個故障域,則必須是升級完畢一個故障域的所有AZ後,才能升級另外一個故障域

  • 同一地域內,按機房建設順序,新機房先升級,老機房後升級

發佈速度

發佈的過程中有如下要求:

  • 非工作日不進行升級

  • 每階段均從工作日的上午開始發佈

  • 所有階段執行統一的發佈速度,不進行特殊處理,避免併發度錯誤而導致故障

  • 併發度爲串行升級,整體耗時控制在兩週內完成

  • 第一次發佈,整體耗時不低於一個月時間

異常聯動

一旦發現升級效果不符合預期,則系統會自動終止升級操作,並視情況決定是否自動回滾。如果硬性指標如機器存活數量出現波動,則會暫停升級,等待人工介入處理。

參考文章

部署策略對比:藍綠部署、金絲雀發佈及其他

CanaryRelease

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章