作为从事五年阿里程序员的我来说,阿里的面试题再熟悉不过了,每一年里有两个月时间我都会在面试考场面试各种人才,有很多跳槽的也有很多校招的学生小白,底标准本科,高的则达到高校硕士博士学位。其中,阿里八位面试官在第三层面试的题目中就有最为重要的一道题: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完成服务的注册。