華為云數據庫控制臺前端基于開關的特性的交付

      網友投稿 955 2022-05-30

      背景

      華為公有云業務隨著近幾年的發展,越來越復雜。除了華為自己運營的公有云之外,還存在與國內乃至世界的各大運營商合作伙伴合作運營的云模式。因為各種形式的云(局點)獨立運營,不可避免的存在一些功能上的差異。那么,具體到代碼開發上而言,如何通過維護一套代碼就可以滿足這種差異性,成了開發遇到的比較大的挑戰。

      華為云的底層基礎設施建設是以區域(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小時內刪除侵權內容。

      上一篇:Redis字符串(STRING)中BIT相關命令
      下一篇:性能測試入門01
      相關文章
      国产偷窥女洗浴在线观看亚洲| 亚洲 欧洲 视频 伦小说| 久久久久亚洲av无码尤物| 亚洲香蕉久久一区二区三区四区| 国产午夜亚洲精品国产成人小说| 国产成人亚洲综合无| 亚洲美女视频一区二区三区| 亚洲综合av永久无码精品一区二区| 亚洲熟妇无码AV| 亚洲精品国产第1页| 久久丫精品国产亚洲av| 一本色道久久综合亚洲精品| 色偷偷噜噜噜亚洲男人| 中文字幕亚洲综合小综合在线| 亚洲欧洲高清有无| 亚洲Av无码精品色午夜| 亚洲男人av香蕉爽爽爽爽| 亚洲欧美日韩中文无线码| 亚洲国产成人手机在线电影bd| 亚洲va中文字幕无码久久| 亚洲va久久久噜噜噜久久狠狠| 久久精品国产亚洲AV麻豆不卡| 亚洲国产精品热久久| 亚洲精品白浆高清久久久久久| 亚洲午夜福利精品久久| 色偷偷亚洲第一综合| 亚洲欧洲免费无码| 国产午夜亚洲精品不卡免下载 | 亚洲一区二区中文| 亚洲色欲或者高潮影院| 亚洲综合色7777情网站777| 亚洲人成网亚洲欧洲无码| 国产偷国产偷亚洲高清人| 精品国产亚洲男女在线线电影| 亚洲精品tv久久久久久久久| 666精品国产精品亚洲| 亚洲av日韩av高潮潮喷无码| 亚洲国产精品综合久久久| 亚洲中文无码永久免费| 日韩亚洲国产综合久久久| 亚洲人成色777777老人头|