spring.profiles.active配置了没生效_微服务架构之「 配置中心 」

05d22a36a8588c50b94f19b1ab9f1036.png

在微服务架构的系列文章中,前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」。后面还会继续介绍 服务框架、服务监控、服务治理等。还是那句话,只有将这些基础设施弄清楚了,微服务实践的道路才能走的稳、走的远。

「配置中心」,顾名思义,就是用来统一管理项目中所有配置的系统。虽然听起来很简单,但也不要小瞧了这个模块。如果一个中型互联网项目,不采用配置中心的模式,一大堆的各类配置项,各种不定时的修改需求,一定会让开发同学非常头疼且管理十分混乱。我认为甚至可以直接用 “一个项目中是否有无采用「配置中心」” 这一粗略的条件,来判断一个互联网研发团队是否规范和成熟。

一、为什么需要「配置中心」?

我们先来看看在没有「配置中心」的传统项目中,我们是怎么处理各类配置参数问题的:

  1. 一般是静态化配置。大多数在项目中单独写一个配置文件,例如 "config.conf",然后将各类 参数配置、应用配置、环境配置、安全配置、业务配置 都写到这个文件里。当项目代码逻辑中需要使用配置的时候,就从这个配置文件中读取。这种做法虽然简单,但如果参数需要修改,就非常的不灵活,甚至需要重启运行中的项目才能生效。相信大多数开发同学都深有体会。
  2. 配置文件无法区分环境。由于配置文件是放在项目中的,但是我们项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置参数理论上都是不同的,所以我们在配置文件中根据不同环境配置不同的参数,这些都是手动维护,在项目发布的时候,极其容易因开发人员的失误导致出错。
  3. 配置文件过于分散。如果一个项目中存在多个逻辑模块独立部署,每个模块所使用的配置内容又不相同,传统的做法是会在每一个模块中都放一个配置文件,甚至不同模块的配置文件格式还不一样。那么长期的结果就是配置文件过于分散混乱,难以管理。
  4. 配置修改无法追溯。因为采用的静态配置文件方式,所以当配置进行修改之后,不容易形成记录,更无法追溯是谁修改的、修改时间是什么、修改前是什么内容。既然无法追溯,那么当配置出错时,更没办法回滚配置了。

上面只是拿配置文件的形式来举例,有的项目会采用数据库配置,虽然灵活一点,但是依旧不能完全解决上述问题。既然传统的项目配置有这么多弊端,那我们看看「配置中心」的方案是如何解决这些痛点的:

「配置中心」的思路就是把项目中各种配置、各种参数、各种开关,全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。当各个服务需要获取配置的时候,就来「配置中心」的接口拉取。当「配置中心」中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。

那么,按照上述思路,我们理想中的「配置中心」应该具备如下特点:

  • 配置集中管理、统一标准
  • 配置与应用分离
  • 实时更新
  • 高可用

具有上述特性的「配置中心」是如何解决上面传统配置所面临的问题的呢?

  1. 采用“配置集中管理”,可以很好的解决传统的“配置文件过于分散”的问题。所有的配置都集中在配置中心这一个地方管理,不需要每一个项目都自带一个,这样极大的减轻了开发成本。
  2. 采用“配置与应用分离”,可以很好的解决传统的“配置文件无法区分环境”的问题,配置并不跟着环境走,当不同环境有不同需求的时候,就到配置中心获取即可,极大的减轻了运维部署成本。
  3. 具备“实时更新”的功能,就是用来解决传统的“静态化配置”的问题。线上系统需要调整参数的时候,只需要在配置中心动态修改即可。
  4. 既然配置都统一管理了,那配置中心在整个系统中的地位就非常重要了,一旦配置中心不能正常提供服务,就可能会导致项目整体故障,因此“高可用”就是配置中心又一个很关键的指标了。

二、「配置中心」的原理与应用?

通过上面的介绍,其实就可以了解到「 配置中心 」的原理不是很复杂。其核心功能也不多,主要是:

  1. 实现配置的记录
  2. 实现配置的读取、更新、取消
  3. 实现配置的查看

但是围绕着这几个核心功能,我们还需要保障高可行、要实现实时更新、要能方便的使用,还希望有权限管理的功能、操作审计的功能等等,加上这些周边辅助功能之后,一个完善的「 配置中心 也就不那么简单了。

我们再来看一下在实际项目中如何去选型和应用:

