配置中心 选型 : Apollo Vs. Nacos Vs. spring cloud config

为什么我们需要一个微服务配置中心?

首先,我们可以想象下,如果没有配置中心,我们的项目可能是这样的:不同环境的配置文件都放在项目里面,部署时可以通过启动参数来指定使用哪个环境的配置。

这种方式有两个比较大的缺点:

一是不安全,项目的开发人员可以看到生产环境的各种地址、账号、密码等敏感信息;

二是配置更新需要重启项目才能生效,影响了服务的连续性和效率。配置中心就是为了解决这些问题而存在的。

它能够提供一个集中的地方来管理和存储配置信息,使得配置与代码分离,并且支持动态刷新配置,无需重启应用即可使新的配置生效,从而提高了系统的安全性及灵活性。

配置中心最关键的技术要素

安全性

将配置文件从项目中分离出来,并放置在一个独立的存储位置,是提高安全性的一种常见做法。然而,仅通过这种方式并不能完全解决安全问题。在测试环境和生产环境共用同一个配置中心的情况下,开发人员能够访问到测试环境中的配置,也就意味着他们同样可以获取到生产环境中的敏感信息,如地址、账号、密码等。为了进一步加强安全性,一种有效的策略是为不同的环境设置独立的配置中心。这样一来,即便开发人员拥有测试环境配置中心的访问权限,也无法直接接触到生产环境的配置信息。此外,还可以结合使用加密技术对敏感数据进行保护,以及采用细粒度的权限控制机制,确保只有授权用户才能查看或修改特定配置。

高可用性

高可用性对于配置中心而言至关重要,尤其是在系统出现故障需要紧急调整配置时,如果此时配置管理系统本身不可用,将会导致整个恢复过程受阻。实现配置中心高可用性的关键在于冗余设计。一方面,可以通过部署多个配置服务实例来提供服务端的高可用支持,这些实例间应具备良好的负载均衡能力,即使部分节点失效,剩余节点也能继续对外提供稳定的服务;另一方面,在客户端侧,当主配置服务器发生故障时,应该能自动切换至备用服务器读取配置信息,以保证业务连续性不受影响。同时,为了确保推送配置的可靠性,建议采用异步消息队列机制,使得即使在网络不稳定的情况下,也能可靠地完成配置更新操作。

实时性

实时响应配置变更对于现代应用来说非常重要。理想情况下,一旦配置发生变化,所有相关的客户端都应该能够立即感知并应用新的设置。实现这一点通常有两种方法:第一种方式是让客户端周期性地向配置中心请求最新的配置版本,这种方法简单但效率较低,特别是在配置变化频繁时可能会产生较高的网络开销;另一种更高效的方法是由配置中心主动向已注册的客户端推送变更通知,客户端收到通知后拉取最新配置即可。后者不仅减少了不必要的网络通信,还显著提高了配置更新的速度与准确性。

方便管理

良好的用户体验对于配置中心来说也是必不可少的一环。为此,大多数配置中心都会配备一个直观易用的控制台界面,供管理员执行日常维护任务。根据实际需求的不同,控制台的设计可能存在差异。一种常见的模式是所有环境共享同一套控制台工具,这种方式的好处在于简化了运维流程,降低了学习成本;而另一种模式则是根据不同环境定制专门的控制台入口,这样做的优点在于能够更好地隔离不同环境下的配置管理工作,避免误操作带来的风险。无论采取哪种形式,理想的配置中心控制台都应当具备清晰的功能布局、强大的搜索过滤功能以及完善的审计日志记录等功能,从而帮助管理员更加高效准确地管理海量配置信息。

那怎么选一个好的配置中心

从我们的经验来说。

在功能层面,你需要明确自己应用程序的具体需求,包括支持哪些类型的配置项、主要使用的编程语言以及是否涉及微服务架构等。对于采用微服务架构的企业来说,自动化的服务发现和服务注册能力尤为重要,这将直接影响到系统的灵活性和可扩展性。

系统的稳定性和可靠性,高可用设计是不可忽视的关键因素之一。一个良好的配置中心应该具备故障恢复机制,能够在部分节点出现问题时仍能正常提供服务,从而保证业务连续运行不受影响。

生态系统的成熟度,也是一个重要的考量点。广泛被采用的技术方案通常意味着社区活跃度较高,相关资源丰富,遇到问题时更容易找到解决方案或获得帮助。此外,庞大的用户基数也有助于快速发现潜在的问题,并促使开发者们不断改进产品。

部署的难易程度,也是不可忽略的一环。理想情况下,所选工具应具有较低的学习曲线及安装配置门槛,这样可以节省大量的时间和成本。同时,还应该根据自身实际情况评估所需投入的硬件资源是否合理。

寻找那些拥有良好文档支持、活跃讨论区或者专业客服团队的产品也非常重要。这些“周边”服务可以帮助你在使用过程中更加顺畅地解决问题,提升工作效率。

