一、Nacos 功能介绍
在微服务架构下,一个业务服务会被拆分成多个微服务,各个服务之间相互通信完成整体的功能。另外,为了避免单点故障,微服务都会采取集群方式的高可用部署,集群规模越大,性能也会越高,如图5-1所示
服务消费者要去调用多个服务提供者组成的集群。首先,服务消费者需要在本地配置文件中维护服务提供者集群的每个节点的请求地址。其次,服务提供者集群中如果某个节点下线或者宕机,服务消费者的本地配置中需要同步删除这个节点的请求地址,防止请求发送到已宕机的节点上造成请求失败。为了解决这类的问题,就需要引入服务注册中心,它主要有以下功能:
- 服务地址的管理
- 服务注册。
- 服务动态感知
、
能够实现这类功能的组件很多,比如ZooKeeper、Eureka、Consul、Etcd、Nacos等ZooKeeper在第4章中介绍过,在这一章中主要介绍Alibaba的Nacos。
Nacos致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理
- 服务发现和服务健康监测
Nacos支持基于DNS和基于RPC的服务发现。服务提供者使用原生SDK、OpenAPI或一个独立的AgentTODO注册Service后,服务消费者可以使用DNS或HTTP&API查找和发现服务。
Nacos提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos支持传输层(PING或TCP)和应用层(如HTTP、MySQL、用户自定义)的健康检查。对于复杂的云环境和网络拓扑环境中(如VPC、边缘网络等)服务的健康检查,Nacos提供了agent上报和服务端主动检测两种健康检查模式。Nacos还提供了统一的健康检查仪表盘,帮助用户根据健康状态管理服务的可用性及流量。 - 动态配置服务
业务服务一般都会维护一个本地配置文件,然后把一些常量配置到这个文件中,这种方式在某些场景中会存在问题,比如配置需要变更时要重新部署应用。而动态配置服务可以以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置,可以使配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
另外,Nacos提供了一个简洁易用的UI(控制台样例Demo)帮助用户管理所有服务和应用的配置。Nacos还提供了包括配置版本跟踪、金丝雀发布、一键回滚配置及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助用户更安全地在生产环境中管理配置变更,降低配置变更带来的风险。 - 动态DNS服务
动态DNS服务支持权重路由,让开发者更容易地实现中间层负载均衡、更灵活的路由策略、流量控制,以及数据中心内网的简单DNS解析服务。 - 服务及其元数据管理
Nacos可以使开发者从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA及最重要的metrics统计数据。
本书主要围绕Nacos中注册中心的特性及动态配置服务的特性进行展开讲解。
二、 Nacos的基本使用
2.1Nacos的安装
2.2Nacos服务注册发现相关API说明
Nacos提供了SDK及OpenAPI的方式来完成服务注册与发现等操作,由于服务端只提供了REST接口,所以SDK本质上是对于HTTP请求的封装。下面简单列一下和服务注册相关的核心接口。2Nacos服务注册发现相关API说明
Nacos提供了SDK及OpenAPI的方式来完成服务注册与发现等操作,由于服务端只提供了REST接口,所以SDK本质上是对于HTTP请求的封装。下面简单列一下和服务注册相关的核心接口。
提供的接口有
- 注册实例
- 获取全部实例
- 监听服务
2.3 Nacos与springboot 的集成注册发现
2.4Nacos的高可用部署
在分布式架构中,任何中间件或者应用都不允许单点存在,所以开源组件一般都会自己支持高可用集群解决方案,如图5-2所示,Nacos提供了类似于ZooKeeper的集群架构,包含一个Leader节点和多个Follower节点。和ZooKeeper不同的是,它的数据一致性算法采用的是Raft,同样采用了该算法的中间件有Redis Sentinel的Leader选举、Etcd等