導讀:SpringBoot的時代到來,對於曾經面向一堆XML配置的開發經歷,那真是一大福音,一切都變得很是簡潔,留下的就是簡化的配置文件設置。但在分佈式環境下呢?衆多的實例集羣下,動態的實例遷移等狀況時常發生,致使配置管理的工做變得複雜且困難,百度研發團隊經過多年的架構建設經驗,把過往的配置管理的相關經驗沉澱成一套通用的解決方案,現以開源的方式回饋給社區開發者,但願幫助你們完全解決配置建設的難題。html
全文約4200字,預計閱讀時間8分鐘。前端
能夠說配置化是當今應用開發與部署必備的一個能力要求,咱們一般把一些容易變化以及依賴外部狀況而變化的內容,經過配置化的方式來實現,這樣咱們就能夠在零編碼的狀況下實現功能調整,實現極低成本的應用擴展能力。而對於配置管理方式,最爲常見的方式就是配置文件方式, 經過特定的文件內容格式進行設置, 部署時也會與應用程序放在一塊兒。這樣使用方式在單機狀況下比較容易且簡單,可是在大型的分佈式應用場景下,特別又要區分不一樣環境(開發,測試,線上等)就會致使管理成本與出錯風險急速加大。
以上述場景爲例,涉及的問題與挑戰有:
java
因此針對大型分佈式場景,經過創建配置中心來統一管理配置的能力就顯得很是必要了,把業務開發者從複雜以及繁瑣的配置管理中解脫出來,只需專一於業務代碼自己,從而能夠顯著提高開發以及運維效率。將配置和應用在部署階段解耦也能夠進一步提高發布的效率,下降部署成本。同時配置獨立化管理後,針對配置的安全性、回滾能力、追溯能力、應急控制處理等也會有很強的支撐。
mysql
前面講了在分佈式環境中爲何須要配置中心,那麼一個好的配置中心應該具有哪些優勢呢?
在咱們看來,好的配置中心應該有如下優勢:
git
業務系統使用配置中心應該是很是簡單的:配置中心提供統一的kv管理能力,業務系統從配置中心獲取配置,而後在系統中使用配置。因此咱們認爲,衡量配置中心是否優秀的最關鍵因素就是業務系統使用配置的便捷程度,越方便越是好的配置中心。
使用便捷包括了兩個方面:
github
配置中心最主要的功能是對配置的管理,除了對配置的crud、批量變動、模糊匹配、快速導航以外,一個好的配置中心還須要有如下的配置能力:
redis
配置安全性很是關鍵,例如數據庫的用戶與密碼,一旦泄露風險很是大,因此配置中心的安全性須要很全面的考量。
一是配置存儲、傳輸的安全性,如內容能夠加密;二是操做的權限管控, 必須對使用者進行權限控制,而權限控制的粒度到什麼程度、使用者的操做是否有跡可循、配置變動是否可回滾,都決定着配置中心的好壞。
spring
在不少大型業務場景下,還面臨着衆多產品線同時使用的狀況,產生高併發的請求配置服務的狀況。因此在配置服務的架構設計必須須要考慮到這種因素,實現高吞吐、高時效與高穩定的架構要求。因此總體架構要具有分佈式的架構設計要求,配合彈性的擴展能力與多級的緩存同步機制,才能很好地解決這些問題,達到秒級的推送與變動能力, 提高至4個9999的穩定性要求。
sql
21年2月咱們開源了一款配置中心BRCC (Better Remote Config Center),其主打的產品特性就是簡單、易用、安全。BRCC功能結構圖以下:
數據庫
BRCC提供多種語言的sdk,拿java sdk來講,其特色就是徹底兼容springboot的配置規範,能夠直接使用spring的@Value註解來加載配置,以下代碼:
@Componentpublic class Person { |
對於習慣spring的開發者來講,能夠在application.properties裏面設置 person.username=張三 就能在啓動時將「張三」賦值給persion類的name變量上。而在使用BRCC時,只要把 person.username=張三 保存在BRCC中,引入BRCC starter的依賴就能夠了,在業務代碼上無需改造,對業務系統來講能夠算是0侵入了。
2. 功能完備的服務端
BRCC做爲一種輕量級的分佈式配置管理解決方案,部署簡單,基於spring boot 2.0開發,打包後能夠直接運行,支持配置的分發、更新推送。除了部署簡單外,服務端還有一些特別實用的功能:
總而言之,BRCC是一塊很是優秀的分佈式配置中心解決方案,它徹底兼容原生Spring配置規範,除了提供基本的配置存儲,還提供配置註釋、key-value維度查詢、變動推送、變動軌跡記錄及查詢、細粒度的權限控制、sdk實例管理、友好的UI界面,簡單部署等特色,詳細的功能請參看https://github.com/baidu/brcc。下面咱們來看看如何快速搭建和使用吧!
選擇一個合適的版本, 您能夠在brcc的release notes中找到每一個版本支持的功能的介紹,當前推薦的穩定版本爲1.0.4。
https://github.com/baidu/brcc/releases
爲了方便你們體驗,咱們在百度雲上部署了體驗環境:
在線體驗環境 地址: http://180.76.36.149/#/login 測試帳號1:test1 123456 測試帳號2:test2 123456
https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/
若是您是從代碼開始構建並運行BRCC,還須要爲此配置 Maven環境。
https://maven.apache.org/index.html
請確保是在如下版本環境中安裝使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
64 bit JDK 1.8+;下載 & 配置。
Maven 3.2.x+;下載 & 配置。(僅源碼編譯須要)
mysql5.6+
redis3.2+
64 bit JDK 1.8+ 下載
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
64 bit JDK 1.8+ 配置
https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/
Maven 3.2.x+ 下載
https://maven.apache.org/download.cgi
Maven 3.2.x+ 配置
https://maven.apache.org/settings.html
從 Github 上下載源碼方式
|
下載編譯後壓縮包方式
您能夠從 release notes下載 brcc-server.zip 包。
|
在brcc管理端創產品線、工程、環境、版本、分組、 配置, 以下圖所示。
如上圖,建立了產品線test一、工程test-rcc、版本1.0.0 和分組group1,而且配置了a、b、c 配置項。
|
目前最新的版本是1.0.0。
在接入brcc配置中心以前,確保SpringBoot配置是完整的, 在application.properties文件中添加以下內容。
|
配置屬性介紹
屬性名稱 |
默認值 |
必填 |
描述 |
---|---|---|---|
rcc.cc-server-url | null |
是 |
服務地址 |
rcc.project-name | null |
是 |
工程名稱 |
rcc.cc-password | null |
是 |
工程的api密碼, 建立工程時指定 |
rcc.env-name | null |
是 |
環境名稱 |
rcc.cc-version-name | null |
是 |
版本名稱 |
rcc.log-properties | false |
否 |
是否打印配置 |
rcc.enable-update-callback | false |
否 |
是否啓用自動更新 |
rcc.connection-timeout | 3000 |
否 |
連接超時時間(ms) |
rcc.read-timeout | 10000 |
否 |
讀超時時間 (ms) |
rcc.callback-interval | 2000 |
否 |
心跳探測頻率(ms) |
rcc.app-name |
null |
否 |
實例上報,採集應用名 |
rcc.container-id-env-name |
hostname |
否 |
容器ID對應的環境變量名稱 |
rcc.idc-env-name |
null |
否 |
機房ID對應的環境變量名稱 |
rcc.use-only-site-local-interfaces |
false |
否 |
是否上報IP只讀局域網卡 |
rcc.preferred-networks |
null |
否 |
上報IP來源網卡(如en0)列表,英文逗號分隔 |
rcc.ignored-interfaces |
null |
否 |
上報IP來源忽略網卡列表,英文逗號分隔 |
brcc徹底兼容原生spring配置規範,你能夠像application.yml,application.properties同樣是用brcc中的配置,如:
|
啓動日誌中出現如下日誌說明配置加載成功。
配置發送變動後執行推送變動操做後,日誌中會出現如下提示。
以上例子,你能夠到 https://github.com/baidu/brcc/tree/main/brcc-example 得到。
咱們大部分紅員來自於百度智能小程序研發部的基礎架構團隊,致力於用簡單易用的方式解決配置相關的需求,下降配置的研發和運維成本。
BRCC的願景是爲業務系統提供簡單、好用的配置服務。目前BRCC已經github上開源,你們能夠訪問獲取所有代碼,也能夠star咱們項目,以便高效得到咱們持續的更新信息。
https://github.com/baidu/brcc
本期做者介紹 | 來自於百度智能小程序研發部的基礎架構團隊,致力於用簡單易用的方式的解決配置相關的需求,下降配置的研發和運維成本。
招聘信息:近期熱招大數據研發工程師、服務端研發工程師(C++/GO/Java),Web前端研發工程師,iOS/Android客戶端研發工程師
歡迎關注百度Geek說同名公衆號聯繫咱們~