高效能配置管理中心 duic

kevinz發表於2018-04-13
 ______              _    ______
|_   _ `.           (_) .` ___  |
  | | `.  __   _   __ / .`   \_|
  | |  | |[  | | | [  || |
 _| |_.` / | \_/ |, | | `.___.`
|______.`  `.__.`_/[___]`.____ .`

duic 配置中心

在軟體開發中隨著業務的需要, 需求的變更, 程式的靈活我們時常需要在專案中設定各種開關或者配置項. 在往常時一般會採用配置檔案的方式, 但是在這分散式叢集時代採用傳統的配置管理方式顯得有點力不從心. 同時在我們的 app/web 終端我們也時常需要各種配置, 在面對大量的終端配置獲取請求我們的配置中心需要高效能, 高穩定性.

duic 的誕生並不僅僅只是為了解決伺服器應用的配置

簡介

duic 是採用 spring-webflux 開發, 通過 RESTful 方式拉取配置, 支援配置合併, 內建 web 控制檯修改配置, 支援配置使用者許可權設定, 支援配置訪問 IP 限制, 支援 token 限制, 支援多應用多環境變數, 支援 docker, 支援叢集

特性

  • 集中配置管理, 多應用多環境配置
    在 web 控制檯中你可以建立多個配置, 相同應用不同環境的配置可以使用(profile)區分, 同一個應用下多個(profile)配置可以合併 https://duic.zhudy.io/index.html
  • 配置資料型別/資料格式
    duic 採用 yaml 檔案格式管理配置, 天生支援資料型別及資料格式
  • HTTP 方式拉取配置
    duic 採用 HTTP 的方式拉取配置, 所以你可以在任何應用中使用 duic 配置管理
  • 配置狀態檢查
    支援配置狀態檢查, 如果配置發生變動該狀態也會相應變化, 使用方可根據狀態的變化過載配置
    GET {base_uri}/apps/states/{name}/{profile}
  • 多配置合併
    相同應用(name)下的多個配置(profile)可以合併配置, 相同 key 的配置將以深度合併的方式返回
  • 按需取獲取配置
    你有時可能需要獲取某個 key 的配置而不是整個 profile 的配置
    GET {base_uri}/apps/{name}/{profile}/{key}
    key 支援按 . 分隔, 父 key 可以獲取子項的所有配置

    獲取 k1 項的配置

    request
    $ curl https://duic.zhudy.io/api/v1/apps/sample/first/k1
    response

    {
        "string":"samples first k1 string",
        "int":11,
        "array":[
            1,
            2,
            3
        ],
        "multiple_lines":"sample
    first
    multiple
    lines"
    }

    獲取 k1.string 項的配置

    request
    $ curl https://duic.zhudy.io/api/v1/apps/sample/first/k1.string
    response

    {
        "value":"samples first k1 string"
    }
  • 完美支援 spring-boot
    duic 不僅可以管理你的業務配置, 同時還可以管理 spring-boot 自身的任何配置, 你可以像在 application.yaml 檔案中編輯配置一樣的編輯它, 同時我們還提供了 duic-spring-cloud-config-client, 該庫支援 @ConfigurationProperties @Value 註解, 同時還支援配置熱載入
  • 配置許可權管理
    支援配置許可權管理, 使用者只可以修改自身擁有許可權的配置
  • 配置支援 IP 訪問限制
    每個 profile 的配置都可以設定 IP 訪問控制, 不在訪問限制內的 IP 將無法獲取配置資訊
  • 配置支援 TOKEN 校驗
    訪問有 TOKEN 校驗的配置必須在請求中帶上 TOKEN, TOKEN 校驗失敗將無法獲取配置資訊
  • 支援 docker 部署
    https://hub.docker.com/r/zhud…
  • 部署簡單
    duic 部署只依賴於 mongodb, 叢集部署也只需要直接啟動多個例項即可, 不需要其它任何中介軟體或者服務
  • 高效能
    duic 是採用 spring-webflux 開發, 能最大化利用機器的硬體資源, 同時 duic 是直接將所有可用的配置直接載入在記憶體中, 在拉取配置時 直接從記憶體中返回配置資訊, 對於資料庫沒有任何壓力

資源

部署

服務配置 application.yml

server:
  port: 7777

spring:
  jackson:
    default_property_inclusion: non_default
    date_format: yyyy-MM-dd`T`HH:mm:ss
    joda_date_time_format: yyyy-MM-dd`T`HH:mm:ss
    property_naming_strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/duic

duic:
  root_email: kevinz@weghst.com
  root_password: 123456
  jwt:
    secret: U2FsdGVkX1/jO0KlWumac4yDM8rOgWPkaV0KrSHDynWOP6n8FMJB9uSc8EW/qM+VagrMBAXGpyw=
    expires_in: 180
  1. 應用服務埠
  2. MongoDB 連線地址
  3. 預設使用者登入郵箱
  4. 預設使用者登入密碼
  5. JWT HMAC256 簽名字串
  6. JWT 過期時間(單位:分鐘)

docker-compose 部署

在 docker-compose 配置中已經整合 mongodb, nginx, let’s encrypt, docker-gen 服務發現

啟動步驟

  1. git clone
    $ git clone https://github.com/zhudyos/duic-docker-compose.git
  2. 進入資料夾
    cd duic-docker-compose
  3. start.sh 授權
    $ chmod +x start.sh
  4. 啟動
    $ ./start.sh

docker 部署

  • 安裝 MongoDB
  • 服務配置

    1. 建立 **config** 資料夾
    2. 在 **config** 資料夾中建立配置檔案 **application.yml**
    3. **application.yml** 配置檔案將 **spring.data.mongodb.uri** 連線地址修改為安裝服務的 MongoDB 連線地址
  • 啟動容器
    $ docker run -d -p 7777:7777 -v $(pwd)/config:/app/config zhudyos/duic

    application.yml 配置檔案放置在 config 目錄中並掛載到容器的 /app/config 目錄中, duic 則會使用指定的配置


GitHub Source Repository

相關文章