前言

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

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

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

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

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 config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password= # apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=

启动

打开cmd,切换到刚下载的apollo-build-scripts目录下。

cd C:\Users\chengong\source\repos\apollo-build-scripts

demo.sh start
==== starting service ====
Service logging file is ./service/apollo-service.log
Started []
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 []
Waiting for portal startup......
Portal started. You can visit http://localhost:8070 now!

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

初体验

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

账号:apollo

密码:admin

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

.net客户端

创建一个控制台项目,下载apollo.net包

nuget install apollo.net
static void Main(string[] args)
{
Config config = ConfigService.GetAppConfig();
config.ConfigChanged += OnChanged; while (true)
{
Thread.Sleep();
var timeout = config.GetProperty("timeout", "");
Console.WriteLine(timeout);
}
} private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent)
{
Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace);
foreach (string key in changeEvent.ChangedKeys)
{
ConfigChange change = changeEvent.GetChange(key);
Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType);
}
}

另外在app.config填写以下变量

 <!-- 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"/>

启动控制台程序

修改配置并发布

此时返回控制台程序查看

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

配置更新的推拉机制

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

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

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

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

结束

最近公司在选型配置中心,因此在玩阿波罗的时候同时记录其过程。

客户端demo:https://github.com/SkyChenSky/Apollo.Demo

基于winserver部署Apollo初次体验(附.net客户端demo)的更多相关文章

  1. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  2. 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

    概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...

  3. Docker部署Apollo配置中心

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

  4. ASP.NET Core Identity Hands On(1)——Identity 初次体验

    ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格.登录和用户数据存储 这是来自于 ASP.NET Core Identity 仓 ...

  5. 在docker中初次体验.net core 2.0

    .net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...

  6. windows部署Apollo

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

  7. Win10上部署Apollo配置中心

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

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

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

  9. kubebuilder实战之二:初次体验kubebuilder

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. 记录一些基本的git命令

    本地操作 向git仓库添加文件 git status    查看工作区文件状态 git add a.php   将文件添加到暂存区 git commit -m  "描述"   将文 ...

  2. 树莓派B+使用入门&RPI库安装&wringPi库安装

    最近看看试用一下树莓派进行一些开发操作,于是入手一块Raspberry Pi B+的板子来玩.由于没有显示器,没有备用的键盘和鼠标,所以想到用SSH来控制树莓派,刚开始还很担心已经安装好的操作系统到底 ...

  3. maya cmds pymel 'ESC' 退出 while, for 循环

    maya cmds pymel 'ESC' 退出 while, for 循环 import maya.cmds as cmds cmds.progressWindow(isInterruptable= ...

  4. notes for python简明学习教程(2)

    方法是只能被该类调用的函数 print函数通常以换行作为输出结尾 字典的items方法 返回的是元组列表 即列表中的每个元素都是元组 切片左闭右开 即开始位置包含在切片中 结束位置不在 每一个对象都能 ...

  5. webpack问题列表及解决方案

    1.提升webpack打包速度 2.cssloader顺序有先后 3.如何正确引用图片 4.打包后访问不到json文件 5.打包后如何访问项目 6.打包后的文件 7.为什么执行webpack,就可以打 ...

  6. WPF RadioButton的绑定

    1. 枚举类 public enum EnumDataTypes { Simulation, Test } 2. 枚举型与布尔型的转换 public class EnumToBooleanConver ...

  7. 如何快速求解第一类斯特林数--nlog^2n + nlogn

    目录 参考资料 前言 暴力 nlog^2n的做法 nlogn的做法 代码 参考资料 百度百科 斯特林数 学习笔记-by zhouzhendong 前言 首先是因为这道题,才去研究了这个玩意:[2019 ...

  8. 执行JS

    JS执行切换frame框架后点击 Window.frame['frame路径'].frame['下级frame路径'].document.getElementById("id"). ...

  9. 教你如何用勾勾街快速生成一个苹果IOS APP

    现在苹果手机上的各种各样的APP,想不想也有一款属于自己的专属APP?很简单,用勾勾街可以在3分钟内快速制作一款,快来看看! 工具平台: 勾勾街 (www.gogojie.com ) 操作方法: 1. ...

  10. 通过源码理解HashMap的并发问题

    最近在学习有关于Java的基础知识,在学习到HashMap的相关知识的时候,了解了HashMap的并发中会出现的问题,在此记录,加深理解(这篇文章是基于Java1.7的,主要是为了更加直观,更新版本的 ...