Apollo開源配置中心

Introduction

Apollo(阿波羅)是攜程框架部門研發的配置管理平臺,能夠集中化管理應用不同環境、不同集羣的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性。

服務端基於Spring Boot和Spring Cloud開發,打包後可以直接運行,不需要額外安裝Tomcat等應用容器。

Java客戶端不依賴任何框架,能夠運行於所有Java運行時環境,同時對Spring/Spring Boot環境也有額外支持。

.Net客戶端不依賴任何框架,能夠運行於所有.Net運行時環境。

更多產品介紹參見Apollo配置中心介紹

本地快速部署請參見Quick Start

Features

  • 統一管理不同環境、不同集羣的配置

    • Apollo提供了一個統一界面集中式管理不同環境(environment)、不同集羣(cluster)、不同命名空間(namespace)的配置。
    • 同一份代碼部署在不同的集羣,可以有不同的配置,比如zk的地址等
    • 通過命名空間(namespace)可以很方便的支持多個不同應用共享同一份配置,同時還允許應用對共享的配置進行覆蓋
  • 配置修改實時生效(熱發佈)

    • 用戶在Apollo修改完配置併發布後,客戶端能實時(1秒)接收到最新的配置,並通知到應用程序。
  • 版本發佈管理

    • 所有的配置發佈都有版本概念,從而可以方便的支持配置的回滾。
  • 灰度發佈

    • 支持配置的灰度發佈,比如點了發佈後,只對部分應用實例生效,等觀察一段時間沒問題後再推給所有應用實例。
  • 權限管理、發佈審覈、操作審計

    • 應用和配置的管理都有完善的權限管理機制,對配置的管理還分爲了編輯和發佈兩個環節,從而減少人爲的錯誤。
    • 所有的操作都有審計日誌,可以方便的追蹤問題。
  • 客戶端配置信息監控

    • 可以方便的看到配置在被哪些實例使用
  • 提供Java和.Net原生客戶端

    • 提供了Java和.Net的原生客戶端,方便應用集成
    • 支持Spring Placeholder,Annotation和Spring Boot的ConfigurationProperties,方便應用使用(需要Spring 3.1.1+)
    • 同時提供了Http接口,非Java和.Net應用也可以方便的使用
  • 提供開放平臺API

    • Apollo自身提供了比較完善的統一配置管理界面,支持多環境、多數據中心配置管理、權限、流程治理等特性。
    • 不過Apollo出於通用性考慮,對配置的修改不會做過多限制,只要符合基本的格式就能夠保存。
    • 在我們的調研中發現,對於有些使用方,它們的配置可能會有比較複雜的格式,如xml, json,需要對格式做校驗。
    • 還有一些使用方如DAL,不僅有特定的格式,而且對輸入的值也需要進行校驗後方可保存,如檢查數據庫、用戶名和密碼是否匹配。
    • 對於這類應用,Apollo支持應用方通過開放接口在Apollo進行配置的修改和發佈,並且具備完善的授權和權限控制
  • 部署簡單

    • 配置中心作爲基礎服務,可用性要求非常高,這就要求Apollo對外部依賴儘可能地少
    • 目前唯一的外部依賴是MySQL,所以部署非常簡單,只要安裝好Java和MySQL就可以讓Apollo跑起來
    • Apollo還提供了打包腳本,一鍵就可以生成所有需要的安裝包,並且支持自定義運行時參數
    Java客戶端使用指南 

 use

1.      引入jar

       

<dependency>
         <groupId>com.ctrip.framework.apollo</groupId>
         <artifactId>apollo-client</artifactId>
         <version>0.9.0-SNAPSHOT</version>
      </dependency>

2.      spring配置文件

(1)加入namespace

<?xml version="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:p="http://www.springframework.org/schema/p"

      xmlns:tx="http://www.springframework.org/schema/tx"

      xmlns:context="http://www.springframework.org/schema/context"

      xmlns:aop="http://www.springframework.org/schema/aop"

       xmlns:apollo="http://www.ctrip.com/schema/apollo"

      xsi:schemaLocation="http://www.springframework.org/schema/beans

   http://www.springframework.org/schema/beans/spring-beans-4.1.xsd

   http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.1.xsd

   http://www.springframework.org/schema/tx

   http://www.springframework.org/schema/tx/spring-tx-4.1.xsd

   http://www.springframework.org/schema/context

   http://www.springframework.org/schema/context/spring-context-4.1.xsd

http://www.ctrip.com/schema/apollo http://www.ctrip.com/schema/apollo.xsd">

(2)加入配置:

<apollo:config  namespaces="application"/>

3.取值:

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;

public class ConfigurationUtil {
	
	private static Config appconfig = ConfigService.getAppConfig();
	
	private static Config redisconfig = ConfigService.getConfig("redis");

public static String getRedisPort(){
		return redisconfig.getProperty("spring.redis.port",null);
	}

public static String getResumePdfUrl(){
		return appconfig.getProperty("url",null);
	}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章