怎么理解Nacos Naming持久化存储
本篇内容介绍了“怎么理解Nacos Naming持久化存储”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Nacos主要包括两个核心服务 - config & naming。config主要用来托管应用配置,naming用作服务发现。Nacos Naming服务引入了一种Service - Cluster - Instance的数据结构模型,用来存储服务的元信息。在Naming服务中实际来存储service/cluster/instance数据的底层实现被抽象成了ConsistencyService接口。
Naming服务支持两种类型的数据存储:临时和永久数据。永久数据一旦创建之后会一直存在,除非显式删除;临时数据创建之后和所有者的生命周期绑定,需要创建者不断发送心跳信息来保证数据的有效性。
这两种数据类型在代码上表现为ConsistencyService接口的两种实现,如下图:
RaftConsistencyServiceImpl类提供的是基于Raft协议的永久数据存储方案。nacos naming服务内部实现了一个简化的raft协议。每个节点通过本地文件系统保存所有数据,通过raft协议选择leader并同步数据。raft协议通过保证数据在各naming节点的一致性来保证naming服务的高可用。
DistroConsistencyServiceImpl用于存储临时数据。由于nacos的临时数据需要通过创建者不断得发送心跳数据来保活,因此在存储上反而比较简单。naming服务并不会在文件系统或者数据库中持久化存储临时数据,它通过心跳包来保证数据的有效性。
naming服务使用一种“分区”算法来管理临时数据。它把所有数据分为若干个block,每个naming节点只负责一个block内数据的创建/删除/同步。通过数据同步,每个naming node最终都会持有完整的数据集合。
最终DelegateConsistencyServiceImpl类同时持有RaftConsistencyServiceImpl和DistroConsistencyServiceImpl两个实例,通过每个数据key的格式来判断最终存储的类型。
“怎么理解Nacos Naming持久化存储”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!