前言
后端系統中經常會聽到“某某白名單”的名字,為什么要有白名單呢?使用白名單機制有什么好處? 在大型后端系統中,白名單機制是必不可少的
概念
白名單的概念與“黑名單”相對應。
白名單是設置能通過的用戶,白名單以外的用戶都不能通過。
黑名單是設置不能通過的用戶,黑名單以外的用戶都能通過。
所以一般情況下白名單比黑名單限制的用戶要更多一些。
實際用途
用途一:
黑名單的對立面。這是白名單最明顯的應用場景,例如微信朋友圈禁止抖音、快手等平台的短視頻分享,但是微信、QQ等APP拍攝的小視頻是可以分享的,所以這里有一個“短視頻分享白名單”在起
作用。
用途二:
測試帳號。我們在測試新功能的時候,剛開始不想對所有用戶都生效,可以通過白名單機制限制生效范圍,利用白名單的思想可以對賬號進行分類,只有在白名單中的測試帳號才能體驗新功能,不在
白名單中的賬號則完全無感知。
用途三:
上線控制。舉個例子:A公司的產品有PC、APP、微信、小程序等4個客戶端,現在由於公司業務發展,需要緊急上線某個功能,由於各客戶端的開發任務都很重,只有APP和微信順利完成開發,PC
和小程序要延期上線,這時后端系統顯然不能對所有客戶端渠道都開放新功能,可以通過新增一個該功能的白名單配置,控制上線節奏。示意如下:
X功能上線范圍 = APP,Weixin,有了這個白名單,就可以玩出花樣來:PC、小程序上線,可以修改白名單,增加配置;后端系統發現該功能的一個BUG,該BUG只影響APP,而不影響微信,可以修
改白名單配置,讓APP的功能緊急下線處理,但是微信仍然保留,待BUG解決后再對APP上線。
用途四:
限制范圍。嚴格來說特權賬號、測試帳號和上線控制都是限制范圍的例子,所以說限制范圍其實是最能體現后端系統中白名單機制威力的場景,工程師們可以利用各種白名單機制縮小某個功能的生效
范圍,從而實現系統自我保護。寫到這里的時候,不禁想起剛剛過去沒有多久的拼多多一張測試優惠券跑到線上的嚴重BUG,后端系統一定要通過設置各種限制條件,防止此類悲劇的發生。
實現
白名單如何實現:白名單實現非常簡單,配置文件、數據庫中的表都可以用來實現白名單。白名單一般最終會加載到內存中,通常用set或者map存儲,以方便快速查找。
分類
線上白名單;在線上和灰度測試階段使用
預發白名單:在功能測試和回歸測試階段使用
實戰理解
配置中心
樂高:兩套系統,分線上和預發
zookeeper:兩套系統,分線上和預發
實際使用
總的來說系統分為兩部分,一部分是代碼,一部分是zk配置
需要兩部分都同時是預發或者線上才能正常訪問,但是嚴格來說,預發環境和線上環境從數據源來說是同一套,只是數據庫跟測試環境不同,所以理論上來說,回歸主干時如果給預發環境環境部署上線的代碼並且配置線上的配置,那么預
發機器的效果就跟線上機器是一模一樣的,這個情況也就是下面說的“切線上環境”
預發白名單
我們都知道不同的需求需要不同的環境和配置,為了配合測試只能搞個白名單來配合所有需求
不同的機器雖然部署的代碼可以是不一樣的,但是讀取的配置是同一套,所以在測試不同需求的時候,就需要不同的配置
比如一個修改文案的需求,主干和線上一致,但測試的預發機器是需要不同的,這個時候是根據zookeeper的配置中心來讀取不同的配置來實現的,也就是說如果有跟配置相關的需求在測試的時候都是需要加白名單的
線上白名單
情況一:在灰度機發布,測試灰度的時候使用
情況二:上線之后,如果沒有打開開關或者放量,測試或者業務想要看某個需求也要加白名單
情況三:在回歸主干的時候切線上環境,避免灰度機有問題再審批,但此時讀取的是線上的配置,如果需求有配置的更改,需要改線上的配置,不過要加白名單,這是唯一的風險點
總結
一句話總結:白名單機制是一種簡單易用的技術手段,利用白名單機制方便測試和上線控制,實現各類功能限制,保護系統安全和工程師職業生涯。