Nacos简介Nacos:NamingandConfigurationService,可以将配置中心和注册中心打包部署,也可以独立部署其中之一。配置中心和控制台依赖mysql。2018年8月由阿里巴巴开源,github19.1kstar(截至2021.08.24)本文仅对服务发现部分进行讲解。服务注册发现模型命名空间:环境隔离、租户隔离;不同的命名空间服务不能相互发现组:业务隔离;解决不同业务下serviceName相同的问题;可获取默认或指定组实例集群:集群隔离;可定制的路由偏好;可获取所有或指定的集群实例临时实例临时实例:依赖客户端心跳或连接保持存活,当不存活时,直接下线实例;适用于主动注册服务,特别适用于K8S永久实例下ip漂移的场景:注册后不需要保活,依赖服务器健康检查判断实例是否健康,不健康的实例不需要离线;适用于IP不经常变化的场景。Nacos的主要区别如下:emphemraltruefalsename临时实例永久实例CAPAPCP一致性协议distroraft是否持久化健康检查方式心跳/连接服务器检查(TCP、HTTP、MYSQL)Dubbo适配使用临时实例应用层:serviceName为应用名服务层(Dubbo):使用provider/consumer:$[service_name]:${version}:${group}为服务名路由方式客户端路由方式客户端(SDK)根据服务指定部分或全部组和簇获取对应的实例,客户端根据权重或其他策略进行路由。服务端路由模式插件selector实现自定义路由模式,可连接第三方CMDB连接CMDB,根据service、ip等获取元数据(如机房位置)信息。选择器自定义实现,根据手动配置规则表达式选择对应的实例架构设计。一致,节点间采用同步协议复制数据结构。client作为客户端连接,客户端的信息和注册,订阅数据注册serviceNameserviceNameclientidclientid...publisherIndexes=>哪些客户端订阅了哪些服务whichservicesynchronizationprotocoldistroclientheartbeat/connectionkeep-alive,重连时有恢复(注册、订阅)机制数据同步是异步的raft一半以上节点同步成功后才返回客户端通信协议功能/版本1.x发行版1.xraft2.x发行版2.xraft注册/注销httphttpgrpchttp订阅httphttpgrpcgrpc心跳/健康检查httpTCP/http/mysqlTCPTCP/http/mysqlpushudpudpgrpcgrpc集群间数据同步http/distrohttp/自研raftgrpc/distrojraft生态构建客户端JavagolangPythonC#NodejsC++插件Dubbo-registry-nacosRpc-java-registry-nacosNacos-spring-starterNacos-syncNacos-k8s-syncNacos-client-mse-extensionNacos-coredns-pluginNacos-istioNacos-sync主要用于注册中心迁移和多-数据中心数据同步Nacos-coredns-pluginconsumer端可以使用域名方式发现服务,无需使用Nacos客户端Nacos-istio支持Nacos数据同步到MCPServer优缺点分析优点:AP方式,可扩展性,多数据center支持友好的服务发现模型设计支持Logicalnamespace、group、cluster等隔离健康检查模式,支持更多的临时实例和持久化实例,满足不同场景。功能多样,生态丰富,支持多语言SDK版本2.xgrpc,长连接性能强,单进程,部署简单,自带控制台开箱即用基本没有依赖(除了console依赖mysql,注册中心部分其实不依赖任何第三方组件)缺点:1.xhttpheartbeat消耗大,2.x刚出,可能会有一些bug,没有分层设计,没有办法针对目标性进行扩展,比如连接太多,扩展可以解决问题,但是也会增加数据同步的压力
