首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从“配置私藏”到“配置中心”,你到了哪个阶段?(第38讲)

从“配置私藏”到“配置中心”,你到了哪个阶段?(第38讲)

作者头像
架构师之路
发布于 2025-02-28 07:11:45
发布于 2025-02-28 07:11:45
1250
举报
文章被收录于专栏:架构师之路架构师之路

《架构师之路:架构设计中的100个知识点》 38.配置架构演进

一、缘起

随着业务越来越复杂,用户量与流量越来越大,“服务化分层”是架构演进的必由之路,此时:

1. 站点应用会调用服务,上游服务调用底层服务,依赖关系会变得非常复杂

2. 对于同一个服务,为了保证高可用,服务会由若干个节点形成集群;

图片
图片

如上图所示,用户中心us有三个节点,ip1/ip2/ip3组成集群对上游提供服务,保证高可用。

那么问题来了,当服务集群增减节点的时候,是否存在“反向依赖”,是否“耦合”,是否上游调用方需要修改配置重启,是否能做到上游无感知,是今天需要讨论的问题。

二、配置私藏

“配置私藏”是配置文件架构的最初级阶段,上游调用下游,每个上游都有一个专属的私有配置文件,记录被调用下游集群配置信息。

图片
图片

如上图:

1. 用户中心us有ip1/ip2/ip3三个节点;

2. service1调用us,它有一个专属配置文件s1.conf,配置了us的集群信息ip1/ip2/ip3;

3. service2也调用us,也有个配置文件s2.conf,也配置了us集群信息ip1/ip2/ip3;

4. web2调用us,同理w2.conf,配置了us集群信息ip1/ip2/ip3;

是不是很熟悉?

这是典型的“配置私藏”架构,很多公司初期都是这么玩的。

配置私藏架构的缺点是什么呢?

此时,有两大痛点:

问题一,调用方很痛:us集群发生变化的时候,s1s2web2需要修改自己的专属配置文件,并重启。

画外音:这是一个典型的“反向依赖”耦合,集群变化的是你,凭啥修改配置重启的是我,需要优化。

问题二,服务方很痛:us不知道有多少个上游调用了自己,无法进行服务治理。例如:它无法按照调用方限流,容易出现一个边缘上游业务把调用量打满,从而耦合影响上游核心业务。

那要怎么优化呢?

架构的升级并不是一步到位的,可以先采用最低成本的“全局配置法”,来解决问题一。

三、全局配置

图片
图片

“全局配置”法:对于通用的服务,建立全局配置文件,消除配置私藏:

1. 运维层面制定规范,新建全局配置文件,global.conf;

2. 对于服务方,如果是通用的服务,集群信息配置在global.conf里

3. 对于调用方,调用方禁止配置私藏,必须从global.conf里读取通用下游配置

有什么好处

1. 如果下游容量变化,只需要修改一处配置global.conf,而不需要各个上游修改;

2. 调用方下一次重启的时候,自动迁移到扩容后的集群上来了;

3. 修改成本非常小,读取配置文件目录变了;

不足:如果调用方一直不重启,就没有办法将流量迁移到新集群上去了。

有没有方面实现自动流量迁移呢?

图片
图片

答案是肯定的,只需要实现两个并不复杂的组件

组件一,文件监控组件:FileMonitor

作用是监控文件的变化,起一个timer,定期监控文件的ModifyTime或者md5就能轻松实现,当文件变化后,实施回调。

组件二,动态连接池组件:DynamicConnectionPool

“连接池组件”是RPC-client中的一个子组件,用来维护与多个RPC-server节点之间的连接。所谓“动态连接池”,是指连接池中的连接可以动态增加和减少。

这两个组件完成后:

1. 一旦全局配置文件变化,文件监控组件实施回调;

2. 动态连接池组件配置配置的变化,动态增减连接,自动完成下游节点的增容与缩容。

全局配置文件是一个能够快速落地的,解决“修改配置重启”问题的方案,但它仍然解决不了,服务提供方“服务治理”的问题,此时可以采用“配置中心”来解决

四、配置中心

图片
图片

对比“全局配置”与“配置中心”的架构图,配置由静态文件升级为动态服务:

1. 整个配置中心子系统由zk、conf-center服务,DB配置存储,conf-web配置后台组成;

2. 所有下游服务的配置,通过后台设置在配置中心里;

