前言

配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一。试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公司就是……)。

配置中心主要有以下特点:

  • 配置动态化
  • 管理集中化

修改配置不需要重新发布配置文件,而且可以复用,同一个的配置只需要修改一次,省时省力。通过后台统一管理,修改、查看,部分产品还支持配置版本管理。

Why Apollo

  • 国产
  • 开源
  • 功能强大

首先是支持国产,同时在遇到问题也可以良好的和国人交流沟通。其次功能很全,满足公司的所有需要,不需要二次开发。

优势

阿波罗的功能非常强大,几乎满足一般的分布式系统的使用要求,重点主要如下:

  • 配置多维度

    • application (应用)
    • environment (环境)
    • cluster (集群)
    • namespace (命名空间)
  • 版本发布管理
    • 历史查看
    • 版本回滚
  • 后台权限管理
    • 发布审核
    • 操作审计
  • 更新机制
  • 客户端监控
    • 客户端实例查看
    • 配置实用实例查看

缺点

强大的功能,必然伴随少许缺点:

  • 一定的学习成本
  • 部署繁杂

官方文档说明部署简单,我认为不然,依赖jdk1.8,(我试了1.9部署Quick Start版本失败了),mysql,脚本需要自己导入,在windows平台还需要gitbash。

总的来说利大于弊,还是值得去使用的。

准备

部署

注意jdk的环境变量配置

导入脚本

在刚下载apollo-build-scripts里sql目录下的两个脚本导入到mysql里

apolloconfigdb.sql

apolloportaldb

修改项目数据库配置

编辑demo.sh,在apollo-build-scripts文件夹找到下面的配置项,修改为对应的数据库信息

# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=123456789 # apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=123456789

启动

启动

切换到刚下载的apollo-build-scripts目录下。 注意是git方式的执行,跟cmd不一样的

/c/apollo-build-scripts-master/demo.sh start

 
==== starting service ====
Service logging file is ./service/apollo-service.log
Started [10768]
Waiting for config service startup.......
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup....
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Started [10846]
Waiting for portal startup......
Portal started. You can visit http://localhost:8070 now!

如果控制台输出以上为启动成功

初体验

输入浏览器输入http://localhost:8070

账号:apollo

密码:admin

可以见到默认的有一个Sample App项目,点进去,就可以见到下图

.net客户端使用

1.1 必选设置

Apollo客户端依赖于AppIdEnvironment等环境信息来工作,所以请确保阅读下面的说明并且做正确的配置:

1.1.1 AppId

AppId是应用的身份信息,是从服务端获取配置的一个重要信息。

请确保在app.config或web.config有AppID的配置,其中内容形如:

<?xml version="1.0"?>
<configuration>
<appSettings>
<!-- Change to the actual app id -->
<add key="AppID" value="SampleApp"/>
</appSettings> </configuration>

注:app.id是用来标识应用身份的唯一id,格式为string。

1.1.2 Environment

Apollo支持应用在不同的环境有不同的配置,所以Environment是另一个从服务器获取配置的重要信息。

Environment通过配置文件来指定,文件位置为C:\opt\settings\server.properties,文件内容形如:

env=DEV

目前,env支持以下几个值(大小写不敏感):

  • DEV

    • Development environment
  • FAT
    • Feature Acceptance Test environment
  • UAT
    • User Acceptance Test environment
  • PRO
    • Production environment

1.1.3 服务地址

Apollo客户端针对不同的环境会从不同的服务器获取配置,所以请确保在app.config或web.config正确配置了服务器地址(Apollo.{ENV}.Meta),其中内容形如:

<?xml version="1.0"?>
<configuration>
<appSettings>
<!-- Change to the actual app id -->
<add key="AppID" value="SampleApp"/>
<!-- Should change the apollo config service url for each environment -->
<add key="Apollo.DEV.Meta" value="http://localhost:8080"/>
<add key="Apollo.FAT.Meta" value="http://localhost:8080"/>
<add key="Apollo.UAT.Meta" value="http://localhost:8080"/>
<add key="Apollo.PRO.Meta" value="http://localhost:8080"/>
</appSettings>
</configuration>

1.1.4 本地缓存路径

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本地缓存路径位于C:\opt\data\{appId}\config-cache,所以请确保C:\opt\data\目录存在,且应用有读写权限。

1.1.5 可选设置

Cluster(集群)

Apollo支持配置按照集群划分,也就是说对于一个appId和一个环境,对不同的集群可以有不同的配置。

如果需要使用这个功能,你可以通过以下方式来指定运行时的集群:

  1. 通过App Config

    • 我们可以在App.config文件中设置Apollo.Cluster来指定运行时集群(注意大小写)
    • 例如,下面的截图配置指定了运行时的集群为SomeCluster
  2. 通过配置文件

  3. 首先确保C:\opt\settings\server.properties在目标机器上存在
  4. 在这个文件中,可以设置数据中心集群,如idc=xxx
  5. 注意key为全小写

