Code Monkey home page Code Monkey logo

diablo's Introduction

轻量的分布式配置管理平台Build Status

English wiki

在线Demo: 用户名/密码(admin/admin123).

一些特性

  • 轻量级: 没有复杂的技术和第三方依赖;

  • 可靠存储: 使用Redis作为存储,建议使用Redis ClusterRedis Master-Slave 或者 Redis Proxy Middleware等技术保证存储的可靠性;

  • 对等的Server节点: Server节点的对等性,保证即便某些Server不可用,集群仍能工作;

  • 近似实时更新: diablo使用Http长轮询来保证客户端能及时得到配置更新的通知;

  • 简单的UI: diablo内嵌了一个简单易用的web界面,叫做Diablo Tower;

  • ...

Diablo架构

Quick start

安装

  • 下载最新的压缩包;

  • 或者通过源码构建:

     mvn clean package -DskipTests
     # package located diablo-server/target/diablo-server-{version}.tar.gz
  • 解压缩包:

     tar zxf diablo-server.tar.gz
     ll diabloh
     bin		# the execute scripts
     conf	# conf dir
     lib		# dependency libs
  • 编辑配置文件diablo.conf

     # vim ${DIABLO_HOME}/conf/diablo.conf
     # The server bind address
     BIND_ADDR=127.0.0.1
     
     # The server listening port
     LISTEN_PORT=2143
     
     # The redis host
     REDIS_HOST=127.0.0.1
     
     # The redis port
     REDIS_PORT=6379
     
     # The log path
     LOG_PATH=~/logs/diablo
     
     # The password for Diablo Tower admin
     TOWER_PASS=admin
     
     # The inverval(seconds) for checking server's status
     CHECK_SERVER_INTERVAL=5
     
     # Enable or disable client api auth
     # client must config the appKey, if CLIENT_AUTH=true
     CLIENT_AUTH=true
     
     # Java Heap options
     JAVA_HEAP_OPTS="-Xms512m -Xmx512m"
  • 启动或停止diablo server:

     ${DIABLO_HOME}/bin/diablo.sh start
     ${DIABLO_HOME}/bin/diablo.sh stop
     ${DIABLO_HOME}/bin/diablo.sh restart

使用 Diablo Tower

  • 启动diablo server后,便可通过Http访问diablo tower(如http://127.0.0.1:2143);

  • 事先准备应用配置项

    • 编辑应用:

      app_edit_en.png

    • 编辑配置项:

      config_edit_en.png

集成diablo client到应用中

  • 以下针对Java客户端,其他客户端可参考该规范

  • SimpleDiabloClient(编程模式):

    • 添加maven依赖:

       <dependency>
           <groupId>me.hao0</groupId>
           <artifactId>diablo-client</artifactId>
           <version>1.2.3</version>
       </dependency>
    • 代码样例:

       SimpleDiabloClient client = new SimpleDiabloClient();
      client.setAppName("myapp");
      client.setAppKey("123456");
      client.setServers("127.0.0.1:2143,127.0.0.1:2144");
      // 可添加配置监听
      client.addListener(new ConfigListener<String>() {
           @Override
           public String name() {
               // 配置项名称
               return "test_config1";
           }
      
           @Override
           public void onUpdate(String newValue) {
               // 该方法会在本地配置更新后触发
               System.out.println("test_config1 has updated to " + newValue);
           }
       });
      client.start();
      
      // 获取配置项最新的值
      String testConfig = client.get("test_config");
      
      // 获取配置项最新的json对象
      MyClass myClass = client.get("test_json", MyClass.class);
      
      client.shutdown();
    • 具体见测试用例.

  • SpringDiabloClient(Spring注入模式):

    • 添加maven依赖:

       <dependency>
           <groupId>me.hao0</groupId>
           <artifactId>diablo-client-spring</artifactId>
           <version>1.2.2</version>
       </dependency>
    • 配置片段:

       <bean class="me.hao0.diablo.client.SpringDiabloClient">
       	<property name="appName" value="myapp" />
       	<property name="appKey" value="123456" />
       	<property name="servers" value="127.0.0.1:2143,127.0.0.1:2144" />
       	<!-- 可选配置 -->
       	<property name="listeners">
       		<list>
       			<ref bean="activityNoListener" />
       			<ref bean="timeInfoListener" />
       			<ref bean="timeInfosListener" />
       			<ref bean="timeInfoMapListener" />
       		</list>
       	</property>
       </bean>
       
       <!-- 可配置一些监听器,会在本地配置更新后触发 -->
       <bean id="activityNoListener" class="me.hao0.diablo.client.listener.ActivityNoListener" />
       <bean id="timeInfoListener" class="me.hao0.diablo.client.listener.TimeInfoListener" />
       <bean id="timeInfosListener" class="me.hao0.diablo.client.listener.TimeInfosListener" />
       <bean id="timeInfoMapListener" class="me.hao0.diablo.client.listener.TimeInfoMapListener" />
    • 添加diablo配置Beanspring上下文中, 如:

       @Component
       public class MyAppConfig implements DiabloConfig {
       
       	// 支持基本类型转换 
           private String activityNo;
           private Integer activityChannel;
           private Boolean activityStart;
           private Float activityRatio;
           private Long activityCount;
           private Double activityFee;
        
           // 支持普通json对象转换
           private TimeInfo timeInfo;
       
           // 支持一级List对象转换
           private List<TimeInfo> timeInfos;
       
           // 支持一级Map对象转换
           private Map<String, TimeInfo> timeInfoMap;
       	
       	// getters and setters
       }
    • 具体见测试用例.

  • 这样一旦你通过Diablo Tower修改了对应配置项时,客户端将收到通知。

有事请烧钱

  • 支付宝:

  • 微信:

diablo's People

Contributors

ihaolin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

diablo's Issues

是否可增加只读的查看权限?

试用了下非常简单轻便,就是我想要的那种配置服务。
是否可以增加只读权限?
生产环境只有管理员可以修改配置,其它人最多只能查看。

适当减少diablo-client的外部依赖,保持client的轻量

目前diablo-client依赖了8个jar的相关库。
diablo-common-1.1.1.jar
common-1.1.2.jar
http-request-6.0.jar
jackson-databind-2.4.2.jar
jackson-annotations-2.4.0.jar
jackson-core-2.4.2.jar
guava-19.0.jar
slf4j-api-1.7.21.jar
虽然部分库很多程序都可能用到,如slf4j。但是否可以考虑减少diablo-client的相关依赖,保持client的引用体积,这样就更完美了,呵呵

是否可以有一个配置变更的回调

比如线上数据库配置变更后,如果有一个回调通知,这样客户端就可以自动销毁掉原有的数据库链接,重新创建新的链接池,从而避免了应用的重启。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.