精华内容
下载资源
问答
  • 微服务配置中心

    2019-07-09 14:38:49
    1. 微服务配置中心是什么 2. 为什么需要微服务配置中心 3. 微服务配置中心实现技术 4. 技术如何选型 2. 微服务配置中心是什么 集中式配置是将应用系统中对配置信息的管理作为一个新的应用功能模块,区别与传统的...

    1. 简介

    通过以下几个问题理解微服务中的集中配置中心 
    1. 微服务配置中心是什么 
    2. 为什么需要微服务配置中心 
    3. 微服务配置中心实现技术 
    4. 技术如何选型

    2. 微服务配置中心是什么

           集中式配置是将应用系统中对配置信息的管理作为一个新的应用功能模块,区别与传统的配置信息分散到系统各个角落方式,进行集中统一管理,并且提供额外功能。尤其是在微服务架构中,是不可或缺组件,甚至是必要组件之一。

    3. 为什么需要微服务配置中心

          在微服务体系中,服务的数量以及配置信息的日益增多,比如各种服务器参数配置、各种数据库访问参数配置、各种环境下配置信息的不同、配置信息修改之后实时生效等等,传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求,如:

    安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏
    时效性:修改配置,需要重启服务才能生效
    局限性:无法支持动态调整:例如日志开关、功能开关

    4. 微服务配置中心实现技术

    对微服务的几种成熟或者流行的集中式配置实现技术做个简要对比,重点理解一下apollo配置中心与SpringCloudConfig。

    4.1 网罗的实现技术

    Apollo(阿波罗):是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
    XDiamond:全局配置中心,存储应用的配置项,解决配置混乱分散的问题。名字来源于淘宝的开源项目diamond,前面加上一个字母X以示区别。
    Qconf: 奇虎 360 内部分布式配置管理工具。 用来替代传统的配置文件,使得配置信息和程序代码分离,同时配置变化能够实时同步到客户端,而且保证用户高效读取配置,这使的工程师从琐碎的配置修改、代码提交、配置上线流程中解放出来,极大地简化了配置管理工作。
    Disconf:百度的分布式配置管理平台,专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」
    SpringCloudConfig:为分布式系统中的外部配置提供服务器和客户端支持。

    4.2 Apollo分布式配置中心

    目前仅对其基础模型以及总体进行理解学习,更多关于Apollo的信息请点击这里查阅其官方文档

    4.2.1 基础模型

    用户在配置中心对配置进行修改并发布
    配置中心通知Apollo客户端有配置更新
    Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用 

    4.2.2 总体设计

    上图简要描述了Apollo的总体设计,我们可以从下往上看:

           Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
           Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
           Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳
           在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
           Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
           Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
           为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中
    4.3 Spring Cloud config
    这里简单理解基础流程以及实时刷新原理,后续demo以及代码中会结合深入进行理解、使用

    4.3.1 基础流程


    4.3.2 配置实时刷新


    与git仓库结合使用时,使用git的web hook监控git仓库中配置信息的变更,一旦有变更,则推送给ConfigServer,进而通过Spring Cloud Bus实现实时更新

    5. 技术如何选型

    理解需求、技术特点是技术选型的首要任务

    目前暂未对其他几个分布式配置中心做深入的了解,但是仍首选Apollo,个人理由如下:

    配置集中管理:分布式配置中心最基础的要求,满足
    配置实效性:配置的修改实时生效要求,满足
    安全性:应用和配置的管理具有完善的权限管理机制,并且新增编辑和发布环节,尽量减少了人工误操作发生的概率,所有的操作都有审计日志,方便追踪,满足
    配置修改简单:提供的图形化界面形式的配置管理,满足
    部署简单:依赖非常少,只需要基础的mysql以及java运行环境即可,也提供了对应的一键安装脚本,满足
    开源:源码的重要性不言而喻,无论是解决问题、扩展新功能、或者后期代替官方渠道进而形成满足自身特定需求的版本,满足
    官方理由: 
      正是基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性:

    统一管理不同环境、不同集群的配置 
        Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
        同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等
        通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
        配置修改实时生效(热发布) 
        用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
        版本发布管理 
        所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
        灰度发布 
       支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
    权限管理、发布审核、操作审计 
       应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
    所有的操作都有审计日志,可以方便地追踪问题
       客户端配置信息监控 
       可以在界面上方便地看到配置在被哪些实例使用
       提供Java和.Net原生客户端 
       提供了Java和.Net的原生客户端,方便应用集成
    支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
    同时提供了Http接口,非Java和.Net应用也可以方便地使用
    提供开放平台API 
    Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等
    对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制
    部署简单 
    配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少
    目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来
    Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

    转自:https://blog.csdn.net/crave_shy/article/details/81285217 
     

    展开全文
  • 本文根据优云数智技术总监岳晓阳于8月14日可信云大会《容器和微服务》论坛演讲整理而成,主要解析了配置中心在微服务的前世今生、微服务配置中心管理及原则、微服务配置中心Hawk架构解析以及未来展望,希望对大家...

    本文根据优云数智技术总监岳晓阳于8月14日可信云大会《容器和微服务》论坛演讲整理而成,主要解析了配置中心在微服务的前世今生、微服务配置中心管理及原则、微服务配置中心Hawk架构解析以及未来展望,希望对大家有所帮助。

    图:优云数智技术总监岳晓阳

    演讲提纲:

    1.微服务的前世今生;

    2.微服务配置中心管理及原则;

    3.微服务配置中心架构解析;

    4.未来展望

    一:微服务的前世今生

    配置中心在整个微服务体系里算其中一小块,只是解决了分布式环境下如何去做软件配置管理的问题。首先,先简单讲解一下微服务相关概念。

    微服务本身的诞生并不是一个偶然的现象,从领域驱动设计、敏捷方法论、持续交付、虚拟化和基础设施自动化、DevOps文化这些因素都是推动微服务诞生的重要因素:

    图一:微服务的前世今生

    1. 领域驱动设计指导我们如何分析并模型化复杂的业务;

    2. 敏捷方法论帮助我们消除浪费,快速反馈;

    3. 持续交付促使我们构建更快、更可靠、更频繁的软件部署和交付能力;

    4. 虚拟化和基础设施自动化(Infrastructure As Code)则帮助我们简化环境的创建、安装;

    5.DevOps 文化的流行以及特性团队的出现,使得小团队更加全功能化。

    软件开发经历的三个阶段:单体应用、SOA架构、微服务架构。因为本人做了差不多17年的开发,亲身经历了每一个阶段,在目前这个阶段,微服务现在基本上已经被广泛接受了。

    图二:单体架构Vs. 微服务架构(来源:网络)

    这里做一个比较,上图中两个架构图都是从网上下载的,实际是一个订车系统的架构,图中左侧是单体架构,右侧是微服务架构,从图上可以很清晰的看到两种架构的区别。单体和微服务的优劣对比,这里就不展开讲了,总的来说各有利弊,在一定的规模下,你很难说到底哪个好、还是不好。

    图三: 微服务生命周期

    从DevOps的角度来看,每次构建微服务并将其部署到环境时,都要经历组装、引导、服务注册/发现、服务监控四个阶段,分别对应了微服务开发的四个原则:

    ➢    微服务应该是独立的,可独立部署多个

    ➢    微服务应该是可配置的

    ➢    微服务实例需要对客户端透明

    ➢    微服务应该传达其健康状况

    二、微服务配置中心管理及原则

    图四:单体应用的配置管理

    我们认为每一个大型的分布式微服务系统都需要一个配置中心。从单体应用那个时候的配置管理来回顾一下,左边的图描述的是按照不同的环境,提供不同的配置文件,将这些配置文件跟二进制包打包在一起,在Weblogic时代这是很流行的一种做法。

    到现在,有些解决方案提供商还是用这种方式来实现,它也是容器运行环境,在打镜像的时候会把配置的信息和镜像打在一起。假设,实际当中有三个环境,前面是一个开发环境,中间是测试环境,后面是一个企业的生产环境。每个环境都有相关对应的配置文件,程序去哪个环境运行,就提供对应环境的运行包。

    2.1 微服务系统到底怎么管理配置信息

    图五:微服务系统到底怎么管理配置信息

    一个系统到后面可能会拆成好几个微服务,每一个微服务可能有好多的实例,这些实例分布在不同的系统上,要让人手工去改这个配置系统——这些都是构建微服务系统需要考虑的问题,想想就是很可怕的事。这还只是一个系统,如果是多个系统呢?牵扯到多个数据中心呢?所以对于微服务的配置,我们有几个原则:

    图六:微服务配置管理

    1.程序和配置一定要分离;

    2.配置要集中进行管理;

    3.同一个程序包要适应多个环境;

    4.我们要提供一个客户端去拉取配置信息;

    5.服务端要能够推送,这一条主要是考虑程序运行时动态修改配置的情况。

    此外,还要维护多版本的配置信息、配置中心自己的容灾以及客户端规模达到一定数量的时候,必须考虑配置中心的性能问题。

    2.2 微服务配置原则

    Heroku创始人AdamWiggins发布了一个“十二要素应用宣言(TheTwelve-Factor App)”,为构建使用标准化流程自动配置,服务界限清晰,可移植性高,基于云计算平台可扩展的服务配置提供了方法论:

    1. 配置是可分离的,可从微服务中抽离出来,任何的配置修改不需要动一行代码;

    2. 配置应该是中央的,通过统一的中央配置平台去配置管理不同的微服务

    3. 配置中心必须必须可靠切稳定地提供配置服务;

    4. 配置是可追溯的,任何的配置历史都是可追溯,被管理且可用。

    在云服务时代,对微服务做配置,对它有什么样的要求呢?首先,必须基于镜像管理部署,有自己相应独立的配置,而且程序包不可以因为环境的改变而更改。也就是说,它是独立于环境的不可变的程序包。这是我们提到的,云化微服务的配置原则:

    1.完全分离要部署的程序和其对应的配置;

    2.程序包对于任何环境都是不可变的;

    3.通过环境变量或配置存储在程序启动时注入配置。

    2.3 配置中心功能需求分析

    图七:微服务配置中心功能需求

    上图是我们对配置中心功能需求分析的整理,主要分三个大的方面:一是需要具备的功能,二是跟其它产品的集成,三是企业级的管理属性。我们认为配置中心应该具有以下四个必备要素:

    1.配置数据持久化存储。

    2.可以横向扩展的缓存集群。

    3.配置信息的拉取和推送。

    4.配置数据及配置过程管理。

    三、配置中心Hawk系统架构解析

    图八: 微服务配置中心架构解析

    首先,接入第一层是网关,整体的存储通过Hawk Server,下发到ETCD集群,ETCD集群再同步到K8S容器运行的平台。先从数据迁移的状态简化成简单的几部分。比如新建一个配置,要么配置就被删除了,直接一步到位。如果没有这样做,就面临几种情况:

    1. 这个配置是否要小范围的去做一些试探性的发布,这种情况可以走灰度发布,状态变成灰度中,配置不允许更改。要么就是两条路走,全量发布到所有服务上。要么就是放弃灰度回到之前的状态,放弃灰度后会去到已修改的状态。

    2. 另外一种情况,新建一个配置,直接全量发布,状态变成已发布状态,这时候是可更改的。但是每一次的更改,还是会回到原来那个状态。这个更改要做灰度吗?还是做发布?还是对发布有点后悔,不打算更改了?这时,从历史版本里面找一个合适的版本,激活,然后再做一次发布,通过几个简单的回路,涵盖了大部分的业务场景。

    图九:微服务配置中心配置管理

    3.1 配置数据状态变迁

    Hawk Portal是主体的配置界面,用户在界面上对配置进行输入、增删、改查的管理。这些资料会有两份,一份做通过Mysql做本地存储,另一份通过Hawk Server直接同步到ETCD。

    由于HAWK Server是同步到ETCD里面,也就是说ETCD相当于另外一个数据库,这当中不存在数据之间的互相抄送,从而减低丢失数据的风险。持久化,是说研发和运维在后台做数据迁移,或者数据监控时更有把握,更方便。

    图十:内部架构

    优云数智HAWK其实有两个ETCD,一个ETCD是做注册发现的,Hawk Server、Hawk Portal都会注册在里面,作为相关的组件。类比Spring Cloud Eureka,Eureka是注册在Eureka Server里面的一个内存列表,集群里面所有Server共享这个内存信息。这个过程优云数智做了简化,所有信息全部注册在ETCD里面。

    ECTD集群由于是共享的,组件的状态和一致性得到保障。Portal和Server之间不再通过Portal注册在Server并通过心跳来维持关系而是通过共享持久化的ETCD,保证数据在任意时刻所看到的状态都是一致的,从而保证了服务的注册,以及服务发现的稳定性。

    Hawk和Eureka 选择的路径不一样。Eureka是比较重量级的,HAWK则简化了这个配置,简化这种代码的复杂性,重点提高系统的完整性,打造系统闭环,通过一些相对简单的方法,提高服务的稳定性。

    图十一:配置下发

    配置一旦通过Hawk Portal潜入本地数据库,微服务的注册服务是怎么实现配置呢?当Portal写入配置到本地数据库时,同时也会通过服务Sever去同步到ETCD,ETCD里面存储的信息,是一个持久化的数据。

    通过Server实时从ETCD拉取配置,有时是运行的时候拉取,有时是启动时拉取。启动时拉取有两种策略,启动的时候拉取配置,存储到本地作为静态文件的配置,运行时候拉取,动态的变更实时生效。

    在Web层其实也有一些问题需要解决,比如,因为我们不是一个开发框架,是奔着一个开源系统的方向去,所以要解决服务跟浏览器之间的授权。

    优云数智现在的做法是在本土数据库存储一些用户的信息,但是并没有采用传统意义上的建Session来做验证和授权,而是通过动态下发JWT的形式,每一个请求动态下发,根据我个人用户的一些信息生成,每次的请求一来一去都有交换新的Token,每个Token实时生效并有续约的功能,来代替传统意义上的Session。

    3.2 配置中心的支撑体系

    第一种运维管理体系类似于偏静态类的配置,在启动时通过配置文件直接拉取读业务;另外一种是开发管理体系,偏动态管理,代表的是一种程序或者在运行过程中,通过实时的变更配置内容而实时生效,达到的一种效果。一个健全的配置中心应该支持这两种运维体系。配置中心应该具备有以下几点特性:

    1.基于Spring Cloud config打造。

    2.完全兼容Spring Cloud config API。

    3.配置更新通过GRPC双向流实时推送。

    4.采用ETCD作为配置数据的强一致性存储。

    5.具备LDAP用户认证、授权管理、审批流程、审计日志等企业级特性。

    6.通过Open API和查件体系扩展支持基础组件,如sharding-gdbc。

    3.3 配置中心部署模式

    微服务配置中心如何部署,一般来讲会是这么两种方式,生产环节中单独布一套配置中心,在开发环境部署一套配置中心,开发环境的配置中心可以支持Dev、SIT、UAT等多个环境。

    图十二:微服务配置中心如何部署

    四、对未来的展望

    我们要做的工作,首先还是继续围绕Spring Cloud体系,为用户提供成熟方案和服务治理中心;二是探索基于Service Mesh的新方案,拥抱Istio/Conduit;三是配置中心Hawk我们已经做好了在GitHub上开源的准备工作,希望大家多多关注Hawk,关注您可信赖的云服务合作伙伴——优云数智。

    图十三:未来展望

    链接:https://www.jianshu.com/p/1c6ac83cab10

    展开全文
  • springcloud-config:微服务配置中心
  • 七:对微服务配置中心的理解

    千次阅读 2018-07-30 21:00:47
    通过以下几个问题理解微服务中的集中配置中心 1. 微服务配置中心是什么 2. 为什么需要微服务配置中心 3. 微服务配置中心实现技术 4. 技术如何选型

    微服务专栏地址

      专栏:微服务
      微服务系列总目录

    目录

    1. 简介

    通过以下几个问题理解微服务中的集中配置中心
    1. 微服务配置中心是什么
    2. 为什么需要微服务配置中心
    3. 微服务配置中心实现技术
    4. 技术如何选型

    2. 微服务配置中心是什么

      集中式配置是将应用系统中对配置信息的管理作为一个新的应用功能模块,区别与传统的配置信息分散到系统各个角落方式,进行集中统一管理,并且提供额外功能。尤其是在微服务架构中,是不可或缺组件,甚至是必要组件之一。

    3. 为什么需要微服务配置中心

      在微服务体系中,服务的数量以及配置信息的日益增多,比如各种服务器参数配置、各种数据库访问参数配置、各种环境下配置信息的不同、配置信息修改之后实时生效等等,传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求,如:

    • 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏
    • 时效性:修改配置,需要重启服务才能生效
    • 局限性:无法支持动态调整:例如日志开关、功能开关

    4. 微服务配置中心实现技术

    对微服务的几种成熟或者流行的集中式配置实现技术做个简要对比,重点理解一下apollo配置中心与SpringCloudConfig。

    4.1 网罗的实现技术

    • Apollo(阿波罗):是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
    • XDiamond:全局配置中心,存储应用的配置项,解决配置混乱分散的问题。名字来源于淘宝的开源项目diamond,前面加上一个字母X以示区别。
    • Qconf: 奇虎 360 内部分布式配置管理工具。 用来替代传统的配置文件,使得配置信息和程序代码分离,同时配置变化能够实时同步到客户端,而且保证用户高效读取配置,这使的工程师从琐碎的配置修改、代码提交、配置上线流程中解放出来,极大地简化了配置管理工作。
    • Disconf:百度的分布式配置管理平台,专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」
    • SpringCloudConfig:为分布式系统中的外部配置提供服务器和客户端支持。

    4.2 Apollo分布式配置中心

    目前仅对其基础模型以及总体进行理解学习,更多关于Apollo的信息请点击这里查阅其官方文档

    4.2.1 基础模型

    1. 用户在配置中心对配置进行修改并发布
    2. 配置中心通知Apollo客户端有配置更新
    3. Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
      基础模型

    4.2.2 总体设计

    总体设计

    上图简要描述了Apollo的总体设计,我们可以从下往上看:

    • Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
    • Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
    • Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳
    • 在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
    • Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
    • Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
    • 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中

    4.3 Spring Cloud config

    这里简单理解基础流程以及实时刷新原理,后续demo以及代码中会结合深入进行理解、使用

    4.3.1 基础流程

    原理图

    4.3.2 配置实时刷新

    配置实时刷新

    • 与git仓库结合使用时,使用git的web hook监控git仓库中配置信息的变更,一旦有变更,则推送给ConfigServer,进而通过Spring Cloud Bus实现实时更新

    5. 技术如何选型

    理解需求、技术特点是技术选型的首要任务

    目前暂未对其他几个分布式配置中心做深入的了解,但是仍首选Apollo,个人理由如下:

    • 配置集中管理:分布式配置中心最基础的要求,满足
    • 配置实效性:配置的修改实时生效要求,满足
    • 安全性:应用和配置的管理具有完善的权限管理机制,并且新增编辑和发布环节,尽量减少了人工误操作发生的概率,所有的操作都有审计日志,方便追踪,满足
    • 配置修改简单:提供的图形化界面形式的配置管理,满足
    • 部署简单:依赖非常少,只需要基础的mysql以及java运行环境即可,也提供了对应的一键安装脚本,满足
    • 开源:源码的重要性不言而喻,无论是解决问题、扩展新功能、或者后期代替官方渠道进而形成满足自身特定需求的版本,满足

    官方理由:
      正是基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性:

    • 统一管理不同环境、不同集群的配置
      • Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
      • 同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等
      • 通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
    • 配置修改实时生效(热发布)
      • 用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
    • 版本发布管理
      • 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
    • 灰度发布
      • 支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
    • 权限管理、发布审核、操作审计
      • 应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
      • 所有的操作都有审计日志,可以方便地追踪问题
    • 客户端配置信息监控
      • 可以在界面上方便地看到配置在被哪些实例使用
    • 提供Java和.Net原生客户端
      • 提供了Java和.Net的原生客户端,方便应用集成
      • 支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
      • 同时提供了Http接口,非Java和.Net应用也可以方便地使用
    • 提供开放平台API
      • Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等
      • 对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制
    • 部署简单
      • 配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少
      • 目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来
      • Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数
    展开全文
  • 微服务配置中心(三)

    2019-07-18 17:15:03
    微服务配置中心 按我的理解,当项目越来越大时,做一个微服务配置中心统一管理各个服务的配置是相当重要的,这里我演示的是将微服务配置中心与服务中心放在一起的 在码云新建一个项目spring-cloud-config,新建文件夹 ...

    微服务配置中心

    按我的理解,当项目越来越大时,做一个微服务配置中心统一管理各个服务的配置是相当重要的,这里我演示的是将微服务配置中心与服务中心放在一起的

    码云新建一个项目spring-cloud-config,新建文件夹 service-registry-config,在service-registry-config中新建配置文件 application-dev.yml(这里注意一下,文件名{name}-{profile}.yml/properties,如果不带profile的话,这个配置会被所有{name}-{profile}.yml共同拥有)
    application-dev.yml

    app:
        info: this is registry config-1
    

    再新建一个application-pro.yml
    application-pro.yml

    web:
        info: this is registry config-2
    

    回到项目registry

    在项目registry 中添加依赖

     		<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
    

    在启动类中加注解

    @SpringBootApplication
    @EnableEurekaServer   // 启用Eureka服务
    @EnableConfigServer   //启动配置中心
    public class RegistryApplication {
    

    新建bootstrap.yml 配置文件,spring.cloud的配置需要放在bootstrap.yml中优先加载,不然会报错

    bootstrap.yml

    spring:
      application:
        #应用名称 (服务注册中心)
        name: config-server
        #云服务配置
      cloud:
        config:
          server:
            prefix: /config    #添加映射路径client注册路径 192.168.0.112:8761/config
            #git中心配置(这里我将配置文件存储在码云上)
            git:
              #配置文件所在的服务地址
              uri: https://gitee.com/zhushaoyun/spring-cloud-config
              #配置文件所在的文件路径
              search-paths: service-registry-config
              #公开的项目不需要设置码云用户名和密码
              username: 
              password: 
    
    

    启动服务中心
    通过连接拿到

    http://192.168.0.112:8761/config/service-registry-config/dev

    <Environment>
    <name>service-registry-config</name>
    <profiles>
    <profiles>dev</profiles>
    </profiles>
    <label/>
    <version>39f611c454828f1933e90533bba40373baa52bf7</version>
    <state/>
    <propertySources>
    <propertySources>
    <name>
    https://gitee.com/zhushaoyun/spring-cloud-config/service-registry-config/application-dev.yml
    </name>
    <source>
    <app.info>this is registry config </app.info>
    </source>
    </propertySources>
    </propertySources>
    </Environment>
    

    这个结果可能是xml也可能是json根据个人设置,不报错拿到就是配置成功

    在app=producer-1 与app-consumer-1中添加依赖

    		<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
    

    都新建bootstrap.yml配置文件

    spring:
      #云配置
      cloud:
        config:
          uri: http://${user.name}:${user.password}@192.168.0.112:8761/config
          #配置文件前缀 (这里配置的name+profile为我们要读的配置文件 即 application-dev)
          name: application
          profile: pro
      #   discovery:
      #      enabled: true #发现服务
      #      service-id: config-server  #服务名
      user:
      name: admin
      password: admin_1
    

    因为bootstrap.yml优先于application.yml加载,所以讲user自定义配置拿过来,这里http://user.name:{user.name}:{user.password}@192.168.0.112:8761/config中因为注册中心中有简单验证,这里user的值也需加上,在registry中因为添加prefix: /config映射路径,这里也需加上,主要区别eureka连接,我这里用的uri连接,也可以使用discovery配置

    在app-producer-1 中添加接口,对应application-dev.yml

    /**
     * 读取配置中心的配置测试控制器
     */
    @RestController
    public class InfoResource {
        @Value("${app.info}")
        private String info;    // 注入app.info的值(本地配置文件没有这个配置,该配置从配置中心读取)
    
        /**
         * 输出 变量值
         * @return 变量值
         */
        @RequestMapping("/appInfo")
        public String info(){
            return info;
        }
    

    在app-consumer-1中添加接口,对应application-pro.yml

    
    @RestController
    public class WebInfoResource {
        @Value("${web.info}")
        private String webInfo;
    
        @RequestMapping("webInfo")
        public String info(){
            return webInfo;
        }
    }
    

    启动

    192.168.0.112:8002/webInfo

    得到 “this is registry config-2”

    192.168.0.112:8001/appInfo

    得到 “this is registry config-1”
    能正常得到则配置成功,但是这种会有一些限制,当配置更新时,git新提交,producer与consumer服务拿不到最新配置,需要重启配置中心,所以需要一种让她刷新配置的方式,这里我是用的的是RabbitMQ.

    加强加强(服务在线刷新配置)

    安装RabbitMQ,我使用的在别的机器上安装,也可以本地,是用的docker安装.链接: https://blog.csdn.net/weixin_44400390/article/details/96430208.

    在registry中添加依赖

       		<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    

    bootstrap.yml

    spring:
      application:
        #应用名称 (服务注册中心)
        name: config-server
        #云服务配置
      cloud:
        config:
          server:
            prefix: /config    #添加映射路径client注册路径 192.168.0.112:8761/config
            #git中心配置(这里我将配置文件存储在码云上)
            git:
              #配置文件所在的服务地址
              uri: https://gitee.com/zhushaoyun/spring-cloud-config
              #配置文件所在的文件路径
              search-paths: service-registry-config
              #公开的项目不需要设置用户名和密码
              username: 
              password: 
      rabbitmq:
        host: 192.168.0.61
        port: 5672
        username: root
        password: 123456
    
    #开启actuator/bus-refresh 接口,使用POST请求,刷新配置中心拉取最新配置,
    #根据springboot版本,这里可能变为management.security.enable:false,需要版本支持,路径也会不一样 /bus/refresh
    management:
      endpoints:
        web:
          exposure:
            include: bus-refresh
    
    user:
      name: admin
      password: admin_1
    

    启动registry

    在app-producer-1,app-consumer-1中添加依赖

     		<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    

    在bootstrap.yml中添加rabbitMQ配置

    rabbitmq:
        host: 192.168.0.61
        port: 5672
        username: root
        password: 123456
    

    在配置接口类名上加注解 @RefreshScope

    /**
     * 读取配置中心的配置测试控制器
     * @ RefreshScope 注解会在配置中心配置改变的时候 手动访问本项目的/refresh路径,就会实现自动刷新配置文件,重新加载配置文件中的数据
     */
    @RestController
    @RefreshScope
    public class InfoResource {
        @Value("${app.info}")
        private String info;    // 注入app.info的值(本地配置文件没有这个配置,该配置从配置中心读取)
    
        /**
         * 输出 变量值
         * @return 变量值
         */
        @RequestMapping("/appInfo")
        public String info(){
            return info;
        }
    
    }
    
    @RestController
    @RefreshScope
    public class WebInfoResource {
        @Value("${web.info}")
        private String webInfo;
    
        @RequestMapping("webInfo")
        public String info(){
            return webInfo;
        }
    }
    

    然后启动

    192.168.0.112:8002/webInfo

    得到 “this is registry config-2”

    192.168.0.112:8001/appInfo

    得到 “this is registry config-1”

    在码云上更改;

    app:
        info: this is registry config-1, 你吃饭了吗?
    
    web:
        info: this is registry config-2,还没有,你呢?
    

    提交,

    192.168.0.112:8002/webInfo

    得到 “this is registry config-2”

    192.168.0.112:8001/appInfo

    得到 “this is registry config-1”
    这时是得不到最新配置的
    发送 POST 请求

    192.168.0.112:8761/actuator/bus-refresh ,

    这里映射路径/config是不需要的
    如果成功是没有返回数据的,不会报错

    192.168.0.112:8002/webInfo

    得到 “this is registry config-2,还没有,你呢?”

    192.168.0.112:8001/appInfo

    得到 “this is registry config-1, 你吃饭了吗?”
    不出错即可在线拿到配置

    展开全文
  • 微服务配置中心Apollo架构和实践,对比,有详细的说明和操作引导,以及架构介绍,功能介绍,交互介绍
  • 本文根据优云数智技术总监岳晓阳于8月14日可信云大会《容器和微服务》论坛演讲整理而成,主要解析了配置中心在微服务的前世今生、微服务配置中心管理及原则、微服务配置中心Hawk架构解析以及未来展望,希望对大家...
  • 使用Zookeeper作为微服务配置中心项目构建项目依赖bootstrap.yml配置控制层编写定义项目配置测试 项目构建 演示项目基于SpringBoot 2.3.3.RELEASE 项目依赖 <dependency> <groupId>org.springframework...
  • 2. 微服务配置中心是什么 3. 为什么需要微服务配置中心 4. 微服务配置中心实现技术 4.1 网罗的实现技术 4.2 Apollo分布式配置中心 4.2.1 基础模型 4.2.2 总体设计 4.3 Spring Cloud config 4.3.1 ...
  • 概述随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、...所以,配置中心应运而生。环境简介目前公司使用阿里云管理所有服务,原因是为了降低运维成本——傻瓜式运维。服务部署使用ed...
  • 微服务架构中,配置中心是必不可少的基础服务。ConfigKeeper已开源,本文将深度分析配置中心的核心内容,错过「Spring Cloud中国社区北京沙龙-2018.10.28 」的同学将从本篇文章中收获现场的分享内容。背景微服务+...
  • 【Nacos】微服务配置中心介绍

    千次阅读 2019-06-17 10:59:23
    文章目录一、Nacos简介二、微服务配置中心探讨1.为什么要配置管理2.配置管理策略三、Nacos基础1.NACOS设计原则2.nacos的接口3.完成的客户端实例四、一些思考1.Nacos 客户端是怎么实时获取到 Nacos 服务端的最新数据...
  • 本文是Choerodon 的微服务系列推文第四篇,上一篇《Choerodon 的微服务之路(三):服务注册...▌文章的主要内容包括:配置是什么为什么需要微服务配置中心Choerodon的配置中心在早期单体应用的时代,监控等系统配置...
  • 用户所需,对于提供相似功能的产品... 微服务配置中心是一个微服务组件,而不是一个大的框架,选型成本较小,客观对比时不易走偏; 本文将从产品功能、使用体验、实施过程和性能4个纬度进行对比,所有素材均来源...
  • 前文《Spring Cloud Config里使用Git作为后端存储来开发ConfigServer》已经介绍了如何配置Config Server配置中心,本文将介绍如何在Spring Cloud微服务获取配置中心Config Server配置信息。一、创建一个新的微服务,...
  • 数据源配置支持自动从微服务配置中心获取吗? 例如,在DynamicDataSourceProperties上加 <p>Expected Result: <p>Actual Result: <h1>Steps to reproduce <ul><li> <p>Step 1 </li><li> <p>Step 2 </li><li...
  • 代码这个没什么好说的,你懂的,对于配置来说,由于我们需要对程序中的一些参数进行自定义配置,不想直接硬编码在代码中,方便以后更改,使得系统具有良好的拓展性,为此可以将一些信息写入配置文件(数据库连接、...
  • 本文是Choerodon 的微服务系列推文第四篇,上一篇《Choerodon的微服务之路(三):服务注册与... ▌文章的主要内容包括: 配置是什么 为什么需要微服务配置中心 Choerodon的配置中心 在早期单体应用的时代,监控等...
  • Zookeeper 介绍本质它是...特点数据存在内存中类似文件系统的树形结构(文件和目录)高吞吐量和低延迟集群高可靠作用实现分布式统一配置中心服务注册中心分布式锁等功能用于分布式应用程序的高性能协调ZK实现配置中心...
  • 微服务架构的系列文章中,前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」。后面还会继续介绍 ...
  • 主流微服务配置中心对比 config,nacso和Apollo对比 不想打字直接图片对比 转载于:https://my.oschina.net/u/1446314...
  • 及时获取有趣有料的技术文章SCCA 简介SCCA 全称 spring-cloud-config-admin,微服务下 Spring Boot 应用(包含 Spring Cloud)统一的配置管理平台。Github 地址:spring-cloud-config-admin核心贡献者:程序员DD | ...
  • 配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是简单配置的管理和存取,但它是整个微服务架构中不可或缺的一环。另外,配置中心如果真得用好了,它还能推动技术组织持续...
  • 微服务架构的系列文章中,前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」。后面还会继续介绍 ...
  • 创建模块创建配置中心微服务模块添加依赖,修改pom.xmlorg.springframework.cloudspring-cloud-config-server启动类创建配置中心模块config-server启动类ConfigServerApplication.java:packagecom.aicoding.server;...
  • 今天分析微服务配置中心源码Config ,老规矩从jar包开始: 一、首先看配置中心的服务端: 1、核心启动类加注解: 此注解主要起到标识作用: 2、找依赖jar: 从这入口: 3、点击来到环境相关的...
  • Consul是一个分布式高可用的系统,具有分布式、高可用、高扩展性ConsulConsul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”...
  • RestCloud 微服务配置中心

    千次阅读 2018-07-29 22:40:56
    RestCloud配置中心是由谷云科技完全自主研发的配置中心产品,RestCloud配置中心的定位是面向大中型企业分布式部署架构时的配置中心解决方案,全Web化配置,简单易用,无侵入性,无需修改SpringBoot的注解和任何代码...
  • 其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,818
精华内容 3,127
关键字:

微服务配置中心