3. 所有上游需要拉取配置,需要去配置中心注册,拉取下游服务配置信息(ip1/ip2/ip3);

图片
图片

当下游服务容量变化时,配置中心会将集群的变化信息推送给上游调用方,再结合动态连接池组件,完成自动的扩容与缩容。同时,有了全局的调用拓扑图,很容易实现按需限流,蓝绿部署,算法分流等服务治理高级功能。

不足:系统复杂度相对较高,对配置中心的可靠性要求较高,一处挂全局挂。

五、总结

系列方案解决什么问题?

配置导致系统耦合,架构反向依赖。

什么痛点?

上游痛:扩容的是下游,改配置重启的是上游

下游痛:不知道谁依赖于自己

配置架构如何演进?

一、配置私藏

二、全局配置文件

三、配置中心

知其然,知其所以然。

思路比结论更重要。

补充阅读材料:

《配置中心选型》

https://blog.csdn.net/qq_35890572/article/details/120205753

文章较长,中文,来自csdn。

==全文完==

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
从ORA-27300,ORA-27301到ORA-00064
    最近由于session数量增加,需要调整session,也就是要调整process参数。看是比较简单的一个问题,却遭遇了ORA-27300,ORA-27301。因为这个涉及到了有关内核参数kernel.sem的修改。下面是其具体描述。 1、故障现象 OS版本:SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l) DB版本: SQL*Plus: Release 10.2.0.3.0 - Production  需求:Processes参数由1000修改到2000 SQL> startup pfile=/u02/database/MRDB/initMRDB.ora; ORA-27154: post/wait create failed ORA-27300: OS system dependent operation:semget failed with status: 28 ORA-27301: OS failure message: No space left on device ORA-27302: failure occurred at: sskgpcreates 2、故障的分析与解决 #起初咋一看还以为空间不够呢,如下,显然不是空间的问题,其次有个很重要的表示"semget" SQL> ho df -h Filesystem            Size  Used Avail Use% Mounted on /dev/sda3             1.8T  826G  885G  49% / udev                   32G  116K   32G   1% /dev /dev/sda1              99M  9.5M   85M  11% /boot #后台日志如下 Tue Aug  5 18:07:22 2014 Starting ORACLE instance (normal) Tue Aug  5 18:07:22 2014 Errors in file /u02/database/MRDB/udump/mrdb_ora_30366.trc: ORA-27154: post/wait create failed ORA-27300: OS system dependent operation:semget failed with status: 28 ORA-27301: OS failure message: No space left on device ORA-27302: failure occurred at: sskgpcreates #Google了一些文章,描述的是需要调整内核参数kernel.sem,也就是信号量的问题 v2012db02u:~ # grep kernel.sem /etc/sysctl.conf kernel.sem = 1250    32000   100    256     #这个是当前的值 信号量设置示例     SEMMSL应该设置为服务器中实例中具有最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。     SEMMNS参数应设置为SEMMSL*SEMMNI,接上例SEMMSL为5010,SEMMNI的值一般为128,则SEMMNS参数应为(5010*128)=641280。     SEMOPM参数应设置与SEMMSL参数相同,接上例此处应设置为5010     因此对于信号量建议做如下设置     sysctl -w kernel.sem="5010 641280 5010 128" #关于这个参数的具体描述及设置可以参考:Linux 内核参数优化(for oracle) #由于当前服务器存在N个实例,因此给了一个比较大的值,生产环境应慎重修改,如下     v2012db02u:~ # vi /etc/sysctl.conf v2012db02u:~ # sysctl -p     ........... kernel.sem = 7000 1792000 7000 256     ...........  #再次启动,狂汗.... SQL> startup pfile=/u02/database/MR/initMR.ora; ORA-00064: object is too large to allocate on this O/S (1,5150880) v2012db02u:~ > oerr ora 00064 00064, 00000, "object is too large to allocate on this O/S (%s,%s
