什么是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