首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >互联网架构,究竟为什么需要配置中心?

互联网架构,究竟为什么需要配置中心?

作者头像
架构师之路
发布于 2020-03-23 10:16:36
发布于 2020-03-23 10:16:36
2.9K1
举报
文章被收录于专栏:架构师之路架构师之路

配置中心是互联网架构体系中很重要的一块,但为什么会有配置中心是不是一开始就要有配置中心,它究竟解决什么问题,这是今天要讨论的问题。

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

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

对于同一个服务:

(1)它往往有多个上游调用;

(2)为了保证高可用,它往往是若干个节点组成的集群提供服务;

如上图,用户中心服务user-service有三个节点,ip1/ip2/ip3对上游提供服务,任何一个节点当机,都不影响服务的可用性。

那么问题来了

调用方如何维护下游服务集群配置?

当服务集群增减节点时,调用方是否有感知?

初期:“配置私藏”架构

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

如上图:

(1)用户中心user-service有ip1/ip2/ip3三个节点;

(2)service1调用了用户中心,它有一个专属配置文件s1.conf,里面配置了us的集群是ip1/ip2/ip3;

(3)service2也调用了用户中心,同理有个配置文件s2.conf,记录了us集群是ip1/ip2/ip3;

(4)web2也调用了用户中心,同理w2.conf,配置了us集群是ip1/ip2/ip3;

画外音:是不是很熟悉?绝大部分公司,初期都是这么玩的。

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

来看一个容量变化的需求:

(1)运维检测出ip1节点的硬盘性能下降,通知研发未来要将ip1节点下线;

(2)由于5月8日要做大促运营活动,未来流量会激增,研发准备增加两个节点ip4和ip5;

此时要怎么做呢?

需要用户中心的负责人通知所有上游调用者,修改“私藏”的配置,并重启上游,连接到新的集群上去。在ip1上没有流量之后,通知运维将ip1节点下线,以完成整个缩容扩容过程。

这种方案存在什么问题呢?

当业务复杂度较高,研发人数较多,服务依赖关系较复杂的时候,就没这么简单了。

问题一:调用方很痛,容量变化的是你,凭啥修改配置重启的是我?这是一个典型的“反向依赖”架构设计,上下游通过配置耦合,不合理。

问题二:服务方很痛,ta不知道有多少个上游调用了自己,往往只能通过以下方式来定位上游:

  • 群里吼
  • 发邮件询问
  • 通过连接找到ip,通过ip问运维,找到机器负责人,再通过机器负责人找到对应调用服务

画外音:是不是似曾相识?

不管哪种方式,都很有可能遗漏,导致ip1一直有流量难以下线,ip4/ip5的流量难以均匀迁移过来。该如何优化呢?

中期:“全局配置”架构

架构的升级并不是一步到位的,先来用最低的成本来解决上述“修改配置重启”的问题一。

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

(1)运维层面制定规范,新建全局配置文件,例如/opt/global.conf;

画外音:如果配置较多,注意做好配置的垂直拆分。

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

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

全局配置有什么好处呢?

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

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

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

全局配置有什么不足呢?

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

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

答案是肯定的,只需要引入两个并不复杂的组件,就能实现调用方的流量自动迁移:

(1)文件监控组件FileMonitor

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

(2)动态连接池组件DynamicConnectionPool

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

画外音:用锁来互斥,很容易实现。

引入了这两个组件之后:

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

(2)如果动态连接池组件发现配置中减少了一些节点,就动态的将对应连接销毁,如果增加了一些节点,就动态建立连接,自动完成下游节点的增容与缩容;

终版:“配置中心”架构

“全局配置”架构是一个能够快速落地的,解决“修改配置重启”问题的方案,但它仍然解决不了,服务提供方“不知道有多少个上游调用了自己”这个问题。

如果不知道多少上游调用了自己:

“按照调用方限流”

“绘制全局架构依赖图”

等这类需求便难以实现,怎么办?

“配置中心”架构能够完美解决。

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

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

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

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

当下游服务需要扩容缩容时:

(4)conf-web配置后台进行设置,新增ip4/ip5,减少ip1;

(5)conf-center服务将变更的配置推送给已经注册关注相关配置的调用方;

(6)结合动态连接池组件,完成自动的扩容与缩容;

“配置中心”架构有什么好处呢?

(1)调用方不需要再重启;

(2)服务方从配置中心中很清楚的知道上游依赖关系,从而实施按照调用方限流;

(3)很容易从配置中心得到全局架构依赖关系;

痛点一、痛点二同时解决。

“配置中心”架构有什么不足呢?

一来,系统复杂度相对较高;

二来,对配置中心的可靠性要求较高,一处挂全局挂。

