阿里微服务架构Spring Cloud Alibaba Nacos实战

2023-10-31


nacos官方文档: https://nacos.io/zh-cn/docs/quick-start.html

1、常用特性

  • 服务发现和服务健康监测

    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODOHTTP&API查找和发现服务。

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

  • 动态 DNS 服务

    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

  • 服务及其元数据管理

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

2、注册中心、配置中心对比

注册中心对比

Nacos Eureka Consul CoreDNS Zookeeper
一致性协议 CP+AP AP CP CP
健康检查 TCP/HTTP/MYSQL/Client Beat Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
负载均衡策略 权重/ metadata/Selector Ribbon Fabio RoundRobin
雪崩保护
自动注销实例 支持 支持 不支持 不支持 支持
访问协议 HTTP/DNS HTTP HTTP/DNS DNS TCP
监听支持 支持 支持 支持 不支持 支持
多数据中心 支持 支持 支持 不支持 不支持
跨注册中心同步 支持 不支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 不支持 不支持
Dubbo集成 支持 不支持 不支持 不支持 支持
K8S集成 支持 不支持 支持 支持 不支持

配置中心对比

功能点 Spring Cloud Config Apollo Nacos
开源时间 2014.9 2016.5 2018.6
配置实时推送 支持(Spring Cloud Bus) 支持(HTTP长轮询1S内) 支持(HTTP长轮询1S内)
版本管理 支持(GIT) 支持 支持
配置回滚 支持(GIT) 支持 支持
灰度发布 支持 支持 不支持
权限管理 支持 支持 支持
集群 支持 支持 支持
多环境 支持 支持 支持
监听查询 支持 支持 支持
多语言 只支持Java GO、C++、Python、PHP、Java、.Net、OpenAPI Python、Java、.Net、OpenAPI、NodeJS
单机部署 config-server+Git+Spring Cloud Bus Apollo-quickstart+MySQL Nacos单节点
分布式部署 config-server(2)+Git+MQ(部署复杂) config(2)+Admin(2)+portal(2)+mysql(部署复杂) Nacos(2)+Mysql(部署简单)
配置格式校验 不支持 支持 支持
通信协议 Http和AMQP Http Http
数据一致性 Git保证一致性,config-server从git读取数据 数据库模拟消息队列,Apollo定时读消息 Http异步通知
单机读 7(限流所致) 9000 15000
单机写 5(限流所致) 1100 1800
3节点多 21(限流所致) 27000 45000
3节点写 5(限流所致) 3300 5600

总的来说,Apollo和Nacos相对于Spring Cloud Config的生态支持更广,在配置管理流程上做的更好。Apollo相对于Nacos在配置管理做的更加全面,不过使用起来也要麻烦一些。Nacos使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。

此外,Nacos除了提供配置中心的功能,还提供了动态服务发现、服务共享与管理的功能,降低了服务化改造过程中的难度。

3、生态图

如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如

使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

4、安装

下载地址:https://github.com/alibaba/nacos/releases

配置数据源:

修改nacos/conf/application.properties配置文件

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

启动nacos/bin/startup.cmd或startup.sh,启动成功后访问 http://127.0.0.1:8848/nacos

用户名密码:nacos/nacos

docker安装

详细参数配置:https://nacos.io/zh-cn/docs/quick-start-docker.html

docker search nacos

docker pull nacos/nacos-server

docker run -d \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=62.234.0.169 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=Leimingtech1205 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-p 8848:8848 \
--restart=always \
--name lm-nacos \
nacos/nacos-server

启动成功后访问 http://127.0.0.1:8848/nacos

用户名密码:nacos/nacos

5、名词解析

命名空间(namespace)、配置集 ID(dataId)、配置分组(Group)

https://nacos.io/zh-cn/docs/concepts.html

6、代码实战

注册中心

首先代码演示一下使用Nacos作为服务注册中心。

版本信息

Spring Boot Spring Cloud Spring Cloud Alibaba
2.1.12.RELEASE Greenwich.SR5 2.1.0.RELEASE

添加依赖

在pom.xml中添加对应依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Greenwich.SR5</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件

在application.yml中配置nacos信息

spring:
  cloud:
    nacos:
      discovery:
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
        server-addr: ${nacos-host:@nacos.server.ip@}:${nacos-port:@nacos.server.port@}
        #nacos的命名空间ID,默认是public
        namespace: ${nacos-namespace:public}

nacos-host、nacos-port、nacos-namespace可以配置为环境变量

nacos.server.ip、nacos.server.port在pom.xml中定义

