常识五配置中心

简介: 常识系列,作为一名互联网门外汉的科普系列本来这篇文章想谈一下zookeeper,现在已经家喻户晓了。结果看到江南白衣的文章提到配置中心就跟你讲zk,etcd的,可能是个空想玩家,或者他家系统很小;不由得冒了两滴冷汗,高人总是一针见血。所以还是多关注一下互联网的架构,而不是技术的细枝末节本篇涉及到的内容包括:1. 游戏中配置中心的进化2. 什么样的配置中心才叫好3. 流行架构4. zookeeper

常识系列,作为一名互联网门外汉的科普系列

本来这篇文章想谈一下zookeeper,现在已经家喻户晓了。结果看到江南白衣的文章

提到配置中心就跟你讲zk,etcd的,可能是个空想玩家,或者他家系统很小;

不由得冒了两滴冷汗,高人总是一针见血。

所以还是多关注一下互联网的架构,而不是技术的细枝末节

本篇涉及到的内容包括:

  1. 游戏中配置中心的进化
  2. 什么样的配置中心才叫好
  3. 流行架构
  4. zookeeper

配置中心

什么是配置中心?简单来说,就是一种统一管理各种应用配置的基础服务组件

服务一般有很多依赖配置,例如访问数据库有连接字符串配置,连接池大小和连接超时配置,这些配置在不同环境(开发/测试/生产)一般不同,比如生产环境需要配连接池,而开发测试环境可能不配,另外有些参数配置在运行期可能还要动态调整,例如,运行时根据流量状况动态调整限流和熔断阀值。

传统配置文件方式虽然把配置项分离到单独的配置文件,但是修改一个配置项,需要提交版本管理,发布,重启。整个过程比较麻烦,特别是发布多台机器。整个配置上线流程跟修改代码没有太大区别。不利于集中式管理和动态调整。

现在一般架构中都有个配置中心了,不管是独立还是集成,都有这么一块空间,尤其在微服务流行之后,服务之间有着错综复杂的依赖关系,更是必不可少。

配置中心进化史

这儿谈的进化史,是一款月流水过亿的游戏配置中心填坑的过程。当然,那时我们还不叫配置中心,也不知这世上还有个配置中心的术语。不要笑,我们那时就是这么的无知无敌。

游戏开发中,除了基础的技术配置文件,如数据库连接配置,连接池配置;有很多的业务配置文件,如各个道具信息,怪物信息,活动信息

这此配置信息,可能是动态的,也有些是静态的。

动态配置和静态配置的区别

曾经我也傻傻分不清楚其区别是啥,这很正常。动态和静态这是一个相对的概念,海枯石烂,永远不变的那不叫配置,可能是撩妹的鬼话,即使这个配置可能是放在一个看起来很像配置文件的文本里,配置一定是可能修改其值的,而是否是动态配置主要是看这个配置是不是跟应用的版本构建发布(build-deploy lifetime)强绑定的。如果一个配置项,跟软件的版本构建是不耦合的,在应用进程运行时,可能需要变更配置值的就是动态配置,哪怕是变更频率可能非常低,也许你设计了一个配置项,发现最后下来3年也没变更过一次,那也是动态配置,相反,配置变更只发生在软件版本构建和发布的那个点,那么就是静态配置,哪怕你构建很频繁,1个小时就来一回,那也是个静态配置,举个简单的例子:

build-version = 3.4.6-1569965 这个配置项,永远只在某个软件版本被构建出来时会变更其值,一旦这个版本被构建出来,并且在程序运行时,是一定没有变更诉求的,这就是一个跟构建绑定的静态配置。而文章开始时举得logLevel的例子,则是一个动态配置的例子。

所以看一下你的系统的配置项,你会发现动态配置其实更多,而跟行为演进相关的几乎都是动态配置。

第一版本

大体的架构如下:

image.png

这是一个pull模型

组成部分:

  1. 配置服务器
  2. 游戏服务器

首先配置服务器提供上传文件功能,以及被配置文件下载的能力。

比如寻宝活动 xunbaoconfig 上传时会选择对应的游戏区服,会产生两个文件


  1. xunbaoconfig,配置参数文件
    文件中保持了文件md5值,游戏区服与文件对应关系 [gameserver1,md5,xunbaocinfig-xxxx.conf]


  2. xunbaoconfig-xxxx.conf 配置文件
    这就是上传的最新配置文件

其次,游戏服务器需要提供支持动态配置的能力。并且定时去拉取远程配置文件,比对远程文件与当前内存中的是否一致,若不一致,重新加载配置文件

伪代码:

  1. //配置文件MD5值与配置的对应关系
  2. configMap<cofingFileMd5,Config>

