-
Nacos的注册表结构是什么样的?
-
答:Nacos是多级存储模型,最外层通过namespace来实现环境隔离,然后是group分组,分组下就是服务,一个服务有可以分为不同的集群,集群中包含多个实例。因此其注册表结构为一个Map,类型是:
Map<String, Map<String, Service>>
,外层key是
namespace_id
,内层key是group+serviceName
.Service内部维护一个Map,结构是:
Map<String,Cluster>
,key是clusterName,值是集群信息Cluster内部维护一个Set集合,元素是Instance类型,代表集群中的多个实例。
-
-
Nacos如何保证并发写的安全性?
-
答:首先,在注册实例时,会对service加锁,不同service之间本身就不存在并发写问题,互不影响。相同service时通过锁来互斥。并且,在更新实例列表时,是基于异步的线程池来完成,而线程池的线程数量为1.
-
-
Nacos如何避免并发读写的冲突?
-
答:Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将Old实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。
-
-
Nacos如何应对阿里内部数十万服务的并发写请求?
-
答:Nacos内部会将服务注册的任务放入阻塞队列,采用线程池异步来完成实例更新,从而提高并发写能力。
-