最后但同样关键的是,考察背后开发团队的实力及其商业模型。一个健康发展的项目往往能够获得足够的资金支持来维持其长期运营与发展,这意味着你所依赖的技术栈在未来几年内都将是安全可靠的。综上所述,通过全面权衡上述各个方面,可以帮助企业做出更为明智的选择。

主流配置中心功能选型表

Server端选型对比表

功能

子功能点

Nacos

Apollo

Spring Cloud Config

备注

发布配置

二阶段发布(编辑草稿->发布)

properties key单行变更

格式校验

实时推送

变更历史

正式历史

灰度历史

变更对比

nacos只展示变更前的内容,apollo支持单key维度变更前后对比,及全量对比

配置对比

跨实例对比

nacos跨实例对比对应apollo的跨环境对比

跨分组对比

nacos跨分组对比对应apollo跨集群对比

跨dataId对比

nacos支持任意配置对比,apollo支持appId下的某个namespace跨环境和集群对比

单行key级别对比

配置克隆

灰度发布

nacos 基于IP+标签(多key可扩展),apollo 基于IP+标签(单key)

监听查询

apollo中展示ip最新配置查询时间,nacos中展示

推送轨迹

配置推送轨迹

apollo在监听查询中展示最新配置获取时间(nacos中可优化),但没有md5

IP推送轨迹

鉴权管理

写权限

apollo对创建配置和发布配置分配不同的权限

读身份

读权限

nacos基于ram支持实例,分组,dataId命名空间维度鉴权,apollo支持配置秘钥,只校验身份,无鉴权

细粒度鉴权

nacos基于ram支持实例,分组,dataId命名空间维度鉴权,apollo支持namespace维度,apollo易用性更高

运维管理

部门管理

应用管理

用户管理

加解密

apollo需要自行加解密

导入导出

多实例管理

控制台和配置服务分离,支持通过env区分多个配置中心实例

运维审计日志

创建用户,创建应用,创建配置,修改配置,发布灰度

容量保护

集群容量,命名空间容量

反脆弱

查询配置,发布配置限流

监控

基础监控及业务监控

client端功能对比表

功能

子功能

Nacos

Apollo

Spring Cloud Config

查询配置

本地容灾

本地缓存

监听回调

配置整体监听

单行key级别监听

注解

Spring Value注解注入key值

注解监听回调

对象级别变更回调

配置注入对象

发布配置

删除配置

市面主流的配置中心的一些个人主观快速评价

Nacos 是目前推荐的配置中心之一,因其具备了功能齐全、社区活跃度高以及阿里等大公司都在使用的特点。它不仅支持多环境配置管理,还提供了服务发现和动态配置等功能,这使得它在云原生应用构建中显得尤为重要。关于多语言支持方面,虽然之前存在一定的局限性,特别是在Python的支持上不够理想,但最近社区已经在这方面进行了改进,具体情况值得持续关注。

对于Apollo来说,尽管其作为携程开源项目,在分布式配置管理和集中化管理方面做得不错,但是它的架构相对复杂,且对多语言及不同配置格式的支持较为有限。尤其是部署过程中需要依赖Eureka这样的组件,增加了使用的难度。

Spring Cloud Config 主要为Spring生态下的应用提供了一种集中式配置管理方案,它很好地融入到了Spring Cloud体系内,但缺点在于缺乏图形化的配置界面,同时对于非GitHub存储的配置文件管理工具支持不足,这也限制了其适用范围。

综上所述,基于当前情况分析,Nacos确实可以被视为最优选择,尤其是在国内环境中,其强大的功能性与良好的社区支持使其能够满足大部分企业级应用场景的需求。

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

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

相关文章

LAVE——基于大语言模型的新型代理辅助视频编辑工具允许用户根据自己的编辑风格进行调整

概述 论文地址:https://arxiv.org/abs/2402.10294 视频是一种非常强大的交流和讲述故事的媒介。随着社交媒体和视频共享平台的出现,视频的受欢迎程度直线上升,许多人都在制作和分享自己的内容。然而,对于初学者来说,视…

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…

题目 1688: 数据结构-字符串插入

第一种方式字符串 #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){string s1,s2;int n;cin>>s1>>s2>>n;s1.insert(n-1,s2);cout<<s1<<endl;return 0; } 第二种方式字符数组 …

【KodExplorer】可道云KodExplorer-个人网盘安装使用

说明&#xff1a;安装kodExplorer &#xff08;不是Kodbox&#xff09;&#xff1b;Kodbox需求服务器至少2核4G内存&#xff0c;要求环境具备php/redis/mysql/。安装kodExplorer 就是比较方便简单部署&#xff0c;个人版免费。 一、安装环境需求 服务器: Windows&#xff0c;…

在服务器(linux系统)安装anaconda

按照官方教程操作即可 1.下载anaconda3&#xff0c;选择对应版本 curl -O https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh2.安装anaconda bash ~/Anaconda3-2024.06-1-Linux-x86_64.sh一直按“enter”键查看协议&#xff0c;然后选择“yes”即可。…

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…

