学习:Nacos

144 阅读5分钟

大家好!本人是小懒虫学技术,希望能找到能够一起奋斗的人,都说伯乐难求,希望通过自己努力能找到吧,哈哈哈哈。学习技术,希望能遇到伯乐帮小弟。----

开始学习吧.....

1.Nacos的概念

1.配置(Configuration)

在系统开发过程中通常会将⼀些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR包等)更好地和实际的物理运行环境进行适配。配置管理⼀般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之⼀。

2.配置管理 (Configuration Management)

在 Nacos中,系统中所有配置的存储、编辑、删除、灰度管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

3.配置服务 (Configuration Service)

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

4.配置项(Configuration Item)

⼀个具体的可配置的参数与其值域,通常以 param-key = param-value的形式存在。例如我们常配置系统的日志输出级别(logLevel = INFO | WARN | ERROR)就是⼀个配置项。

5.配置集(Configuration Set)

⼀组相关或者不相关的配置项的集合称为配置集。在系统中,⼀个配置文件通常就是⼀个配置集,包含了系统各个方面的配置。例如,⼀个配置集可能包含了数据源、线程池、日志级别等配置项

6.命名空间(Namespace)

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group或 Data ID的配置。Namespace的常用场景之⼀是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如数据库配置、限流阈值、降级开关)隔离等。如果在没有指定 Namespace的情况下,默认使用 public命名空间。

7.配置组(Group)

Nacos中的⼀组配置集,是配置的维度之⼀。通过⼀个有意义的字符串(如 ABTest中的实验组、对照组)对配置集进行分组,从而区分 Data ID相同的配置集。当您在 Nacos上创建⼀个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP。配置分组的常见场景:不同的应用或组件使用了相同的配置项,如 database_url配置和 MQ_Topic配置。

8.配置 ID(Data ID)

Nacos中的某个配置集的 ID。配置集 ID是划分配置的维度之⼀。Data ID通常用于划分系统的配置集。⼀个系统或者应用可以包含多个配置集,每个配置集都可以被⼀个有意义的名称标识。DataID尽量保障全局唯⼀,可以参考 Nacos Spring Cloud中的命名规则:prefix{prefix}-{spring.profiles.active}-${file-extension}

9.配置快照(Configuration Snapshot)

Nacos的客户端 SDK会在本地生成配置的快照。当客户端无法连接到 Nacos Server时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。

2.nacos的配置模型

微信截图_20230619224632.png

  1. Nacos提供可视化的控制台,可以对配置进行发布,更新,删除,灰度版本管理等功能。
  2. SDK可以提供发布配置,更新配置,监听配置等功能。
  3. SDK通过GRPC长连接监听配置变更,Server端和Client端进行配置的MD5和本地的MD5进行比较,不同进行推送配置。
  4. SDK会保存配置的快照,当服务端出现问题时从本地获取。

3.nacos的配置表相关信息

config_info 存储配置信息的主表,里面包含 dataId、groupId、content、tenantId、encrypt edDataKey 等数据。

config_info_beta 灰度测试的配置信息表,存储的内容和 config_info 基本相似。有⼀个 beta_ips 字段用于客户端请求配置时判断是否是灰度的 ip。

config_tags_relation 配置的标签表,在发布配置的时候如果指定了标签,那么会把标签和配置的关联信息存储在该表中。

his_config_info 配置的历史信息表,在配置的发布、更新、删除等操作都会记录⼀条数据,可以做多版本管理和快速回滚

4.Nacos的一致性协议

Nacos 在开源支持就定下了⼀个目标,尽可能的减少用户部署以及运维成本,做到用户只需要⼀个 程序包,就可以快速以单机模式启动 Nacos 或者以集群模式启动 Nacos。而 Nacos 是⼀个需要 存储数据的⼀个组件,因此,为了实现这个目标,就需要在 Nacos 内部实现数据存储。单机下其 实问题不大,简单的内嵌关系型数据库即可;但是集群模式下,就需要考虑如何保障各个节点之间 的数据⼀致性以及数据同步,而要解决这个问题,就不得不引入共识算法,通过算法来保障各个节 点之间的数据的⼀致性。