阿里java面试官必问:Nacos 为什么这么强?讲讲实现原理?我懵了

本文详细介绍了Nacos作为服务注册与发现中心的实现原理,包括Nacos的架构、注册中心的原理、服务的注册与发现机制。文中还通过实战演示了如何在单机和集群环境下部署Nacos,并展示了如何使用Nacos进行REST服务和Dubbo服务的注册与发现。Nacos以其强大的服务管理和配置管理功能,成为Java微服务的重要组件。
摘要由CSDN通过智能技术生成

作为从事五年阿里程序员的我来说,阿里的面试题再熟悉不过了,每一年里有两个月时间我都会在面试考场面试各种人才,有很多跳槽的也有很多校招的学生小白,底标准本科,高的则达到高校硕士博士学位。其中,阿里八位面试官在第三层面试的题目中就有最为重要的一道题:Nacos为什么这么强?他的实现原理是什么?很多人都被问住了。很多人都疏忽这一道看似简单又不简单的题目。这道题很重要!这道题几个大名鼎鼎的大厂面试必问的题目。

需要大厂1000道面试笔记的朋友可以 点赞+转发+关注!后台私信回复【444】即可免费获取完整资料!

Java微服务新生代之Nacos

  • 关于 Nacos /nɑ:kəʊs/
  • 为什么是 Nacos
  • Nacos 实战
  • 单机部署
  • 准备环境
  • 集群部署
  • 添加集群配置文件
  • 配置 MySQL 数据库
  • 实现服务的注册与发现
  • Rest 服务的注册与发现
  • 服务提供者创建
  • 服务消费者创建
  • Feign 方式消费 Rest 服务
  • Dubbo 服务的注册与发现
  • 服务生产者
  • 服务消费者
  • 结语
  • 代码示例

Nacos

Nacos 第一次映入眼帘时,是在18年dubbo的一次线下沙龙中,那时还是v0.1.0版本;而如今,nacos已经经历过了可生产环境使用的 v0.8.0 Pre-GA版,到了v0.9.0版本。下面,就一起来简单了解一下nacos。

nacos是什么?

Nacos 是一个集服务动态发现、服务配置、服务元数据及流量管理于一体的管理中心,能帮助我们更好的发现、配置和管理微服务。

Nacos架构

  • Provider APP:服务提供者
  • Consumer APP:服务消费者
  • Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服务路由
  • Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务模块。Consitency Protocol是一致性协议,用来实现Nacos集群节点的数据同步,这里使用的是Raft算法(Etcd、Redis哨兵选举)
  • Nacos Console:控制台

注册中心的原理

  • 服务实例在启动时注册到服务注册表,并在关闭时注销
  • 服务消费者查询服务注册表,获得可用实例
  • 服务注册中心需要调用服务实例的健康检查API来验证它是否能够处理请求

SpringCloud完成注册的时机

在Spring-Cloud-Common包中有一个类
org.springframework.cloud. client.serviceregistry .ServiceRegistry ,它是Spring Cloud提供的服务注册的标准。集成到Spring Cloud中实现服务注册的组件,都会实现该接口。

该接口有一个实现类是NacoServiceRegistry。

SpringCloud集成Nacos的实现过程:

在spring-clou-commons包的META-INF/spring.factories中包含自动装配的配置信息如下:

其中AutoServiceRegistrationAutoConfiguration就是服务注册相关的配置类:

在AutoServiceRegistrationAutoConfiguration配置类中,可以看到注入了一个AutoServiceRegistration实例,该类的关系图如下所示。

可以看出, AbstractAutoServiceRegistration抽象类实现了该接口,并且最重要的是NacosAutoServiceRegistration继承了AbstractAutoServiceRegistration。

看到EventListener我们就应该知道,Nacos是通过Spring的事件机制继承到SpringCloud中去的。

AbstractAutoServiceRegistration实现了onApplicationEvent抽象方法,并且监听WebServerInitializedEvent事件(当Webserver初始化完成之后) , 调用this.bind ( event )方法。

最终会调用NacosServiceREgistry.register()方法进行服务注册。

NacosServiceRegistry的实现

在NacosServiceRegistry.registry方法中,调用了Nacos Client SDK中的namingService.registerInstance完成服务的注册。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值