建立基于TCP的客户端和服务端

函数介绍&#xff1a; 1.socket() 作用&#xff1a;创建套接字 domain: AF_INET&#xff1a;IPv4 Internet 协议族。AF_INET6&#xff1a;IPv6 Internet 协议族。AF_UNIX&#xff1a;Unix 域协议族&#xff0c;用于在同一台主机上的进程间通信。 type: SOCK_STREAM&#xff1a…

SQL语句在MySQL中如何执行

MySQL的基础架构 首先就是客户端&#xff0c;其次Server服务层&#xff0c;大多数MySQL的核心服务都在这一层&#xff0c;包括连接、分析、优化、缓存以及所有的内置函数&#xff08;时间、日期、加密函数&#xff09;&#xff0c;所有跨存储引擎功能都在这一层实现&#xff1…

轻量化特征融合 | 一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作

论文题目&#xff1a;A Lightweight Fusion Strategy With Enhanced Interlayer Feature Correlation for Small Object Detection 论文链接&#xff1a;https://ieeexplore.ieee.org/abstract/document/10671587 giuhub&#xff1a;https://github.com/nuliweixiao/EFC 关键词…

vue2+element-ui实现多行行内表格编辑

效果图展示 当在表格中点击编辑按钮时:点击的行变成文本框且数据回显可以点击确定按钮修改数据或者取消修改回退数据: 具体实现步骤 1. 行数据定义编辑标记 行数据定义编辑标记 当在组件中获取到用于表格展示数据的方法中,针对每一行数据添加一个编辑标记 this.list.f…

docker简单私有仓库的创建

1&#xff1a;下载Registry镜像 导入镜像到本地中 [rootlocalhost ~]# docker load -i registry.tag.gz 进行检查 2&#xff1a;开启Registry registry开启的端口号为5000 [rootlocalhost ~]# docker run -d -p 5000:5000 --restartalways registry [rootlocalhost ~]# dock…

使用 GD32F470ZGT6,手写 I2C 的实现

我的代码&#xff1a;https://gitee.com/a1422749310/gd32_-official_-code I2C 具体代码位置&#xff1a;https://gitee.com/a1422749310/gd32_-official_-code/blob/master/Hardware/i2c/i2c.c 黑马 - I2C原理 官方 - IIC 协议介绍 个人学习过程中的理解&#xff0c;有错误&…

VSCode,Anaconda,JupyterNotebook

文章目录 一. 下载VSCode并安装二. 下载Anaconda并安装1. anaconda介绍2. Anaconda的包管理功能3. Anaconda的虚拟环境管理4.Jupyter Notebook5. Jupyter Notebook使用简介6. Jupyter Notebook快捷键7.Jupyter notebook的功能扩展8. Jupyter notebook和Jupyter lab的区别 三. V…

【安全研究】某黑产网站后台滲透与逆向分析

文章目录 x01. 前言x02. 分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与…

力扣 343. 整数拆分 (JAVA 记忆化搜索->动态规划)

给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解释: 10 3 …

一次tomcat实战jvm线上问题定位排查和解决

问题分析&#xff1a; 问题来源是客户通过闲鱼找到了我这边进行问题的排查&#xff0c;给我发了一个报错日志&#xff0c;让我帮忙分析。 首先他的项目比较老&#xff0c;很多年以前开发的软件&#xff0c;但是具体做什么业务我不知道。下面来看日志的报错分析。 问题&#…

【Linux】软硬链接

文章目录 软链接硬链接软硬链接的使用场景&#xff1a;软链接的使用场景硬链接的应用场景 总结 软链接 软链接是一种指向文件或目录的快捷方式&#xff0c;是文件系统中非常重要的功能。它类似于Windows中的快捷方式&#xff0c;但更灵活&#xff0c;可以跨文件系统创建。 ln…

操作系统(5)进程

一、定义与特点 定义&#xff1a;进程是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结构的基础。 特点&#xff1a; 动态性&#xff1a;进程是动态创建的&#xff0c;有它自身的生命周期&#xff0c;…

安宝特分享 | AR技术助力医院总院与分院间的远程面诊

随着科技的迅猛发展&#xff0c;增强现实&#xff08;AR&#xff09;技术在各行各业的应用愈发广泛&#xff0c;特别是在医疗领域&#xff0c;其潜力和价值正在被不断挖掘。在现代医疗环境中&#xff0c;患者常常面临“看病难、看病远、看病急”等诸多挑战&#xff0c;而安宝特…

CNCF云原生生态版图-分类指南(三)- 运行时

CNCF云原生生态版图-分类指南&#xff08;三&#xff09;- 运行时 CNCF云原生生态版图-分类指南三、运行时&#xff08;Runtime&#xff09;&#xff08;一&#xff09;云原生存储&#xff08;Cloud Native Storage&#xff09;1. 是什么&#xff1f;2. 解决什么问题&#xff1…