虽然配置中心的核心原理并不复杂,我们可以根据原理自己去实现一个配置中心,但是如果没有特殊需求,还是不建议重复造轮子了,毕竟业内已经有很多成熟的开源方案可以直接选用了。下面就列举几个比较热门的配置中心开源组件给大家参考:

  • Apollo
  • Apollo是由携程开源的分布式配置中心。
  • Apollo的特点有很多,比如:配置更新之后可以实时生效,还可以支持灰度发布功能。并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。另外由于Apollo使用的人很多,所以网上的资料也非常的丰富,并且github上资料也写的很详细。
130779a4326d7b115166d8528b343a0f.png
  • 上面即是Apollo的基础模型,看结构很简单。但是其功能很多,之前说过配置中心对高可用的要求很高。下面可以继续看一下Apollo的架构:
5e95cc535f424da62c5f8023f0d9bd4a.png
  • 更多的Apollo资料可以直接去github上查看,可以说官方文档是非常体贴的。
  • Spring Cloud Config
  • 看名字就知道,这是Spring Cloud中带的配置中心组件。也正是这个原因,所以它和Spring是无缝集成,使用起来非常方便。并且它的配置存储支持Git,不过它没有可视化的操作界面,配置的生效也不是实时的,需要重启或去刷新。所以比较适用于小型项目快速上手。
0b3611a9ca47a347537677d34c1e240e.png
  • Spring Cloud Config包含了Config Client和Config Server两部分,Config Server 实现配置文件的存储,对外以接口的形式提供获取配置文件,然后Config Client通过这些接口获取数据。
  • Disconf
  • Disconf是由百度开源的分布式配置中心。其实很多一线大厂都有开源自己的配置中心组件,这里挑出百度的Disconf也是因为网上比较火热,易用性也还不错,项目也是托管在github上很容易找到。它是基于Zookeeper来实现配置变更后实时通知和生效的。
81c04a86a38f50ac2df64efa589f4a27.png

以上,就是对微服务架构中「 配置中心」的一些思考。

码字不易啊,喜欢的话不妨转发朋友,或点击文章右下角的“在看”吧。

本文原创发布于微信公众号「 不止思考 」,欢迎关注。涉及 思维认知、个人成长、架构、大数据、Web技术 等。

cb8f72e8f652b54e785de7bd83b8829e.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php+正则匹配qq,正则表达式对qq号进行验证的实例

