nacos注册服务源码流程
2021-09-07 17:35:39 0 举报
AI智能生成
nacos注册服务源码流程
作者其他创作
大纲/内容
getApplicationEventMulticaster().multicastEvent(earlyEvent);//多播器监听事件方法
registerListeners();//注册监听器方法
refresh方法
1:AbstractApplicationContext.class中
调用onApplicationEvent方法
调用监听器方法invokeListener
重写ApplicationEventMulticaster.class的multicastEvent方法
2:SimpleApplicationEventMulticaster.class中
调用注册方法register();
调用start方法this.start();
调用bind(event);
实现ApplicationListener.class的onApplicationEvent方法
3:抽象自动服务注册类AbstractAutoServiceRegistration.class中
1:返回NamingService接口nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
2:获取服务实例Instance instance = getNacosInstanceFromRegistration(registration);
实现ServiceRegistry接口this.serviceRegistry.register(getRegistration());
4:NacosServiceRegistry.class中
实现NamingService接口中的registerInstance方法
1:将服务实例添加到ScheduledExecutorService定时线程池中,5秒钟发送一次心跳
2:通过NamingProxy代理注册服务serverProxy.registerService
5:NacosNamingService.class中
一:NacosClient服务注册具体过程如下
1:将服务实例信息放到阻塞队列中
2:通过Notifier线程来取队列中的服务实例信息,进行异步处理注册服务
二:NacosServer接收到客户端注册请求后具体过程如下
1:客户端启动,通过NacosServiceRegistration重写父类register注册方法后,最终通过NamingProxy.registerService中的reqApi中的HttpClient发送http请求到服务端
2:服务端收到注册请求时,先将注册信息存放在阻塞队列ArrayBlockingQueue中,再通过Notifier这个线程从队列中取出来异步处理注册信息,最终放到注册表中的Set<Instance>中实现服务的自动注册
1:nacos服务注册架构整体思路
①高并发,限流
②服务注册时是启动时注册,阿里巴巴有成千上万个微服务启动注册,如果采用同步注册方式,严重影响启动时间和服务获取时间,服务注册查询压测报告时间为13000TPS,注册基本上准实时,如果加入其它的中间件,启动时间也会被严重占用
③所有注册信息都在队列中,然后由线程去异步处理,客户端响应时间会影响吗?一般不会,因为正常场景下运维不可能一次性启动成千上万台服务端同时注册,所以队列一般不会存放太多注册信息,而且注册表都是基于内存操作,效率也是非常高的
2:为什么要先将注册信息放入队列中,再由异步任务从队列中获取注册信息,然后再放到注册表中呢?阿里巴巴的框架要满足三高:高可用、高并发、高性能、高可扩展等
三:为什么阿里巴巴要这样设计Nacos服务注册架构?
Nacos注册服务源码流程
0 条评论
回复 删除
下一页