首页 > 其他分享 >微服务架构学习与思考(13):分布式配置中心

微服务架构学习与思考(13):分布式配置中心

时间:2023-05-28 21:37:10浏览次数:47  
标签:13 架构 应用 配置文件 配置 https Apollo com 分布式

一、配置中心的诞生

用编程语言编写应用项目时,一般都会有项目的配置文件。比如用 java 编写项目,有一个 properties 的配置文件,会把一些配置信息写入到该文本文件中,例如数据库相关的配置信息。

这也体现了软件设计的一个原则:关注点分离。把代码和配置信息相分离。

image-20230528174718494

​ (单体应用项目配置文件)

在单体应用项目中,这个配置文件一般都是静态的文本文件。项目比较小时,配置信息不是很多、变动也少,这时使用静态配置文件足矣。修改了配置后,重启一下应用就可以了。

随着项目的发展壮大,业务增多,用户增多,功能增多,原来的大单体应用项目会慢慢的拆分为多个独立的应用项目,然后向着微服务架构发展演变。

image-20230528182956226

​ (大单体应用拆为为各个独立应用)

这样,随着大单体项目拆分为一个一个独立应用项目时,配置文件也会跟着项目迁移,每个项目都有自己的配置文件,配置文件变得分散。

假如业务要增加一个功能,而实现这个功能需要协调多个项目开发,并修改各自配置时,就需要到一个一个项目上去修改配置,然后重启应用以使配置生效。

这样做是可行的,但是有没有可以改进的地方?让配置修改更加高效,而不需要一个文件一个文件去修改,这样太低效了。

能不能把这些配置信息集中存储在一个地方,修改时只需在一个地方修改,然后动态分发给相应的应用项目?当然可以,这就是配置中心

image-20230528193642156

随着多个项目向着微服务架构的进化,应用项目分拆为更多的小服务,由各种服务来给应用项目提供功能,服务越多,配置信息也越多,配置中心也需要更多功能才能满足需求,配置中心也会向着分布式配置管理中心进化。

二、静态配置文件的问题

在业务量比较小的单体应用中,静态文本配置文件使用是没有大的问题。但是随着业务逐渐发展壮大,对大单体拆分为多个应用,就会产生一些问题:

  • 配置文件分散,修改起来比较麻烦
  • 配置生效不及时,修改后需要重启应用以使配置生效
  • 多环境配置,无法区分多个配置环境,比如开发的环境,测试的环境,预发布的环境,生产的环境
  • 各种配置信息多,难以管理,比如分布式限流的配置信息,各种监控的配置信息等等配置
  • 配置信息无法回滚,没有类似版本控制功能的话,就无法进行回滚

等等各种问题。

三、配置中心功能

上面是静态配置文件最初出现的问题,后面随着应用的拆分、随着业务功能越来越多,对配置的功能要求也逐渐变多:

  • 版本管理功能,配置的发布有版本功能可支持回滚,也进行信息回溯
  • 配置信息回滚
  • 灰度发布功能,支持功能灰度发布
  • 集中统一管理,对多环境配置信息管理,比如开发、测试、生产等各种环境的配置信息
  • 实时生效,修改完后及时下发给对应的应用,应用可以进行热更新配置,不用重启应用
  • 集群功能,有集群功能,能扩容,能容灾,高可用
  • UI界面管理

等等功能。

配置中心的这些功能,解决了静态配置文件出现的问题,而且还新增了很多额外的功能。

四、开源配置中心

有很多开源的软件可以作为配置中心使用,比如下面这些:

当然还有很多其他的,比如 Spring Cloud Config,Disconf,Zookeeper 等。

下面介绍下 Apollo 分布式配置中心。

五、Apollo分布式配置中心

Apollo(阿波罗)介绍

image-20230528204632789

