跳到內容

鎖定對象

預設情況下,一個環境會提供每台裝置 flag 的預設值。鎖定對象就是把別的東西提供給某些裝置的方法:測試版使用者、某個特定的應用程式版本、所有人的 10%。這一頁解釋這部機器;發布指南則帶你實際使用它。

規則檢驗的是標籤:關於發出請求的裝置的小型鍵/值事實。SDK 會自動送出幾個內建標籤(appVersion、appBuild、osVersion、platform、sdkVersion),你的應用程式也可以加上自己的,例如 cohort: "beta"。

關於標籤,有兩件事值得早點知道:

  • 標籤評估完就丟掉。FortressFlag 用它們回答它們隨附的那一個請求,然後就丟棄:它們永遠不會被儲存,也永遠不會被記錄。任何地方都沒有標籤歷史,這是設計如此。
  • 標籤是你的應用程式的主張。標籤可以帶著你的程式碼放進去的任何東西,所以別把機密或你的使用者的個人資料放進標籤值。讓它們只承載分群、版本和設定。

規則:一份有順序的清單,第一個命中就生效

Section titled “規則:一份有順序的清單,第一個命中就生效”

每個 flag + 環境都有一份有順序的規則清單。一條規則是一組以 AND 相連的條件(cohort 是 beta AND appVersion ≥ 2.0),加上命中時要提供的值。

評估方式很簡單,值得記在心裡:

  1. 規則由上而下逐一檢查。
  2. 第一條所有條件都成立的規則決定值。它底下的規則一概不看:順序就是意義,你可以在儀表板重新排列規則。
  3. 裝置沒有送出的標籤,其條件不成立。沒有標籤就沒有命中:這條規則會被跳過,絕不會是錯誤。
  4. 如果沒有任何規則命中,就提供 flag 的預設值。

沒有條件的規則永遠命中,這就是你放在清單最底下的「其他所有人」形狀。

條件可以比較版本:appVersion ≥ 2.0。版本以點號切開,由左到右按數值比較,缺少的部分視為零,所以 2.0 等於 2.0.0,而 2.10 比 2.9 新。無法解析成點號分隔數字的裝置版本(例如 2.0-beta)只會讓條件不成立。不支援預先發布的後綴,請比較純粹的點號版本。

區隔:一段你命名並重複使用的規則

Section titled “區隔:一段你命名並重複使用的規則”

區隔是一份有名字、以 AND 相連的條件清單(beta-testers、internal-devices),你為整個組織定義一次,然後在跨 flag、跨環境的規則裡引用。編輯區隔,每一條使用它的規則都會跟著變。

正是這樣的影響範圍,讓編輯區隔需要正式環境等級的權限:一個被正式環境規則引用的區隔,一旦變更,正式環境就跟著變,不管是誰儲存的。

任何規則都可以帶一個發布百分比:它不再命中每一台通過條件的裝置,而只命中其中前 N%。「測試版使用者的 10%」就是這樣運作的:先看條件,再過百分比這道閘門。

三個特性讓發布可以放心依賴:

  • 固定。一台裝置是否落在百分比之內,是從裝置的身分和 flag 的鍵算出來的:同一台裝置在每一次請求都得到同樣的答案。沒有人會在發布裡忽進忽出,而且把 10% 提高到 20% 時,原本的 10% 仍在裡面。
  • 依 flag 各自計算。計算時混入了 flag 的鍵,所以一個 flag 上的 10% 發布和另一個 flag 上的 10% 發布,抓到的是你裝置群裡不同的十分之一。不會有一群永遠倒楣的 10% 裝置一次吃到所有實驗。
  • 什麼都不儲存。分群歸屬純粹是算術,每次請求重新計算:FortressFlag 不保留任何哪些裝置在哪個發布裡的紀錄。沒有東西可洩漏,也沒有東西要清理。

寬裕到你通常碰不到,固定到酬載大小有界:每個 flag 每個環境最多 20 條規則,每條規則 5 個條件(一個區隔引用算一個,區隔本身最多可以有 10 個條件),標籤鍵最長 64 個字元,條件值最長 256 個。