Leshami
2018/08/13
8420
Oracle案例:深入解析ASM rebalance无法启动
某银行ODS系统的一体机(数据库版本为19.8)上,由于某个存储节点掉了4块盘,磁盘处于offline状态,在超过了“_asm_disk_repair_time”时间内没有online,被磁盘组自动drop force,之后在drop disk rebalance未完成的情况下,将4块盘重新加入了磁盘组,由于担心rebalance影响ODS跑批业务,所以在跑批阶段中断rebalance操作,在空闲时重新发起rebalance,反复启停rebalance很多次,但是在某一次中断rebalance之后,发现rebalance就再也无法启动了。
数据和云
2022/02/25
1K0
案例分享:关闭 Oracle 审计时遇到的 Bug 排查与解决
一重要的生产库长期以来就有各种问题,前段时间刚进行完 PSU190716 的更新,这两天查到发现审计功能对其性能有较大的影响,故客户要求关闭审计功能。我们便申请了三个小时的停机窗口,进行关闭审计的操作。心想改参数重启实例四十分钟就可以搞定的事,三个小时多多有余,因为数据量达五六十 T ,小伙伴都比较怕,只有我做了。以下涉及到实际的主机名、实例名均已替换为测试相关的,如不对应忽略即可。
JiekeXu之路
2020/05/12
2K0
Oracle 11g RAC 原地升级到 19c
记得去年初的一段时间内,总是在进行数据库 19c 的升级,安装,测试工作,当时不知怎的,有一个特殊的要求就是原地升级 11g RAC 到 19c,刚好操作系统版本以及 JDK 均满足要求,就当学习了,顺便将第一次的测试步骤大概记录了下来,便有了这篇文章。
JiekeXu之路
2022/12/07
2.3K0
Oracle 11g RAC 原地升级到 19c
Oracle案例:ORA-00600: internal error code, arguments: [4187]
点击上方蓝色字关注我们~ 本案例客户来自某省电信,alert日志大量的ORA-00600[4187]报错,已经影响到业务正常运行。 Fri Nov 19 16:07:09 2021 Errors in file /u01/oracle/app/oracle/diag/rdbms/lcfa/LCFA1/trace/LCFA1_smon_5811.trc  (incident=184182): ORA-00600: internal error code, arguments: [4187], &#91
数据和云
2022/03/04
1.5K0
数据库突然宕机的问题及分析
昨天晚上,某个环境的数据库在做一个压力测试的时候突然宕机了。这个问题比较急。马上查看日志文件。 看到了如下的一段,报了os级的linux错误。提示没有空间了。 Fri Mar 14 19:16:47 2014 Archived Log entry 192 added for thread 1 sequence 192 ID 0x1ed7a02c dest 1: Fri Mar 14 19:39:24 2014 Incremental checkpoint up to RBA [0xc0.2aa5fb.0
jeanron100
2018/03/13
1.6K0
关于修改数据库参数的测试(r3笔记第18天)
在性能调优的时候,会发现很多类型的问题,有些问题可能通过使用隐含参数就能够解决,不过这种变更需要特别注意,因为做隐含参数的变更无形中会影响到其它的sql语句运行。如果为了个别的问题而做了变更,导致了整个系统问题,那就得不偿失了,这中变更一定得经过测试,至少在测试环境中部署测试过,而且解决的问题可能是通用的,要不真是吃力不讨好。 个人建议有下面的步骤: 在测试环境部署。 测试前设定baselin,修改后,在同样的负载下对比性能情况,是否有明显的抖动。 分析收集的信息,进行评估,是否达到预期的目标。 现在生产
jeanron100
2018/03/14
7040
初了解Oracle 11g的Automatic Diagnostic Repository新特性
Oracle 11g之前,当数据库出现问题时,往往第一时间需要看alert日志,看看里面记录了哪些错误,可以给我们提示。alert文件名则
bisal
2019/01/29
6450
性能优化:Cache Buffer Chain Latch等待事件
彭小波 ACOUG核心成员,Oracle用户组年轻专家。擅长Oracle数据库架构规划、SQL,OWI方面的优化。曾服务于各大企业数据库的维护以及系统开发,目前从事百年人寿保险股份有限公司的数据库服务与运维工作。 产生的背景: Oracle为了将物理 IO 最小化,把最近使用过的数据块保持在内存中。为了管理这些内存,oracle 使用如图的结构,Hash Chain 的结构,Hash Chain 位于共享池中,使用典型内存结构 Bucket->Chain->Header 结构进行管理 lock#
数据和云
2018/03/06
1.5K0
性能优化:Cache Buffer Chain Latch等待事件
笔记分享(1) oracle常用查询语句
以下的oracle常用查询笔记是我之前工作中用到过的. 其实常用的查询差不多就是这些.
大大刺猬
2021/04/01
1.4K0
####### Scripts Summary #######
Scripts Summary Version: 1.0.1 issueDate: 2017-11-11 modifiedDate: 2017-11-28
Alfred Zhao
2019/05/24
6080
Oracle online系列(上):Online Move Datafile
点击上方蓝色字关注我们~ 先从Online Move Datafile说起,Online Move Datafile是12.1的新特性,在12c之前如果想要move datafile通常需要下列步骤: 1.offline datafile 2.backup as copy数据文件到指定路径 3.switch datafile to copy切换控制文件中数据文件路径 4.由于offline datafile不会做检查点,所以在online之前需要recover datafile 5.online data
数据和云
2022/03/04
1.8K0
Oracle online系列(下):online indexbuild
点击上方蓝色字关注我们~ online indexbuild (online create或者rebuild index)是Oracle的一个极其常用的online操作,我们知道当创建索引或者重建索引没有加online关键字的话,会请求表对象上的4号TM锁,而DML请求的是3号TM锁,3和4的TM锁并不兼容,所以在索引创建或者重建期间是无法进行DML操作的,等待事件为enq: TM – contention。 为了改进这一缺陷,在Oracle 8i推出了online indexbuild功能,并且在11.
数据和云
2022/03/04
1.4K0
【DB笔试面试631】在Oracle中,什么是动态采样(Dynamic Sampling)?
对于没有收集统计信息的表,Oracle为了能够得到相对准确的执行计划,会在执行SQL之前对SQL语句涉及到的表做动态采样(Dynamic Sampling,从Oracle 11.2.0.4开始称之为Dynamic Statistic)。
AiDBA宝典
2019/09/29
6760
【DB笔试面试631】在Oracle中,什么是动态采样(Dynamic Sampling)?
Oracle 参数文件
主要用来记录数据库的配置文件,在数据库启动时,Oracle读取参数文件,并根据参数文件中的参数设置来配置数据库。
Leshami
2018/08/07
6920
【DB笔试面试584】在Oracle中,如何得到已执行的目标SQL中的绑定变量的值?
当Oracle解析和执行含有绑定变量的目标SQL时,如果满足如下两个条件之一,那么该SQL中的绑定变量的具体输入值就会被Oracle捕获:
AiDBA宝典
2019/09/29
4.1K0
【DB笔试面试530】在Oracle中,有哪些重要后台进程?
对于后台进程,首先需要掌握3个概念:后台进程、服务器进程和用户进程,它们之间的关系如下图:
AiDBA宝典
2019/09/29
1.5K0
【DB笔试面试530】在Oracle中,有哪些重要后台进程?
【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
基数反馈(Cardinality Feedback,CFB)是Oracle 11gR2出现的一个新特性,它的出现是为了帮助Oracle优化器依据更精准的基数生成更加优秀的执行计划。基数的评估准确与否,对于优化器异常重要,直接影响到后续的JOIN COST等重要的成本计算评估。若评估不当则会造成CBO选择不当的执行计划。此技术对于仅执行一次的SQL无效,在SQL第一次执行时,记录存储实际的基数和评估的基数之间的差异,如果差异较大,在第二次执行时,优化器会依据实际的基数重新决策生成执行计划,但是需要注意的是,当使用更准确的基数重新生成执行计划时,生成的执行计划与第一次时使用的执行计划完全有可能是相同的。这个技术的出现是由于优化器在一些情况下不能很好的去计算基数的数值,比如:统计信息缺失或陈旧、多谓词、直方图缺失等等。
AiDBA宝典
2019/09/29
8280
案例解读:利用12c渐进式DASH分析"ON CPU"
墨墨导读:本文来自墨天轮读者“Anbob”供稿,分享利用12c渐进式DASH分析"ON CPU"的过程。
数据和云
2021/03/11
6280
INDEX FULL SCAN vs INDEX FAST FULL SCAN
     INDEX FULL SCAN 与 INDEX FAST FULL SCAN两个长相差不多,乃是一母同胞,因此既有其共性,也有其个性。两者来说其共性是不用扫描表而是通过索引就可以直接返回所需要的所有数据。这对提高查询性能而言,无疑是一个难得的数据访问方式之一,因为索引中存储的数据通常是远小于原始表的数据。下面具体来看看两者之间的异同。
Leshami
2018/08/14
2.6K0
相关推荐
从ORA-27300,ORA-27301到ORA-00064
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档