華為云數據庫控制臺前端基于開關的特性的交付
背景
華為公有云業務隨著近幾年的發展,越來越復雜。除了華為自己運營的公有云之外,還存在與國內乃至世界的各大運營商合作伙伴合作運營的云模式。因為各種形式的云(局點)獨立運營,不可避免的存在一些功能上的差異。那么,具體到代碼開發上而言,如何通過維護一套代碼就可以滿足這種差異性,成了開發遇到的比較大的挑戰。
華為云的底層基礎設施建設是以區域(Region)為基礎進行的,所以數據庫的后臺服務也是以區域為單位部署的,但是數據庫控制臺前端并不需要直接接觸底層資源,沒有必要做 Region 級部署,否則會造成資源的浪費。因此前端組件采用的是全局(Global)的部署方式,即一個全局的前端組件,對應多個Region級的后臺服務。
隨著業務的擴展,底層建設的Region越來越多,后臺部署的區域也會越來越多。當每個版本發布時,按照通常的前后端分離的發布模式,都是先升級后臺服務,最后升級前端組件。但是Region的增多,勢必會造成升級周期的延長,又因為前端是Global的部署方式,不可以在后臺服務升級完成之前就做升級,只能等到所有的Region都升級完成后才能升級。造成的問題就是新開發的功能對用戶呈現會存在嚴重的滯后,而且Region越多,越嚴重。
為了解決上面的問題,既能夠高效的做到不同形式的云交付差異性,又能夠盡早的讓用戶看到華為云的新功能,華為云數據庫控制臺前端服務先后經歷了三次變革。
階段一:分支交付
不同的局點使用不同的主干分支,每個分支各自維護要交付的局點功能,每個局點的版本交付從對應的分支拉代碼進行開發。各個主干分支生命周期跟局點生命周期一致。這種開發模式,各個局點的功能單獨開發,互不干擾,但是其缺點也比較明顯:
隨著交付局點的增多,分支越來越多,維護成本越來越高;
同一個功能或者問題單,如果需要交付多個局點,代碼需要重復開發,開發效率低下;
不能解決先升級前端控制臺,后升級后臺服務的兼容性問題。
階段二:配置參數交付
在升級工具做升級的時候,每個局點維護一套自己的配置參數,參數控制相應的功能是否在當前局點交付。每個版本的升級參數通過文檔進行維護,并且是增量維護。這種維護方式的缺點:
配置參數繁多,不同局點開關維護成本高,特別是新局點交付,運維需要配置的參數多,出錯概率大;
配置參數通過文檔維護,每個版本維護當前版本的增量開關,其他開關繼承之前版本的配置。久而久之,難以知道各個局點當前現網的配置是什么,造成升級是參數找不到;
需要開關屏蔽或者放開某個功能,需要修改配置參數,做同版本升級才能生效;
不能解決先升級前端控制臺,后升級后臺服務的兼容性問題。
階段三:開關交付
開關交付是在配置參數交付的基礎上,將升級參數中的開關落到后臺數據庫表中。因為后臺數據庫的部署是Region級的,每個Region單獨維護一張特性表,所以可以做到Region級屏蔽,同時滿足不同局點交付不同特性功能的目的。每個版本涉及的開關,通過SQL語句刷到部署包(feature-data包)里面,部署包的部署順序放在API升級之后。開關交付的特點:
配置開關落庫,通過 API 查詢狀態,前端根據接口返回的開關狀態進行特性展示或者屏蔽的控制
修改實時生效,只要在運維平臺把對應的開關狀態做修改即可
feature-data 包升級之前,前端看不到相關的特性;升級之后根據包里面的開關默認值顯示是否顯示
開關的設計分為兩層維度:局點差異及引擎差異。以華為云關系型數據庫RDS為例,除了交付多個局點外,RDS還包含了MySQL、PostgreSQL等不同的數據庫引擎。局點差異通過Region級的表實現,不同局點的Region是相互獨立的,同一局點的Region也是相互獨立的。引擎差異通過在表結構里面設置engine字段區分,每個引擎對應自己的開關。前端根據各個Region查詢的結果以及同一個Region的引擎支持情況,處理頁面上的功能是隱藏還是現實。偽代碼判斷邏輯如下:
if?開關與引擎先關 ??return?當前局點支持?&&?當前引擎支持 else? ??return?當前局點支持
經過三個階段的改造,當前基本可以解決之前遇到的局點特性差異交付,先升級后臺在升級前端的兼容性等問題。
但是隨著業務的發展,一些基于開源數據庫而自研的數據庫版本逐漸增多。這樣,原有的局點及引擎兩層判斷邏輯不再能夠滿足需求。目前的解決方案是新增引擎的某個版本通過特性的方式進行控制。這樣導致的問題就是已有的先關開關,會被入侵式的修改,改動點多,出現問題大概率也會增加。后續可以將開關作為下一層的維度,落到數據表中,通過API查詢。
關系型數據庫 RDS 前端開發
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。