简介

前面我们分析了携程的 apollo(见 详解apollo的设计与使用),现在再来看看阿里的 nacos。

和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理、分环境管理、即时生效等等。不过,nacos 还具备了服务发现的功能。

分析 apollo 时,我们通过四个问题展开:

  1. 为什么使用配置中心
  2. 如何设计一个配置中心
  3. apollo 是如何设计的
  4. 如何使用 apollo

当然,我们也可以用同样的套路来分析 nacos,不过,第 1、2 个问题是一样的,没必要再讲一遍,而第 4 个问题嘛,我看官网的文档已经足够详细。所以,这篇博客将重点分析 nacos 和 apollo 在设计上的差异。

以下分析基于 apollo 1.8.0 和 nacos 2.1.0。

安全性的差异

这里说的安全性,不是指控制台读配置中心,而是客户端读配置中心。

之前我说过,如果所有环境都共用一个配置中心,会存在安全问题。因为开发人员能拿到测试环境的配置,按理也能拿到生产环境的配置。

为了解决这个问题,一般有两个方案:

  1. 不同环境使用不同的配置中心。apollo 用的就是这一种,当客户端需要获取生产配置时,运维需要在项目的启动参数中指定生产环境的配置中心。这种方案要想可靠,生产环境的 config server 地址绝对不能泄露。可怕的是,我曾经就遇到过直接把 config server 注册到公用 eureka 上面的。

  1. 不同环境使用同一的配置中心,但要做好环境隔离。nacos 则采用这一种,隔离的方案就是命名空间 + 鉴权。和 apollo 不同,客户端去读 nacos 是需要账号密码的,当客户端需要获取生产配置时,运维需要在项目的启动参数中指定生产环境的 namespace 以及对应的账号密码。

上面说到了 namespace。apollo 和 nacos 都有这个概念,不过,在 apollo 里,namespace 可以看成是一个具体的配置文件,而 nacos 里,namespace 表示具体的环境。它们的数据模型如下图。使用 apollo 是通过连接不同的 config server 来区分环境,而 nacos 则通过指定 namespace 来区分

综上,我们知道,要想确保安全,使用 apollo 时不能泄露 config server 生产环境的地址,使用 nacos 时不能泄露对应生产环境 namespace 的账号密码。如果要说哪种方案更安全,我会更倾向于 nacos,因为相比账号密码,服务器地址会更容易泄露。// zzs001

系统复杂度的差异

在讲 apollo 的设计时,我吐槽过,apollo 的架构太重了。

首先,它把配置中心拆成了 config service、admin service、portal,这一点我倒是可以接受。

我不能接受的是,apollo 为了实现客户端到 config service 的负载均衡而引入了过多的组件。如图,增加了 SLB、meta server、eureka 等组件,这个我真的觉得没必要,直接使用 SLB 来做负载均衡就行。但官方说之所以这么设计是为了避免客户端和 config service 之间的长连接给 SLB 增加过多的负担,这么说的话,,也不无道理。

不过,有一点比较好的就是,apollo 把 config service、eureka 和 meta server 打包在一起部署。

我们来看看 nacos,首先,它没有将配置中心拆成很多个服务,其次,它的负载均衡方案也比较简单,一个 SLB 就可以搞定。要知道 nacos 同样也维护着与客户端的长连接。

那么,这两种架构哪种更好呢?我会更倾向于使用 nacos,至少中小型系统我会这么选择,因为它更简单。不过,apollo 考虑到长连接对 SLB 的负担而增加了那么多组件,按理是经过了深思熟虑,所以,我很想知道,在大型系统中使用 nacos,是否有遇到过 SLB 瓶颈的案例,希望有大佬指点。

以上基本讲完了 nacos 的结构和使用。如有错误,欢迎指正。

最后,感谢阅读。

参考资料

Nacos 官方文档

本文为原创文章,转载请附上原文出处链接:https://www.cnblogs.com/ZhangZiSheng001/p/16344519.html