游戏服务器定时去拉取相应的配置参数文件,xunbaoconfig,获取当前区服配置文件的md5值以及文件名。

若md5值与缓存数据不一致,就拉取真实的xunbaoconfig-xxx.conf文件

问题

此版本,看似一切正常。

在韩服开到十几个区的时候,出现了一个问题

文件下载不完整

更换tomcat

这儿使用的web容器是tomcat,其中的原因当时没有细究了。后来让运维换成了ngnix,静态资源一律走ngnix就没有问题了

国服开到几百个区时,也出现了类似问题,每次维护后,几百个区一起开启,会有部分区,启动失败,因为加载不到配置文件;或者是没有加载到新配置,使用了老的配置。

分析下来,几百个区服几乎在同一时刻去配置服务器拉取文件,配置服务器压力即大,这也就是单点瓶颈故障。

就算没有这次的故障,后面开到几千个区服时,也会出现带宽瓶颈。大一点配置如果有5M,那一千个服就是5G,不仅是单台服务器的带宽,可能会严重阻塞整个机架的带宽。

动静分离

为了解决这个问题,不能把所有文件都放在配置中心了,需要分离,把静态的配置文件直接放到区服上,不用再去拉取。

虽然动静分离,但也只是减轻了这种状况,并没有彻底解决。

第二版本

image.png


这是push模型

第一版本,每个区服都去拉取配置,给配置服务器带来了很大的压力

现在配置不再以每个区服为单位,而是以物理服务器为单位推送配置文件。

首先,上传配置文件,与pull模型一致。

再使用rsync同步到每个区服的物理机上,原先一台物理机上会开设八台逻辑服,现在以物理机为单位,配置中心的压力大大的下降。

而且rsync不再是定时去同步,而是当配置变动时,再去主动触发

配置中心标准

什么样的配置中心才是好的配置中心

  1. 不能单点,以上面的进化实例,明显如果配置中心挂了,那整个游戏就失去了动态能力,如果本地没有动态配置文件备份,就完全丧失服务能力
  2. 支持web界面,可视化操作;这是很多技术人员的通病,直接上个shell命令,多专业,其实这降低真个系统的可用性,可维护性
  3. 权限管理、发布审核、操作审计;1、应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误,2、所有的操作都有审计日志,可以方便地追踪问题,回滚也方便
  4. 灰度发布
  5. 版本发布管理;所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
  6. 实时推送;现在很多配置中心使用zk之类框架,主要就是用它的发布订阅实现实时推送能力

客户端支持

配置中心拥有这些能力,还需要客户端的支持


  1. 配合配置中心的实时/灰度推送,在参数变化时调用客户端自行实现的回调接口,不需要重启应用。


  2. 支持环境变量,JVM启动参数,配置文件,配置中心等多种来源按优先级互相覆盖,并有接口暴露最后的参数选择。


  3. 配置文件中支持多套profile,如开发,单元测试,集成测试,生产。

流行框架

配置中心,这么重要的组件,众目聚集,也就诞生了很多开源产品

业界也有很多比较成熟的开源项目:

  • disconf: 百度开源的分布式配置管理平台。项目文档上说百度、滴滴打车、银联、网易、拉勾网等知名互联网公司在使用。挺新的项目,并且目前只支持Java语言。
  • QConf: 360开源的分布式配置管理平台。跟disconf一样使用了zookeeper做配置存储,不同在于QConf使用了agent和共享内存的方式,并且支持多种语言。
  • Diamond 淘宝开源的持久配置的管理系统,支持各种持久信息(比如各种规则,数据库配置等)的发布和订阅。特点是简单,存储是MySQL,并且是拉模式。
  • Spring Cloud Config: 特点就是与Spring完美结合

不管是何产品,架构都可以简化为:

image.png

zookeeper

Zookeeper有两篇论文:

一篇是Zab,就是介绍Zookeeper背后使用的一致性协议的(Zookeeper atomic broadcast protocol)

一篇就是介绍Zookeeper本身的。在这两篇论文里都提到Zookeeper是一个分布式协调服务(a service for coordinating processes of distributed applications)。

这下次再开一篇,内容不少!

参考资料

服务化体系之-配置中心,在ZK或etcd之外



