什么是Nacos,它有什么作用
-
Nacos 是一个开源的服务发现和配置管理平台,由阿里巴巴开发,用于构建云原生应用程序。Nacos 的名字源自于 “Naming and Configuration Service”(命名和配置服务)的缩写。它支持服务注册与发现、动态配置服务、动态服务管理等特性,广泛应用于微服务架构中。
-
Nacos 支持两种主要的分布式一致性架构模式:CP 模式和 AP 模式。CP 模式(一致性优先)强调数据的一致性,保证在网络分区等异常情况下数据的一致性,但可能会牺牲系统的可用性。AP 模式(可用性优先)则更注重系统的可用性,确保服务的高可用性,但在网络分区等情况下可能无法保证数据的一致性。
-
服务提供者会向 Nacos 注册中心注册自己的服务,服务消费者则从注册中心查询到服务提供者信息,实现服务之间的解耦。Nacos 支持多种服务发现模式,包括基于 DNS 的服务发现和基于 RPC 的服务发现。使用 Raft 协议来实现 CP 架构的主节点选举机制。Raft 是一种易于理解且相对稳定的分布式选举算法,它通过选举一位领导者(Leader)来协调集群中的各个节点,保证数据的一致性。Nacos 集群通常需要至少三个节点来组成一个有效的集群,以保证在节点故障时仍能保持集群的可用性和数据一致性。在实际部署时,需要根据实际业务需求和资源情况来确定集群节点的数量。
-
Nacos 与传统的服务发现和配置管理工具(如 Eureka 和 Consul)相比,提供了更全面的功能,并且在性能和可扩展性方面有明显的优势。它是构建以服务为中心的现代应用架构(如微服务架构和云原生架构)的重要基础设施。
Nacos架构图
- Nacos官网:https://nacos.io/
Nacos集群部署实战
- 新建nacos_config数据库并初始化以下脚本
/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*//******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info */
/******************************************/
USE nacos_config;
CREATE TABLE `config_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) DEFAULT NULL,`content` longtext NOT NULL COMMENT 'content',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',`c_desc` varchar(256) DEFAULT NULL,`c_use` varchar(64) DEFAULT NULL,`effect` varchar(64) DEFAULT NULL,`type` varchar(64) DEFAULT NULL,`c_schema` text,`encrypted_data_key` text NOT NULL COMMENT '密钥',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_aggr */
/******************************************/
CREATE TABLE `config_info_aggr` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',`content` longtext NOT NULL COMMENT '内容',`gmt_modified` datetime NOT NULL COMMENT '修改时间',`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info_beta */
/******************************************/
CREATE TABLE `config_info_beta