配置管理中心之Nacos
简介
nacos是阿里团队使用Java开发,nacos致力于发现、配置和管理微服务。nacos提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据以及流量管理。
nacos可以更敏捷和容易地构建、交付和管理微服务平台。nacos是构建以“服务”为中心的现代应用架构(微服务范式、云原生范式)的服务基础设施。
nacos几乎支持所有主流类型的“服务”的发现、配置和管理。比如:
kubernetes
RPC&Dubbo RPC
Spring Cloud
关键特性
1、服务发现和服务健康监测
nacos支持基于DNS和基于RPC的服务发现。服务提供者使用原生SDK、openapi、或者一个独立的agent TODO注册service后,服务消费者可以使用DNS TODO或者HTTP&API查找和发现服务。
nacos提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。nacos支持传输层和应用层的健康检查,对于复杂的云环境和网络拓扑环境中服务的健康检查,nacos提供了agent上报模式和服务端主动检测2种健康模式。nacos还提供了统一的健康检查仪表盘,帮助您根据健康检查状态管理服务的可用性以及流量。
2、动态配置服务
动态配置服务可以以中心化、外部化和动态化的方式管理所所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变的更加高效和敏捷。
配置中心化管理让实现无状态服务变的更简单,让服务按需弹性扩展变得更加容易。
nacos提供了一个简洁易用的UI,帮助管理所有的服务和应用的配置。nacos还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,更安全的在生产环境中管理配置变更和降低配置带来的风险。
3、动态DNS服务
动态DNS服务支持权重路由、可以更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能更容易实现以DNS协议为基础的服务发现。
4、服务及其元数据管理
nacos能从微服务平台建设的视角管理数据中心的所有服务以及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由以及安全策略、服务的SLA以及最主要的metrics统计数据。
功能图
生态图
nacos概念
地域
物理的数据中心,资源创建成功后不能更换。
可用区
同一地域内,电力和网络互相独立的物理区域。同一可用区内,实例的网络延迟较低。
接入点
地域的某个服务的入口域名。
命名空间
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的group或data id配置。
namespace的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源 (如配置、服务)隔离等。
配置
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如tar、war包)更好的和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更时调整系统运行时的行为的有效手段。
配置管理
系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。
配置项
一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如在系统常配置的日志输出级别(logLevel=INFO|WARN|ERROR)就是一个配置项。
配置集
配置集ID
nacos中的某个配置集的ID。配置集ID是组织划分配置的维度之一。data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。data id 通常采用java类包的命名规则(如 com.taobao.tc.refund.log.level)保证全局唯一性,此命名规则非强制性。
配置分组
nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串,对配置集进行分组,从而区分data id 相同的配置集。当在nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,比如database_url配置和MQ_topic配置。
配置快照
nacos的客户端SDK会在本地生成配置的快照。当客户端无法连接到nacos server时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于git中的本地commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期的概念。
服务
通过预定义接口网络访问的提供给客户端的软件功能。
服务名
服务提供的标识,通过该标识可以唯一确定其指代的服务。
服务注册中心
存储服务实例和服务负载均衡策略的数据库。
服务发现
元信息
nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权策略、各种自定以标签,从作用范围来看,分为服务级别的元信息、集群的元信息以及实例的元信息。
应用
用于标识服务提供放的服务的属性。
服务分组
不同的服务可以归类到同一分组。
虚拟集群
同一个服务下的所有服务实例组成一个默认的集群,集群可以被进一步按需求划分,划分的单位可以是虚拟集群。
实例
权重
实例级别的配置。权重为浮点数。权重越大,分配给该实例的流量越大。
健康检查
以指定方式检查服务下挂载的实例的健康度,从而确认该实例是否能提供服务。根据检查结果,实例会被判断为健康或不健康。对于服务发起解析请求时,不健康的实例不会返回给客户端。
健康保护阈值
为了防止因过多实例不健康导致流量全部流向健康实例,继而造成流量压力把健康实例压垮并形成雪崩效应,应将健康保护阈值定义为一个0到1之家的浮点数。当域名健康实例占总服务实例的比例大小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然会损失一部分流量,但是保证了集群的剩余健康实例能正常工作。
作用
使用nacos简化服务发现、配置管理、服务治理以及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。
动态配置服务
动态配置服务能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
服务发现及管理
动态服务发现对以服务为中心的应用架构方式非常关键。nacos支持DNS-based和RPC-based模式的服务发现,nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助nacos可以更容易地为服务实现断路器。
动态DNS服务
通过支持权重路由,动态DNS服务能轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能更容易以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
架构
基本架构及概念
服务
服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。nacos支持主流的服务生态,如kebernetes service等。
服务注册中心
服务注册中心,他是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查询服务的可用实例。服务注册中心可能会调用服务实例的健康检查API来验证它是否能够处理请求。
服务元数据
服务元数据是指包括服务端点、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。
服务提供方
是指提供可复用和可调用服务的应用方。
服务消费方
是指会发起对某个服务调用的应用方。
配置
在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在,目的是让静态的系统工件或交付物更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。
配置管理
在数据中心,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。
配置服务
在服务或应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。
逻辑架构图及组件
服务管理
实现服务CRUD、域名CRUD、服务健康状态检查,服务权重管理等功能。
配置管理
实现配置管理CRUD,版本管理、灰度管理、监听管理、推送管理、聚合数据等功能。
元数据管理
提供元数据CURD和打标能力。
插件机制
实现三个模块可分可合能力,实现扩展SPI机制。
事件机制
实现异步化事件通知,sdk数据变化异步通知等逻辑。
日志模块
管理日志分类,日志级别,日志可移植性,日志格式,异常码+帮助文档。
回调机制
sdk通知数据,通过统一的模式回调用户处理。接口和数据结构需要具备可扩展性。
寻址模块
解决IP,域名,nameserver、广播等多种寻址模式、需要可扩展。
推送通道
解决server与存储、server间、server与sdk间推送问题。
容量管理
管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。
流量管理
按照租户,分组等多个维度对请求频率,长连接个数,报文大小,请求流控进行控制。
缓存机制
容灾目录,本地缓存,server缓存机制。容灾目录需要使用工具。
启动模式
按照单机模式,配置模式,服务模式下,dns模式或者all模式,启动不同的程序+UI。
一致性协议
解决不通数据,不同一致性要求情况下,不同一致性机制。
存储模块
解决数据持久化、非持久化存储,解决数据分片问题。
nameserver
解决namespace到clusterid的路由问题,解决用户环境与nacos物理环境映射问题。
CMDB
解决元数据存储与三方cmdb系统对接问题,解决应用,人,资源关系。
Metrics
暴露标准metrics数据,方便与三方监控系统打通。
trace
暴露标准trace,方便与SLA系统打通,日志白平化,推送轨迹等能力,并且可以和计量计费系统打通。
接入管理
相当于阿里云开通服务,分配身份、容量、权限过程。
用户管理
解决用户管理,登录,sso等问题。
权限管理
解决身份识别,访问控制,角色管理等问题。
审计系统
扩展接口方便与不同公司审计系统打通。
通知系统
核心数据便更或者操作,方便通过SMS系统打通,通知到对应人数据变更。
openAPI
暴露标准rest风格http接口,简单易用,方便多语言集成。
console
易用控制台,做服务管理、配置管理等操作。
SDK
多语言sdk
agent
dns-f类似模式,或者与mesh等方案集成
CLI
命令行对产品进行轻量化管理,像git一样好用。
领域模型
数据模型
nacos 数据模型key由三元组唯一确定,namespace默认是空串,公共命名空间(public),分组默认是DEFAULT_GROUP
服务领域模型
配置领域模型
围绕配置,主要有两个关联的实体,一个是配置变更历史,一个是服务标签(用于打标签分类,方便索引),由ID关联。
类视图
nacos-sdk类视图
构建物部署以及启动模式
两种交付工件
nacos支持标准的docker镜像以及zip压缩的构建物。
两种启动模式
nacos支持将注册中心于配置中心在一个进程合并部署或者将两者分离部署的两种模式。
免费的公有云服务模式
除了将部署和启动nacos服务外,在云计算时代,nacos也支持公有云模式,在阿里云共有云的商业产品中会提供nacos的免费的公有云服务。
原文链接:
https://blog.csdn.net/weixin_42506599/article/details/109489712
对技术感兴趣的朋友,可以通过下面的方式关注我,谢谢!