1、如何设计一个注册中心?
高可用:通过集群的方式
高并发:减少响应时间、提高吞吐量 并发用户数等,通过增加服务器性能、 扩展服务实例的方式
高性能:程序处理速度
考虑 数据存储结构、通信机制、集群同步。
集群同步:涉及到数据同步,数据同步我们有哪些协议 raft 、distro、ZAB
2、Nacos 1.x作为注册中心的原理?
1、使用Http发送服务注册
2、查询服务提供方列表
3、定时拉取(每10秒)
4、如果检测到服务提供者异常,基于UDP协议推送更新
5、定时心跳(每5秒向服务端发送心跳包),检测服务状态
6、服务端做定时心跳任务检查,超过15s将节点设置为非健康状态,超过30s将节点进行删除。
7、集群数据 同步任务使用Distro协议。
3、Nacos服务领域模型有哪些?
4、Nacos中的Distro协议
1、Nacos 每个节点自己负责部分的写请求。
2、每个节点会把自己负责的新增数据同步给其他节点。
3、每个节点定时发送自己负责数据的校验值 到其他节点来保持数据一致性。
4、每个节点独立处理读请求,及时从本地发出响应。
5、新加入的 Distro 节点会进行全量数据拉取。(具体操作是轮询所有的 Distro节点,通过向其他
的机器发送请求拉取全量数据。)
5、配置中心的技术选型
如何进行技术选型:
1、社区活跃度
2、自己的技术栈
我们选型rocketmq 和kafka ,rocketmq :不支持指定时间的延时消息
rocketmq 是Java语言 kafka是 scala语言 ,我们技术栈是java ,方便进行二次开发,所以我们选择rocketmq。
3、产品功能
rocketmq或者kafka技术栈是否hold住
6、Nacos1.x配置中心 长轮询机制?
客户端会轮询向服务端发出一个长连接请求,这个长连接最多30s就会超时,服务端收到客户
端的请求会先判断当前是否有配置更新,有则立即返回,如果没有 服务端会新建一个定时任务线
程 把这个请求放到队列29.5s,最后0.5s再检测配置文件无论有没有更新都进行正常返回,但等待的
29.5s期间有配置更新可以提前结束并返回。
7、Nacos配置中心配置优先级?
优先级从高到低。
# ${application.name}-${profile}.${file- extension} nacos-config-prod.yaml
# ${application.name}.${file-extension} nacos-config.yaml
# ${application.name} nacos-config
# extensionConfigs 扩展配置文件
# sharedConfigs 多个微服务公共配置 redis
8、Nacos2.x客户端探活机制?
Nacos服务端会启动一个定时任务,每3秒执行一次,查看所有连接是否超过20s没有通信,
如果超过20秒没有通信,服务端就会给客户端发送一个请求,进行探活,如果能正常返回就表示这
个服务为正常服务,如果不能正常返回就将其连接删除。