Cluster Precedence(集群顺序)

  1. 如果Apollo.Clusteridc同时指定:

    • 我们会首先尝试从Apollo.Cluster指定的集群加载配置
    • 如果没找到任何配置,会尝试从idc指定的集群加载配置
    • 如果还是没找到,会从默认的集群(default)加载
  2. 如果只指定了Apollo.Cluster

    • 我们会首先尝试从Apollo.Cluster指定的集群加载配置
    • 如果没找到,会从默认的集群(default)加载
  3. 如果只指定了idc

    • 我们会首先尝试从idc指定的集群加载配置
    • 如果没找到,会从默认的集群(default)加载
  4. 如果Apollo.Clusteridc都没有指定:

    • 我们会从默认的集群(default)加载配置

启动控制台程序

修改配置并发布

此时返回控制台程序查看

这个时候我们通过监听程序监听到配置在后台被修改了,同时能获取到最新配置值

配置更新的推拉机制

从上图看到,阿波罗配置更新具备推和拉两种方式,在后台修改并发布后,会及时将配置推给客户端,假如没推成功,客户端会通过后台线程定时更新。

如果客户端与服务端发生了网络分区,此时可以通过客户端获取本地文件缓存的配置数据,让系统正常运作。

缓存数据默认存储在C:\opt\data

从以上来看,阿波罗在可用性设计上还是很不错的。

结束

客户端  demo下载

只展示了.net环境使用  其他语言  扩展 https://github.com/ctripcorp/apollo

windows部署Apollo的更多相关文章

  1. Win10上部署Apollo配置中心

    基于Docker在Win10上部署Apollo配置中心 https://www.jianshu.com/p/a1215056ce75 http://nobodyiam.com/2016/07/09/i ...

  2. Visual Studio GitHub For Windows部署

    使用GitHub For Windows部署Visual Studio项目 因为最近同时再看很多技术方面的书,书上的例子有很多自己想亲自尝试一下,但是每次写例子都得创建一个新项目未免太麻烦,索性就整理 ...

  3. Docker部署Apollo配置中心

    1.Apollot简述 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于 ...

  4. windows部署服务(WDS)

     1.服务器端os:windows server2003R2,windows server 2008,windows server 2008 R2 文件系统:NTFS 必须需要AD架构 网络中需要微软 ...

  5. spring cloud 集成分布式配置中心 apollo(单机部署apollo)

    一.什么是apollo? Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...

  6. docker-compose 部署 Apollo 自定义环境

    Apollo 配置中心是什么: ​ Apollo是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. ...

  7. 流媒体 Ubuntu部署srs、windows部署nginx

    一.获取项目//码云克隆git clone https://gitee.com/winlinvip/srs.oschina.git srs//githubgit clone https://githu ...

  8. 一、Windows部署RabbitMQ

    RabbitMQ官方网站非常详细,以下只是本人学习过程的整理 一.Windows部署RabbitMQ:https://www.cnblogs.com/yangleiyu/p/15539618.html ...

  9. 基于winserver部署Apollo初次体验(附.net客户端demo)

    前言 配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一.试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公 ...

随机推荐

  1. wpf编写一个简单的PDF转换的程序

    wpf 调用Spire.Pdf将PDF文件转换为其他文件模式 首先在Nuget里下载该第三方包Spire.Pdf. 然后可以编写程序 //这里我调用的是解析成流模式,这是因为我要使用ProgressB ...

  2. 原型模式-Prototype(Java实现)

    原型模式-Prototype 通过复制(克隆.拷贝)一个指定类型的对象来创建更多同类型的对象. 就像去蛋糕店买蛋糕一样. 柜台里的蛋糕都是非卖品. 只是为顾客提供一种参照. 当顾客看上某一个样式的蛋糕 ...

  3. luogu P5324 [BJOI2019]删数

    传送门 不如先考虑暴力,能删的序列首先有\(1,2,3...n\),还有就是升序排序后从后往前放数,第\(i\)位要么放\(i\),要么放\(i+1\)位置的数,例如\(1,2,4,4,5,6,9,9 ...

  4. Selenium-ActionChainsApi--鼠标连贯操作

    ActionChains UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的元素才会出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,Selenium给我们提供了Ac ...

  5. 解决select下拉框禁用(设置disabled属性),后台获取值为空

    如果下拉框设置disabled属性后,提交表单到后台,后台获取的下拉框的值为空,以下有三种解决获取不到下拉框选项值的方法. 有下拉框html如:<select name="select ...

  6. RabbitMQ资料

    安装以及网页插件: https://www.cnblogs.com/longlongogo/p/6489574.html Exchange详解: https://www.cnblogs.com/jul ...

  7. C. Neko does Maths(数论 二进制枚举因数)

     题目链接:https://codeforces.com/contest/1152/problem/C 题目大意:给你a和b,然后让你找到一个k,使得a+k和b+k的lcm. 学习网址:https:/ ...

  8. 贯穿RobotFramework框架 - 关键字(一) 最全面的疏理

    在RF中,关键字是一个非常重要的存在.想做任何事情,都是通过关键字来实现的. 这篇文章对RobotFramework中的关键字做个整理.大概分为以下几点内容: 1.什么是关键字 2.关键字来自哪里.有 ...

  9. dubbo直连提供者 & 只订阅 & 只注册

    1.    dubbo直连提供者 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点 ...

  10. 关于Java中构造方法的问题以及回答

    构造方法 概念: 又叫 构造器,区分于传统的方法,是一个在创建对象时被系统自动调用的特殊方法 作用: 一:为对象进行初始化(成员变量)的工作 二:为对象在堆内存中开辟独立的内存空间 定义格式: 访问修 ...