目录
相关文章
|
人工智能 搜索推荐
阿里云logo设计官方入口链接10秒生成海量LOGO商用无忧
阿里云logo设计官方入口开启二级域名,阿里云智能logo设计,为用户生成logo突破200万件!每个生成的logo都有数十种VI应用样式,办公用品、户外广告、品牌周边…可直观感受logo在各种场景下的效果,个性化的丰富应用效果,帮助用户进行判断。
16873 5
阿里云logo设计官方入口链接10秒生成海量LOGO商用无忧
|
4月前
|
人工智能 自然语言处理 Java
Trae 3.0月活破500万:但为什么说Java开发者需要的不是代码补全,而是工程交付?
trae月活突破500万,,Solo Mode 3.0实现无人值守全流程编程。这是AI编程工具的一个里程碑。Trae 3.0的定位从"代码补全"升级到"全流程代理"——自然语言输入需求,AI自动完成编码、测试、部署全链路。它甚至可以在夜间和周末自主运行,批量处理多个项目。
|
4月前
|
人工智能 运维 API
大模型企业本地化部署与数据安全实践:RAG 回答如何提供引用证据链
本文探讨企业大模型本地化部署中RAG问答的“证据链”实践:如何让AI回答附带可追溯的引用依据(文件名、版本、章节、生效时间等),提升制度、合同等关键场景的可信度与合规性,兼顾数据安全与业务落地。
365 1
|
3月前
|
人工智能 自然语言处理 安全
标书AI工具使用避坑:大模型原生痛点背后的合规风险与注意事项
AI标书工具虽提升效率,但大模型固有缺陷——幻觉编造、行业知识不足、长文理解偏差、数据外泄风险——在强监管招投标中易引发弄虚作假、废标、串标嫌疑等五大合规风险。须优选垂直AI工具,坚持“AI生成+人工终审”,严控数据安全与规则同步,方能真正提效避险。
|
5月前
|
人工智能 安全 前端开发
来不及学 AI 就不用学了?——从 AI 到 Agent,再到 Harness Engineering 与 Loop Engineering :一条被产品化加速的技术演进线
本文是一份AI工程演进图谱,以「概念地图」形式梳理2022–2026年LLM→Agent→Harness→Loop的演进脉络,厘清OpenClaw、MCP、Skills等核心概念的关系,破除术语迷雾,强调Harness Engineering才是当前最值得投入的系统性工程能力。(239字)
669 1
|
4月前
|
弹性计算 运维 安全
阿里云轻量应用服务器介绍:价格、适用场景、使用须知及与云服务器区别与选择参考
阿里云轻量应用服务器是面向单机应用场景的轻量级云服务器,提供一键部署、域名解析、安全防护及运维监控等一站式服务,极大降低入门用户上云门槛。产品提供通用型(35元/月起)、CPU优化型(200元/月起)、多公网IP型(53元/月起)及容量型(55元/月起)等多种套餐,支持系统镜像与应用镜像两种创建方式,适用于个人博客、企业官网、Web应用等场景。当前限时抢购价2核2G仅38元/年(每日10点、15点开抢),2核4G低至9.9元/首月或199元/年,性价比突出。
|
6月前
|
BI
Quick BI使用案例20:交叉表中使用嵌套计算功能统计各个区域月累计订单金额及排名
本文介绍如何用Quick BI“月累计-按列排名”功能,在月底前7天精准识别安全区、冲刺区、止损区,动态调配资源,提升月度KPI达标率。(239字)
|
7月前
|
安全 前端开发 Java
SpringBoot注解参数校验,给代码穿上“防弹衣”
SpringBoot的注解校验就像给你的方法参数请了个私人保镖,专门拦截那些不靠谱的输入。没有它?用户传个`null`过来,你的程序可能就会表演“当场崩溃”的绝活。
268 3
|
7月前
|
网络协议 算法 数据可视化
工业机器人基础:五大核心坐标系
在真实的机械臂调试现场,“换个夹爪就撞机”或“工装偏移2厘米导致几百个点位全废”是极易踩坑的工程痛点。其核心原因往往在于开发者未能彻底理清底层控制中的空间转换逻辑。本文剥离了冗长的纯数学推导,从实际工程应用的视角出发,系统梳理了工业机器人的**五大核心坐标系(大地、基、关节、工具、工件)**及其空间变换链路(TF Tree)。通过真实的调试场景,深入拆解 TCP 标定、姿态重定位与离线编程背后的物理映射原理。无论你是操作示教器的现场工程师,还是编写底层运动规划算法的开发者,本文都将为你构建清晰、实用的机器人空间几何基石。
1044 2
|
7月前
|
数据采集 人工智能 监控
企业终端安全管理实战:从"被动救火"到"主动防御"的体系化建设
2025年某金融科技公司因AI训练数据未脱敏致12万条敏感信息泄露,暴露终端安全管理短板。本文剖析“资产看不清、行为管不住、事件追不回”三大痛点,提出覆盖资产纳管、上网管控、文件审计、外设准入的实战方案,倡导构建“看得见、管得住、追得回”的终端安全防线。