配置中心的设计-nacos vs apollo的更多相关文章

  1. K8S(12)配置中心实战-多环境交付apollo三组件

    k8s配置中心实战-多环境交付apollo三组件 目录 k8s配置中心实战-多环境交付apollo三组件 1.环境准备工作 1.1 zk环境拆分 1.2 namespace分环境 1.3 数据库拆分 ...

  2. K8S(11)配置中心实战-单环境交付apollo三组件

    k8s配置中心实战-交付apollo三组件 目录 k8s配置中心实战-交付apollo三组件 1 apollo简单说明 1.1 apollo最简架构图: 1.2 apollo组件部署关系 2 为app ...

  3. SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码分析(上)

    不断踩坑并解决问题是每个程序员进阶到资深的必要经历并以此获得满足感,而不断阅读开源项目源码和总结思想是每个架构师成长最佳途径.本篇拉开SpringCloud Alibaba最新版本实战和原理序幕,以工 ...

  4. 在kubernetes集群里集成Apollo配置中心(6)之实战使用apollo分环境管理dubbo服务

    生产实践 1.迭代新需求/修复BUG(编码--->提git) 2.测试环境发版,测试(应用通过编译打包发布至test命名空间) 3.测试通过,上线(应用镜像直接发布至prod命名空间) 系统架构 ...

  5. kubernetes实战-配置中心(二)交付apollo配置中心到k8s

    apollo官网:官方地址 apollo架构图: apollo需要使用数据库,这里使用mysql,注意版本需要在5.6以上: 本次环境mysql部署在10.4.7.11上,使用mariadb:10.1 ...

  6. SpringBoot使用Nacos配置中心

    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云 ...

  7. 携程Apollo(阿波罗)配置中心Spring Boot迁移日志组件,使用配置中心进行管理的思路

    说明: 1.Spring Boot项目默认使用logback进行日志管理 2.logback在启动时默认会自动检查是否有logback.xml文件,如果有时会有限加载这个文件. 3.那么如果是用配置中 ...

  8. 配置中心-Apollo

    配置中心-Apollo 2019/10/01 Chenxin 配置服务主要有 携程Apollo.百度Disconf.阿里ACM,目前以Apollo用户量最大.适用场景,多用于微服务,与K8S结合好. ...

  9. Apollo配置中心的实战

    31.携程 Apollo 配置中心介绍~1.mp4 32.Apollo核心概念~1.mp4 32.Apollo核心概念~1.mp4 每个应用需要有一个唯一的AppID 要在指定的机器上的server. ...

随机推荐

  1. parseFloat的取值

    <script type="text/javascript"> document.write(parseFloat("10")) document. ...

  2. 《头号玩家》AI电影调研报告(四)

    五. 现实中对于技术的实现 1.自由变身 电影中,主人公借助"魔幻眼镜"让自己快速变成另一个人的模样,现实中我们一样也能做到! 在今年游戏开发者大会(GDC)上,一个名为" ...

  3. 文档声明(Doctype)和<!Doctype html>有何作用? 严格模式与混杂模式如何区分?它们有何意义?

    文档声明的作用: 文档声明是为了告诉浏览器,当前HTML文档使用什么版本的HTML来写的,这样浏览器才能按照声明的版本来正确的解析. <!doctype html> 的作用就是让浏览器进入 ...

  4. 2020极客大挑战Web题

    前言 wp是以前写的,整理一下发上来. 不是很全. 2020 极客大挑战 WEB 1.sha1碰撞 题目 图片: 思路 题目说,换一种请求方式.于是换成post.得到一给含有代码的图片 图片: 分析该 ...

  5. mybatis-day1入门案例

    首先应先创建maven工程 (jar包要导入,五个核心jar包) 如果测试运行时出现了不支持版本5,则要修改以下内容 类的路径如下 1.配置pom.xml依赖 <?xml version=&qu ...

  6. Power App用到的一些函数

    1.Filter([表名],查询条件&&查询条件),会返回一张表: 2.Search([表名], "值", "字段名"),会返回一张表: 3.L ...

  7. 巧用 background-clip 实现超强的文字动效

    最近,有同学询问,如何使用 CSS 实现如下效果: 看起来是个很有意思的动效. 仔细思考一下,要想实现这类效果,其实用到的核心属性只有一个 -- background-clip: text. 有意思的 ...

  8. 面试 | Java 算法的 ACM 模式

    (Java 算法的 ACM 模式) 前言 经常在 LeetCode 上用核心代码模式刷题的小伙伴突然用 ACM 模式可能会适应不过来,把时间花在输入输出上很浪费时间,因此本篇笔记对 Java 算法的 ...

  9. java过滤器拦截器的执行时机

    https://www.cnblogs.com/shamo89/p/8534580.html https://www.cnblogs.com/juanzila/p/11276067.html

  10. [python][flask] Jinja 模板入门

    Flask 和 Django 附带了强大的 Jinja 模板语言. 对于之前没有接触过模板语言的人来说,这类语言基本上就是包含一些变量,当准备渲染呈现 HTML 时,它们会被实际的值替换. 这些变量放 ...