我在组内的Nacos分享

捉虫大师 等级 754 0 0
标签: https软件

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。

Nacos简介

Nacos : Naming and Configuration Service,可打包部署配置中心和注册中心,也可独立部署其中之一,配置中心、控制台依赖mysql,由阿里巴巴2018年8月开源,github 19.1k star(截止2021.08.24)

本文只讲解服务发现部分。

服务注册发现模型

我在组内的Nacos分享

  • namespace:环境隔离、租户隔离;不同namespace服务无法相互发现
  • group:业务隔离;解决不同业务下serviceName相同的问题;可获取默认或指定group实例
  • cluster:集群隔离;可定制化路由偏好;可获取全部或指定集群实例

临时实例

  • 临时实例:靠client的心跳或连接保活,当不存活时,直接下线实例;适用于主动注册的服务,特别适合K8S下ip漂移的场景

  • 永久实例:注册后不用保活,靠服务端健康检查来判断实例是否健康,不健康实例也不用下线;适用于ip不常变化的场景

在Nacos中他们的主要区别如下:

emphemral true false
名称 临时实例 永久实例
CAP AP CP
一致性协议 distro raft
是否持久化
健康检查方式 心跳/连接 服务端检查(TCP、HTTP、MYSQL)

Dubbo适配

我在组内的Nacos分享

  • 使用临时实例
  • 应用级:serviceName为应用名即可
  • 服务级(Dubbo):以provider/consumer:$[service_name]:${version}:${group}为服务名

路由模式

客户端路由模式

客户端(SDK)根据service,指定部分或全部group、cluster获取相应的实例,客户端根据权重或其他策略进行路由

服务端路由模式

插件式selector实现自定义路由模式,可对接第三方CMDB

我在组内的Nacos分享

  1. 与CMDB对接,根据service、ip等信息获取元数据(如机房位置)

  2. 自定义实现选择器selector,根据手动配置规则表达式选取相应实例

架构设计

存储模型

全量数据位于内存中,每个节点数据保持一致,节点间采取同步协议进行复制

我在组内的Nacos分享

数据结构

一个客户端连接为一个client,打包客户端的信息与注册、订阅数据

  • 注册
    • publisherIndexes => 哪些客户端注册了哪些服务
      • serviceName
        • clientid
        • clientid
      • serviceName
        • ...
  • 订阅
    • subscriberIndexes => 哪些客户端订阅了哪些服务
      • serviceName
        • clientid
        • clientid
      • serviceName
        • ...

同步协议

distro

  • 客户端心跳/连接保活,重连时有恢复(注册、订阅)机制
  • 数据同步为异步

我在组内的Nacos分享

raft

  • 半数以上节点同步成功才返回给客户端

我在组内的Nacos分享

通信协议

功能/版本 1.x distro 1.x raft 2.x distro 2.x raft
注册/注销 http http grpc http
订阅 http http grpc grpc
心跳/健康检查 http TCP/http/mysql TCP TCP/http/mysql
推送 udp udp grpc grpc
集群间数据同步 http/distro http/自研raft grpc/distro jraft

生态建设

  • 客户端
    • Java
    • golang
    • Python
    • C#
    • Nodejs
    • C++
  • 插件
    • Dubbo-registry-nacos
    • Rpc-java-registry-nacos
    • Nacos-spring-starter
    • Nacos-sync
    • Nacos-k8s-sync
    • Nacos-client-mse-extension
    • Nacos-coredns-plugin
    • Nacos-istio

Nacos-sync

主要用于注册中心迁移以及多数据中心数据同步

我在组内的Nacos分享

Nacos-coredns-plugin

consumer侧可使用域名方式发现服务,无需使用Nacos客户端 我在组内的Nacos分享

Nacos-istio

支持Nacos数据同步至MCP Server 我在组内的Nacos分享

优缺点分析

  • 优点:
    • AP模式,扩展性、多数据中心支持友好
    • 服务发现模型设计支持逻辑上namespace、group、cluster等的隔离
    • 健康检查模式支持较多
    • 支持临时实例与持久化实例,满足不同场景
    • 功能多,生态丰富,支持多语言SDK
    • 2.x版本grpc长连接性能强
    • 单一进程,部署简单,且附带开箱即用的控制台
    • 基本无依赖(除控制台依赖mysql,注册中心部分实际不依赖任何第三方组件)
  • 缺点:
    • 1.x http心跳消耗大,2.x刚发布不久,可能存在一些bug
    • 没有分层设计,没办法针对性扩容,如连接数太多时,扩容能解决,但也会增加数据同步压力

搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

我在组内的Nacos分享

收藏
评论区

相关推荐

我在组内的Nacos分享
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 Nacos简介Nacos : Naming and Configuration Service,可打包部署配置中心和注册中心,也可独立部署其中之一,配置中心、控制台依赖mysql,由阿里巴巴2018年8月开源,github 19.1k star(截止20
Nacos Cluster Building
原文链接:[https://www.javaspring.net/nacos/nacos-cluster-building](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.javaspring.net%2Fnacos%2Fnacos-cluster-building) Conti
Nacos Config源代码分析(一)
Nacos Config提供了配置管理的功能,它允许用户在nacos上配置key-value对,并在客户端订阅需要的配置。当配置发生变更时,订阅的客户端会获得通知,随后拉取最新的key-value对。 Config Server为了最大程度保证可用性采用了一种三层的存储架构设计,mysql - 本地文件 - 内存缓存: ![](https://oscim
NacosValue 注解
NacosValue 定义在 nacos-api 工程中:com.alibaba.nacos.api.config.annotation.NacosValue 注解解析在 nacos-spring-project 工程中: com.alibaba.nacos.spring.util.NacosBeanUtils#registerNacosValueAnn
Nacos作为注册中心和配置中心,爱不释手的感觉
在使用SpringCloud做分布式微服务架构时,注册中心是必不可少的一个组件。目前可以用的主要有:Eureka、Consul、Zookeeper。今天,我们就来说一下Alibaba的Nacos怎么样? 下载与安装 ----- * 下载地址https://github.com/alibaba/nacos/releases * 安装:
Nacos跨服务器调用服务报错
> 利用gateway做springcloud微服务网关路由服务时出现报错情况,发现是和网关不在一个服务器的服务无法使用 Nacos服务注册的IP Nacos注册中心是: https://github.com/alibaba/nacos 各个服务通过Nacos客户端将服务信息注册到Nacos上 当Nacos服务注册的IP默认选择出问题时,可以通
Nacos配置中心动态获取数组配置
有的时候我们需要动态获取一系列的配置项,假设我们在nacos配置中心的配置如下,nacos配置中心的其他设置请参考[Nacos搭建流程](https://my.oschina.net/u/3768341/blog/3138297) skill: name: - 爆炸 - 冲刺 在SpringCloud代
Spring Cloud Alibaba的nacos作为注册中心
一 官网参考 ====== [https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md](https://www.oschina.ne
Spring Cloud Alibaba系列之Nacos服务注册与发现
Spring Cloud Alibaba系列之Nacos服务注册与发现 1、前言简介 ------ 服务注册与发现是微服务架构体系中最关键的组件之一。Spring Cloud Alibaba Nacos Discovery组件提供了服务自动注册到 Nacos 服务端的功能,并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discove
Spring Cloud Alibaba系列(二)nacos作为服务配置中心
Spring Cloud Alibaba系列(二)nacos作为服务配置中心 Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部
Spring Cloud for Alibaba 之 Nacos注册中心 & 应用启动(2)
    Nacos 启动后,开始建立几个应用,模仿微服务!    项目的git 地址为: https://github.com/xujianguo1/alicloud-demo.git     分支&tagName:ServiceInit **一、 pom 与 配置** 用Dubbo 与Nacos 建立微服务,需要引入Dubbo Starter、D
SpringCloud Alibaba微服务实战九
**![](https://oscimg.oschina.net/oscnet/72da47ea-edfa-4b92-b60f-dc275c0f9888.gif) ** ![](https://oscimg.oschina.net/oscnet/f5af9b0d-3aec-412d-974a-3d18458ae464.png) 前言 --
SpringCloud Gateway 身份认证
使用SpringCloud技术栈搭建微服务集群,可以选择的组件比较多,由于有些组件已经闭源或停更,这里主要选用`spring-cloud-alibaba`作为我们的技术栈。 * 服务注册与发现: `nacos-discovery` * 统一配置管理:`nacos-config` * 微服务网关:`spring cloud gateway` 由
SpringCloudAlibaba(1)
Nacos官网 [https://nacos.io/zh-cn/docs/quick-start.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fnacos.io%2Fzh-cn%2Fdocs%2Fquick-start.html) 下载Nacos [https://git
SpringCloudAlibaba(2)
1\. 以单机模式启动Nacous,启动命令startup.cmd -m standalone 2.使用postman向 Nacos Server 发布配置:dataId 为`example.properties`,内容为`useLocalCache=true` http://127.0.0.1:8848/nacos/v1/cs/configs?dat