这篇文章主要介绍了正则表达式对qq号码进行校验的相关知识,非常不错,具有参考借鉴价值,需要的的朋友参考下吧废话不多说了,直接给大家贴代码了,具体代码如下所示:package 正则表达式;/*对QQ号码进行校验要求…

公招网报照片审核处理工具_消防员招录报名照片处理工具使用说明

消防员招录报名照片处理工具使用说明请将下载的压缩包文件全部解压后,在照片处理工具文件夹中,用鼠标双击 “消防员招录报名照片处理工具.exe” 运行照片处理工具软件。本工具是消防员招录报名照片处理专用工具,只有经本工具处理符合要求的照…

php树形数据结构是什么,数据结构 之 树

概述树的章节一般分两大部分: 一部分将树,一部分将二叉树;虽然二叉树也是树,但是二叉树足够特殊,足够有用,所以重点来讲;或者说,如果不是二叉树,树的家族也不会如此的德高…

python3解释器执行'abcdd'.endswith('cd')的结果是___python3解释器执行for x

【判断题】RAM通常由地址译码器、存储矩阵和读/写电路三部分组成。【单选题】Until we reduce our dependence on oil, we will be ( ) the ups and downs of the oil markets.【单选题】python3解释器执行 fork,v in{1:a,2:b}:print(k,v)的结果是():【单选题】He argues that …

java script中定义的var变量怎么在body中使用,深入分析JavaScriptvar中的预解析与副作用...

var的副作用隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。这表明,在技术上…

螺旋桨设计软件_第四届智能工业软件及设计技术研讨会暨2019天洑软件用户大会成功举办...

第四届智能工业软件及设计技术研讨会暨2019天洑软件用户大会于2019年6月13日-14日在辽宁省大连市召开。天洑软件用户大会至2019年已成功举办了四届,在历届会议中有来自中国、德国、瑞典、捷克、意大利、美国、加拿大、日本等各行业专家学者共同探讨最新的计算机智能…

php 上一条下一条,thinkPhp里添加显示上一条和下一条

newsinfo.php里的代码if($front[id]!null){$id $front[id];echo "上一条:$front[title]";}else{echo "上一条:没有了";}echo " ";if($after[id]!null){echo "下一条:$after[title]";}else{echo "下一条&#xff…

群晖 百度网盘_海康威视联合百度网盘推出NAS私有存储 贡献带宽获积分兑网盘会员...

此前百度网盘因为限速问题遭到不少用户的吐槽,随后百度网盘推出单次付费加速由于价格过高再次被吐槽。网盘类的服务也确实需要大量的硬盘空间和服务器带宽支撑,所以对用户来说最好的办法还是自己搭建网盘。自己搭建的网盘也就是私有云存储,放…

深信服python面试题_(完整版)往年的深信服笔试题(齐全)

•一,六道选择题(可以多选)1char*p"helloworld";p存储在()指向//堆栈charp[]"helloworld";p存储在()指向全局变量//数据段static变量//数据段分别在哪个地方?1数据段2代码段3堆4堆栈(此题可以配合同文件夹下的char.cpp)(二、例子程序…

matlab 特征值不排序,matlap 代码求解释!从这里开始即可%对特征值进行排序并去掉...

%人脸识别代码clear all % //removes all variables from the workspace. This frees up system memory.close all % //Delete specified figureclc% number of images on your training set.%训练集数目M16;%Chosen std and mean.%It can be any number that it is clos…

python有序队列_【Python】:拓展Queue实现有序不重复队列

最近手头有个需求是这样的,定期检查数据库获取失败任务并且进行重启。最早想到的是添加一个生产者&&消费者队列,但是发现很多棘手的问题。1.重启任务是调用的一个shell脚本然后在脚本中又调用python程序,所以任务完成的状态回传略纠结…

matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc

ode45求解多自由度动力学方程实例Ode45函数调用形式如下:[T,Y]ode45(odefun,tspan,y0)相关参数介绍如下:参数名称参数说明odefun用于存放待求解的方程的m文件名,方程必须用y’f(t,y)的形式存放tspan指定自变量范围的向量,通常用[t…

onenetsim定位功能吗_微信小程序新增后台定位功能,你会卸载地图APP用微信导航吗...

[PConline]8月8日,根据微信官方发布的消息显示,小程序新增后台定位功能,并对自动化测试功能进行了升级。据介绍,为了满足线路导航、路线记录等服务场景下,小程序需要长时间持续定位来提供服务。当用户主动将小程序设置…

pdo 错误 php,多语句查询中的PHP PDO错误

我在我的一个实时网络应用程序中遇到了这个问题.看来如果你通过PHP PDO向MysqL发出一个多语句查询,并且第一个语句是一个insert语句,而第二个语句是一个update语句,那么PDO :: nextRowset()函数不会返回正确的数字结果集(请注意,自PHP 5.3起,PDO应该支持每个MySQL查询的多个语句…

hbuid 集成svn_HBuilder如何配置SVN的步骤详解

前言本文主要给大家介绍了关于HBuilder如何配置SVN的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧。注意:大家都配置前最好先备份好之前的文件资料很早之前就想在编辑器上配置SVN,但找了很多…

MATLAB静力学分析,锻造操作机静力学的Matlab仿真分析

由第3章中该新型锻造操作机的位置反解中的构件的位置以及角度的关系式,均为已知量。施加外力为Ftx50N,Fty300N和沿“轴方向的外力矩M 60000 N.mm。给定初始量范围,通过Matlab软件仿真,可以得到各个液压缸的驱动力的变化曲线。该新型锻造操作机…

babylonjs 设置面板位置_一篇关于开关面板的详细集合,值得收藏转发

对于大部分人来说,开关的布局,开关的种类都会是一脸懵。所以大家在装修的过程中就会迷茫,今天给大家分享一篇集合,相信通过这篇文章,问题会有所缓解~一,开关插座的分类1.电源开关分类:一位单控/…

php递归实现1 10阶乘,用递归实现1到100的和,1到10的阶乘

递归:方法定义中调用方法本身的现象注意实现:1.递归一定要有出口,否则就是死递归 StackOverflowError2.递归的次数不能过多,否则也会出现死递归特殊事项:构造方法不可以递归定义举例:从前有座山,山上有座庙&#xff0c…

xxljob 配置文件_最详细的xxl-job java配置方式spring-boot

转自:https://blog.csdn.net/weixin_44055234/article/details/106565516————XXL-JOB*是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。且支持线…

php怎么排除空的数组,【技术产品】php如何去除空数组

【摘要】对于初入门的php学习者肯定会有很多问题,今天考比过小编为大家整理了关于【技术产品】php如何去除空数组的信息,希望可以帮助到大家。下面就让我们一起来看下【技术产品】php如何去除空数组的具体内容吧!php如何去除空数组在php中可以…