微服务面试篇-Nacos注册表结构

目录
常见组件
- 注册中心组件:Eureka,Nacos等
- 负载均衡组件:Ribbon
- 远程调用组件:OpenFeign
- 网关组件:Zuul、Gateway
- 服务保护组件:Hystrix、Sentinel
- 服务配置管理组件:SpringCloudConfig、Nacos
Nacos的服务注册表结构是怎么样的
要了解Nacos的服务注册表结构,需要从两方面入手:
- 一是Nacos的分级存储模型
- 二是Nacos的服务端源码
nacos分级存储模型
nacos源码
github:
官方文档:
Protocol Buffer
Nacos通信不是通过http协议,而是通过Protocol协议。
protocol buffers(类似于JSON) 是一种与语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。 你可以定义数据的结构,然后使用特殊生成的源代码轻松地在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。
Protocol Buffers可以用于结构化数据序列化,很适合做数据存储或者RPC数据交换格式。它可用于通信协议、数据存储等。
启动nacos源码
进入console工程(nacos-console)执行Nacos,即可启动8848
nacos源码中的注册表结构
注册示例:POST /nacos/v1/ns/instance
注册代码:nacos-naming中InstanceController中register方法
调用ServiceManager.registerInstance(namespaceId,serviceName,instance)。
- 在ServiceManager中维护了Map<String,Map<String,Service>> serviceMap = new ConcurrentHashMap<>();
- 第一个key是namespaceId
- 第二个key是group拼接服务名(group::serviceName)
- 在Service中维护了Map<String,Cluster>,key就是集群名称
- 在Cluster中维护了Set,具体是实例