Nacos : Naming and Configuration Service,可打包部署配置中心和注册中心,也可独立部署其中之一,配置中心、控制台依赖mysql,由阿里巴巴2018年8月开源,github 19.1k star(截止2021.08.24)
本文只讲解服务发现部分。
在Nacos中他们的主要区别如下:
emphemral | true | false |
---|---|---|
名称 | 临时实例 | 永久实例 |
CAP | AP | CP |
一致性协议 | distro | raft |
是否持久化 | 否 | 是 |
健康检查方式 | 心跳/连接 | 服务端检查(TCP、HTTP、MYSQL) |
provider/consumer:$[service_name]:${version}:${group}
为服务名客户端(SDK)根据service,指定部分或全部group、cluster获取相应的实例,客户端根据权重或其他策略进行路由
插件式selector实现自定义路由模式,可对接第三方CMDB
全量数据位于内存中,每个节点数据保持一致,节点间采取同步协议进行复制
一个客户端连接为一个client,打包客户端的信息与注册、订阅数据
注册
serviceName
serviceName
clientid
clientid
...
publisherIndexes => 哪些客户端注册了哪些服务
订阅
serviceName
serviceName
clientid
clientid
...
subscriberIndexes => 哪些客户端订阅了哪些服务
功能/版本 | 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
主要用于注册中心迁移以及多数据中心数据同步
consumer侧可使用域名方式发现服务,无需使用Nacos客户端
支持Nacos数据同步至MCP Server
优点:
AP模式,扩展性、多数据中心支持友好
服务发现模型设计支持逻辑上namespace、group、cluster等的隔离
健康检查模式支持较多
支持临时实例与持久化实例,满足不同场景
功能多,生态丰富,支持多语言SDK
2.x版本grpc长连接性能强
单一进程,部署简单,且附带开箱即用的控制台
基本无依赖(除控制台依赖mysql,注册中心部分实际不依赖任何第三方组件)
缺点:
1.x http心跳消耗大,2.x刚发布不久,可能存在一些bug
没有分层设计,没办法针对性扩容,如连接数太多时,扩容能解决,但也会增加数据同步压力
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8