​ (来源:https://github.com/apolloconfig/apollo/ apollo github)

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

背景:

随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……

对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……

在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。Apollo配置中心应运而生!

--- 来自 Apollo 官网

Apollo 功能特性

  • 统一管理不同环境、不同集群的配置
  • 配置修改实时生效(热发布)
  • 版本发布管理
  • 灰度发布
  • 权限管理、发布审核、操作审计
  • 客户端配置信息监控
  • 多种客户端,并提供Java和.Net原生客户端
  • 提供开放平台API
  • UI 界面管理

更多信息请查看文档:https://www.apolloconfig.com/#/zh/design/apollo-introduction

架构设计

Apollo基础模型

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

image-20230528210004468

架构模块

五个主要核心模块:

  • Config Service

    • 提供配置的读取、推送等功能
    • 服务对象是Apollo客户端
  • Admin Service

    • 提供配置的修改、发布等功能
    • 服务对象是Apollo Portal(管理界面)
  • Meta Server

    • Meta Server用于封装Eureka的服务发现接口
  • Client

    • 实时获取配置信息
    • 通过访问 Meta Server 获取 Config Service 服务列表
    • 在Client侧会做load balance、错误重试
  • Portal

    • 配置管理界面 UI
    • 通过 Meta Server 获取 Admin Service 服务列表
    • 在 Portal侧会做 load balance、错误重试

image-20230528210114024

以上信息和图片来源:https://www.apolloconfig.com/#/zh/design/apollo-design

Apollo部署

这部分请查看部署文档:https://www.apolloconfig.com/#/zh/deployment/quick-start

Apollo文档

开源地址和文档:

六、参考

标签:13,架构,应用,配置文件,配置,https,Apollo,com,分布式
From: https://www.cnblogs.com/jiujuan/p/17438880.html

相关文章

  • centos7上Hadoop2.7.2完全分布式部署
    1.规划node1         node2           node3datanode       datanode         datanodenamenode     resourcemanager  secondarynamenodenodemanager   nodemanager     no......
  • AGC013
    开始重新板刷AGC。别惦记着你那b多项式了!然后发现我做题量太少了。现在思维强度不太上档次,T1都能挂一个星期。都干嘛呢?看了一圈,洛谷没人提交(除了H_Kaguya写了个左偏树),vjudge也没人交题,真都写APIO呢?那咋T1没人交?[AGC013A]SortedArrays普及题。这种东西是真的容易......
  • centos7.9上hadoop-2.7.2伪分布式部署
    1.安装jdk1.1在Oracle官网上现在jdk1.8,然后上传到Linux服务器中1.2 安装jdk rpm-ivhjdk-8u371-linux-x64.rpm2创建部署用户hadoopuseradd-d/hadoophadoopecho123|passwd--stdinhadoop3修改/etc/hosts4使用Hadoop用户上传hadoop安装包hadoop-2.7......
  • 使用Python实现分布式爬虫
    使用Python实现分布式爬虫在Web爬虫中,分布式爬虫已经成为一种流行的技术,可以帮助我们快速地收集互联网上的数据。下面我们将介绍如何使用Python实现分布式爬虫。什么是分布式爬虫?分布式爬虫是指将爬虫任务分配给多个计算机节点执行,以提高爬取效率和稳定性的一种技术。分布式爬虫通......
  • Elasticsearch掰开揉碎第13篇SpringData操作ES基础篇
    引言上一篇主要讲解的是:使用java操作Elasticsearchapi完成常用操作,比如:添加文档、查询文档数据、更新文档数据、删除文档数据、批量添加、批量更新、批量删除、查询指定索引中所有数据、匹配查询\分页查询\排序,匹配查询\高亮显示。本篇主要讲解的是:SpringData简介、一个完整的开发......
  • 013关于CentOS6不再维护的解决方法
    一、CentOS6操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。建议您升级操作系统至CentOS7及以上,如果您的业务过渡期仍需要使用CentOS6系统中的一些安装包,请根据下文切换CentOS6的源。解决:CentOS6EOL如何切换源?(aliyun.com)sudoyumcleanall&&s......
  • 分布式事务
    AT:AT模式是一种无侵入的分布式事务解决方案。阿里seata框架,实现了该模式TCC:TCC模式需要用户根据自己的业务场景实现Try、Confirm和Cancel三个操作;事务发起方在一阶段执行Try方式,在二阶段提交执行Confirm方法,二阶段回滚执行Cancel方法。TCC三个方法描述:Try:资源的检测......
  • Appium自动化(13):Appium常用操作之TouchAction操作
    TouchAction操作Appium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行。TouchAction类支持的动作很多;常用操作如下:1、press(self,el=None,x=None,y=None): 按......
  • 分布式机器学习(Parameter Server)
    分布式机器学习中,参数服务器(ParameterServer)用于管理和共享模型参数,其基本思想是将模型参数存储在一个或多个中央服务器上,并通过网络将这些参数共享给参与训练的各个计算节点。每个计算节点可以从参数服务器中获取当前模型参数,并将计算结果返回给参数服务器进行更新。为了保持......
  • Fabric架构详解
    1整体架构2运行架构FabricCA(可选)peer:主节点模块,负责存储区块链数据,运行维护链码orderer:交易打包,排序模块cryptogen:组织和证书等资料生成模块configtxgen:生成用于通道配置的文件和创世区块等configtxlator:负责解析格式化后的区块和交易文件3网络运行流程4交易......