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


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

     

    前言

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

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

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

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

    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=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

    启动

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

    1
    2
    3
    cd C:Userschengongsource eposapollo-build-scripts
     
    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客户端

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

    nuget install apollo.net
    static void Main(string[] args)
            {
                Config config = ConfigService.GetAppConfig();
                config.ConfigChanged += OnChanged;
    
                while (true)
                {
                    Thread.Sleep(500);
                    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:optdata

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

    结束

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

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


    作  者: 陈珙 
    出  处:http://www.cnblogs.com/skychen1218/ 
    关于作者:专注于微软平台的项目开发。如有问题或建议,请多多赐教! 
    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力! 

  • 相关阅读:
    部署nginx服务
    mysql主从配置
    LNMP+WordPress博客搭建
    CIFS(Samba)服务的使用
    NFS服务的使用
    LVM逻辑卷
    FTP学习
    文件处理+生成器
    内置函数
    Python3
  • 原文地址:https://www.cnblogs.com/Jeely/p/10789713.html
Copyright © 2020-2023  润新知