总结

究竟要解决什么痛点?

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

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

总之,难以实施服务治理。

究竟如何解决上述痛点?

一、“配置私藏”架构;

二、“全局配置文件”架构;

三、“配置中心”架构;

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

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

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

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

评论
登录后参与评论
1 条评论
热度
最新
有价值!
有价值!
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
“配置”也有架构演进?看完深有痛感
一、缘起 随着互联网业务的越来越复杂,用户量与流量越来越大,“服务化分层”是架构演进的必由之路。 如上图:站点应用会调用服务,上游服务调用底层服务,依赖关系会变得非常复杂。 对于同一个服务,它有多个上
架构师之路
2018/03/01
9390
“配置”也有架构演进?看完深有痛感
配置中心,互联网架构解耦利器
《小小的ip,大大的耦合》提到,因为"变更ip,导致上游重启一大片"的不合理架构,可以使用“内网域名代替内网ip”的方式解耦。 这一次,随着流量的越来越大,一个服务集群由3个节点增加到5个节点,扩容增加了两个ip,居然也要调用方修改配置,重启一大片? 因为调用服务集群配置关联在一起,导致下游服务扩容时上游需要配合重启,是一个耦合的典型案例。 一、场景还原 user-service是一个下游底层通用服务,原集群有3个节点:ip1, ip2, ip3。 上游service1、service2、web1等三个上游
架构师之路
2018/03/02
9830
配置中心,互联网架构解耦利器
从“配置私藏”到“配置中心”,你到了哪个阶段?(第38讲)
随着业务越来越复杂,用户量与流量越来越大,“服务化分层”是架构演进的必由之路,此时:
架构师之路
2025/02/28
1080
从“配置私藏”到“配置中心”,你到了哪个阶段?(第38讲)
这一步都没做,还想搞自动化运维?
监控平台,服务治理,调用链跟踪,数据收集中心,自动化测试… 很多公司在搞技术体系平台化。可如果连第一步“集群信息集中管理”都没做到,谈平台化为时尚早。
架构师之路
2020/11/26
2660
这一步都没做,还想搞自动化运维?
集群信息管理,架构设计中最容易遗漏的一环
准备系统性介绍“技术体系规划”了,这是第一篇。 监控平台,服务治理,调用链跟踪,数据收集中心,自动化运维,自动化测试… 很多要讲,却没想好从哪里入手。 讲Z平台,可能需要提前介绍Y服务;讲Y服务,可能需要提前介绍X知识。 思来想去,准备从技术体系里,最容易被遗漏,非常基础,却又非常重要的“集群信息管理”开始介绍。 由于基础,可能部分同学会觉得简单;由于大家所在公司处于不同阶段,所以在实现上会介绍不同阶段的公司应该如何来实现。 还是一如既往的按照“架构师之路”的思路: 是什么 什么场景,为什么会用到,存在什么
架构师之路
2018/03/02
1K0
集群信息管理,架构设计中最容易遗漏的一环
集群信息管理,很多架构师压根不考虑这个问题(第65讲)
“啥是集群信息管理?”有个架构师反问我。我猜,她在架构设计的过程中,可能压根没有考虑过这个问题。
架构师之路
2025/05/19
1.7K0
集群信息管理,很多架构师压根不考虑这个问题(第65讲)
换IP的是你,凭啥重启的却是我?
一、缘起 很多公司,技术经常遇到这样的场景: 1)硬件升级,要换一台高配机器 2)网络重新规划,若干服务器要调整机架 3)服务器当机,要重新部署恢复服务 … 更具体的,如上图:数据库换了一个ip,此时
架构师之路
2018/03/01
1.4K0
换IP的是你,凭啥重启的却是我?
互联网架构“高并发”到底怎么玩?
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
烟雨平生
2023/03/07
3900
互联网架构“高并发”到底怎么玩?
90行代码,搞定日志监控框架
上一篇《100行代码,搞定http监控框架》介绍了通用+可扩展的http监控平台的架构: 监控平台层:调度监控项,通过后台管理监控项 信息管理层:通过服务和后台维护集群,告警接收人,告警策略等信息 告警发送层:通过接口发送邮件,短信,微信等消息 创业型公司,如果没有上述完善的基础设施,可以简化为一个通用+可扩展的http监控框架: 调度器:100行的伪代码,简述了调度器的原理 可扩展配置:通过配置文件来维护监控项、集群、告警人信息,同时保持扩展性 不少同学留言问,这个框架日志监控覆盖不了,RPC接口监控覆盖
架构师之路
2018/03/02
3K0
90行代码,搞定日志监控框架
究竟啥才是互联网架构“高可用”
一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 假设系统一直能够提供服务,我们说系统的可用性是100%。 如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。 很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。 百度的搜索首页,是业内公认高可用保障非常出色的系统,甚至人们会通过www.baidu.com 能不能访问
架构师之路
2018/03/01
1.5K0
究竟啥才是互联网架构“高可用”
分级告警策略,人性化系统监控?
要介绍统一监控平台,得先从告警策略聊起,后续再聊不同维度监控的架构与实现细节。 一、啥是告警? 监控平台发现系统异常,向系统负责人发出文字(例如,邮件/短信),色彩(有些公司,编译不过,CI平台会亮红灯),声音(有些公司,有蜂鸣器嗡嗡响,研发压力大呀)等警示,就是告警。 绝大部分公司,主要是通过文字发出系统异常告警信息。 文字告警有哪些常见的方法? 以58到家为例,目前提供了四种文字告警的方式,其成本,到达率,实时性都不一样: 短信:成本高,实时性好,到达率高 邮件:成本低,实时性差,到达率高 钉钉/微信:
架构师之路
2018/03/02
2.3K0
分级告警策略,人性化系统监控?
为什么说解耦的战术,决定了架构的高度?
架构设计中,大家都不喜欢耦合,但有哪些典型的耦合是我们系统架构设计中经常出现的,又该如何优化?这里列举了6个点:IP、jar包、数据库、服务、消息、扩容。这些点,如果设计不慎,都会导致系统一些耦合,这些点基本都是大家实际遇到的痛点,今天我将跟大家分享如何用常见的方案去解除这些耦合。
技术zhai
2019/02/28
1.2K0
为什么说解耦的战术,决定了架构的高度?
我C,MySQL双主架构,原来能这么玩
MySQL最常见的集群架构,是一主多从,主从同步,读写分离的架构。通过这种方式,能够扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。
架构师之路
2020/07/29
4.9K0
我C,MySQL双主架构,原来能这么玩
搞懂分布式技术11:分布式session解决方案与一致性hash
该系列博文会告诉你什么是分布式系统,这对后端工程师来说是很重要的一门学问,我们会逐步了解常见的分布式技术、以及一些较为常见的分布式系统概念,同时也需要进一步了解zookeeper、分布式事务、分布式锁、负载均衡等技术,以便让你更完整地了解分布式技术的具体实战方法,为真正应用分布式技术做好准备。
Java技术江湖
2019/12/02
4410
1亿数据量MySQL,如何实现秒级扩容?
数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据库路由sql语句。
架构师之路
2024/01/23
3830
1亿数据量MySQL,如何实现秒级扩容?
亿级数据DB秒级平滑扩容
数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据库路由sql语句。
java架构师
2019/05/28
8750
docker配置redis集群和scrapyd服务
Redis集群的配置方式我们上一篇已经介绍过了,而且使用Dockerfile配置文件我们也介绍了,不过介绍的并不详细,可能有些人看不明白,这篇我们再介绍一些Docker的一些常用命令。
星星在线
2018/08/21
9570
docker配置redis集群和scrapyd服务
秒换存储引擎,又多了一种架构方案? | 数据库系列
在做业务架构的过程中,你是否遇到过类似的痛点? (1)数据量太大,容量复杂性上移到业务层; (2)并发量太大,性能复杂性上移到业务层; (3)前台与后台存储异构,满足不同查询需求; (4)线上与线下存储异构,满足大数据需求; (5)存储系统迁移成本高,不敢轻易做重构; (6)... 职业生涯十五年,基本都在使用MySQL做线上业务的存储。最近这几年,遇到的问题慢慢多起来,严重影响了研发效率。TiDB近年甚火,于是最近做了一些调研,与大家分享。 如一贯风格,更多的聊:TiDB究竟解决什么问题,以及为什么这
架构师之路
2022/10/08
5850
秒换存储引擎,又多了一种架构方案? | 数据库系列
Nacos集群部署-高可用保证
http://nacos.com:port/openAPI 域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式
共饮一杯无
2023/07/24
1.3K0
『互联网架构』软件架构-zookeeper快速入门(33)
PS:重点原理和基本命令。Zookeeper 是一个有上下级关系(Leader 、follower 、Observer )的集群。客户端链接 zookeeper 集群是通过 Seesion 链接(TCP 长链接)。客户端链接以后可以对节点(存储在 zookeeper 上 znode)增删改查。Znode 有四种类型:临时、临时有序、持久、持久有序对(znode)节点做增删改查时我们可以监控其动作(Watcher 机制)还可以对节点设置权限访问。
IT架构圈
2019/03/19
4760
『互联网架构』软件架构-zookeeper快速入门(33)
推荐阅读
相关推荐
“配置”也有架构演进?看完深有痛感
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档