注解

启动类上增加@EnableDiscoveryClient注解,有心者肯定能观察到@EnableDiscoveryClient也是Eureka使用的注解,因此Nacos便可以无缝替换Eureka。

验证工作

按照上面步骤进行操作,启动项目,启动完成后进入nacos平台,在【服务管理-服务列表】可进行查看。同时在详情中支持对任务手动下线,复制调试代码等操作。
在这里插入图片描述

配置中心

Nacos可以做为配置中心,替换Apollo、Spring Cloud Config等配置中心。

前置工作

我们需要提前在Nacos管理界面创建好配置信息,在【配置管理-配置列表】下新建配置文件。配置文件格式支持(TEXT、JSON、XML、YAML、HTML、Properties)
在这里插入图片描述
在 Nacos Spring Cloud 中,dataId 的完整格式如下:

p r e f i x − {prefix}- prefix{spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

配置文件

【注】Nacos作为配置中心,相关配置文件必须写在bootstrap.yml/bootstrap.properties中
bootstrap配置文件加载优先级高于application配置文件。
bootstrap.yml配置如下:

spring:
  cloud:
    nacos:
      discovery:
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
        server-addr: ${nacos-host:@nacos.server.ip@}:${nacos-port:@nacos.server.port@}
        #nacos的命名空间ID,默认是public
        namespace: ${nacos-namespace:public}
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        namespace: ${spring.cloud.nacos.discovery.namespace}
        group: LM_SYS_SERVER_GROUP
        file-extension: properties
        #指定共享配置,且支持动态刷新
        ext-config:
          - data-id: mybatis-plus-common.yaml
            group: COMMON_GROUP
            refresh: true
          - data-id: other-common.yaml
            group: COMMON_GROUP
            refresh: true
          - data-id: rabbitmq-common.yaml
            group: COMMON_GROUP
            refresh: true
          - data-id: redis-common.yaml
            group: COMMON_GROUP
            refresh: true

验证
配置完成后,启动项目并查看启动日志,如果发现类似以下日志代表配置成功。

2020-07-14 11:31:27.300  INFO 9120 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'mybatis-plus-common.yaml', group: 'COMMON_GROUP'
2020-07-14 11:31:27.306  INFO 9120 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'other-common.yaml', group: 'COMMON_GROUP'
2020-07-14 11:31:27.309  INFO 9120 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'rabbitmq-common.yaml', group: 'COMMON_GROUP'
2020-07-14 11:31:27.313  INFO 9120 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'redis-common.yaml', group: 'COMMON_GROUP'
2020-07-14 11:31:27.317  INFO 9120 --- [           main] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'leimingtech-sys-server-dev.properties', group: 'LM_SYS_SERVER_GROUP'
2020-07-14 11:31:27.319  INFO 9120 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-leimingtech-sys-server-dev.properties'}, BootstrapPropertySource {name='bootstrapProperties-leimingtech-sys-server.properties'}, BootstrapPropertySource {name='bootstrapProperties-redis-common.yaml'}, BootstrapPropertySource {name='bootstrapProperties-rabbitmq-common.yaml'}, BootstrapPropertySource {name='bootstrapProperties-other-common.yaml'}, BootstrapPropertySource {name='bootstrapProperties-mybatis-plus-common.yaml'}]
2020-07-14 11:31:27.364  INFO 9120 --- [           main] com.leimingtech.AdminApplication         : The following profiles are active: dev
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阿里微服务架构Spring Cloud Alibaba Nacos实战 的相关文章

随机推荐

  • MATLAB APP纯小白入门 两数相加

    万事开头难 最怕第一次 使用matlab APP 实现两数求和 如下图所示 c a b 输入数字后 按 就计算 步骤 拖拽三个 Edit Field Numeric 过来 并且双击名字分别改为 a b c 注意修改名字后右边会有点变化 程序
  • 标准二阶响应--佛朗哥

    如果一个电路对任何有界输入在响应中产生一个有界的输出 就说明这个电路是稳定的 判断一个电路是否稳定一种方法是将某些能量注入到它的电抗元件中的一个或者多个 然后在没有任何外加电源的情况下观察这个电路是如何作为的 这种情况下的响应为无源或者自然
  • STM32F103 GPIO输出模式2MHz,10MHz,50MHz波形对比

    在STM32F103中GPIO的输出模式有三种速度配置 如图所示 经过测试发现 这三种速度的输出模式与IO的翻转频率没有关系 它们影响的可能是驱动能力 下面是在IO极限频率 18MHz 下 三种模式的波形
  • bootstrap实现轮播图

    div class carousel slide style width 400px margin 30px auto ol class carousel indicators li class active li li li ol div
  • 数据库类型区分

    数据库类型主要可分为 网状数据库 Network Database 关系数据库 Relational Database 树状数据库 Hierarchical Database 面向对象数据库 Object oriented Database
  • qemu 对 ARMv8的支持

    qemu 可以支持 ARMv8 且支持的 boot 包括 1 从 ATF启动 2 从 UEFI启动 3 从 u boot启动 4 从 linux 启动 这里打算用以下平台 qemu system aarch64 M virt cpu qem
  • buckboost变换器简介

    1 buckboost拓扑 Vo Vin D 1 D 极性相反 可以升压也可以降压
  • latex 大于小于大于等于小于等于

    转载于https www cnblogs com kjkj p 10505832 html 发现大部分人只回答大于等于号 小于等于号的写法 而没有说大于 小于号的分别写法 大于号 textgreater 小于号 textless 下面的后面
  • android 动画开发

    动画的分类 Android通过Animations为android UI提供了一系列的动画效果 可以进行旋转 缩放 淡入淡出等 这些效果可以应用在绝大多数的空间中 Android中的动画一般为两类 1 Frame by frame Anim
  • 笔试题(十二):走梅花桩

    Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 数据范围 每组数据长度满足 1 n 200 数据大小满
  • 利用Charles打断点修改返回数据

    1 选择你需要修改数据的接口 2 选中后 proxy gt breakPoint Setting 在出来的弹窗中找到你标记的接口 双击 选择对应的方法 get post 然后将Query里面的删掉 写上 确保一下request和respon
  • python学习之基于Python的人脸识别技术学习

    摘要 面部识别技术的应用越来越广泛 它广泛应用于安全系统 人机交互 社交媒体 医疗保健等领域 本文介绍了基于Python的人脸识别技术 包括人脸检测 人脸特征提取和人脸识别三个部分 我们使用OpenCV和Dlib库来实现这些功能 并使用Py
  • Python实现最小顶点覆盖算法

    Python实现最小顶点覆盖算法 最小顶点覆盖问题是图论中的重要问题 其目标是找到至少数量的顶点 使得每一条边至少有一个端点被这些顶点所覆盖 该问题在实际中有诸多应用 例如网络流分析和计算机视觉等领域 本文将介绍如何使用Python实现最小
  • 10.Docker(一)-----安装、初步使用、镜像、Dockerfile常用指令、通过Dockerfile文件封装nginx镜像并优化

    安装 初步使用 镜像 Dockerfile常用指令 通过Dockerfile文件封装nginx镜像并优化 一 简介 二 安装 1 安装配置 仓库配有的安装包 安装 桥接 2 导入马里奥游戏 浏览器访问172 25 15 1 3 删除 4 导
  • 删除链表中重复的元素

    题目描述 给定一个排序链表 删除所有含有重复数字的节点 只保留原始链表中 没有重复出现 的数字 样例 输入 1 gt 2 gt 3 gt 3 gt 4 gt 4 gt 5 输出 1 gt 2 gt 5 分析 从头结点开始遍历该链表 如果当前
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 逆向工具(IDA、pyinstxtractor+uncompyle6、jadx等持续更新)

    IDA Pro IDA Pro Interactive Disassembler Professional 交互式反汇编器专业版 CTF RE PWN必备 打开一个可执行文件前 应先用file命令或者DIE等工具 确定是32位还是64位 然
  • 使用armDebian基本的操作方式

    1 查看进程id pgrep ttnode 2 杀死进程 kill 1308 3 查看硬盘的分区 sudo fdisk l 3 卸载文件卷 umount dev sda1 4 格式化 mkfs vfat dev sda1 5 重启 rebo
  • C++:类和对象(中)---默认成员函数---运算符重载---const的含义

    文章目录 默认成员函数 构造函数 析构函数 拷贝构造函数 运算符重载 赋值运算符重载 const的含义 取地址及const取地址操作符重载 默认成员函数 首先要理解什么是默认成员函数 类在什么都不写的时 编译器会生成六个默认成员函数 用户没
  • 阿里微服务架构Spring Cloud Alibaba Nacos实战

    Spring Cloud Alibaba Nacos 1 常用特性 2 注册中心 配置中心对比 3 生态图 4 安装 5 名词解析 6 代码实战 注册中心 配置中心 nacos官方文档 https nacos io zh cn docs q