零散问题
CAP理论
CAP定理是分布式系统中的基本理论之一,其中
Consistency(一致性):一致性指的是所有节点在同一时间看到相同的数据。在分布式系统中,保持数据的一致性是非常重要的,因为不同节点可能并不总是同时收到更新。在 Nacos 中,一致性体现在服务注册和配置管理方面。Nacos 使用了 Raft 一致性算法来确保集群中的数据一致性。当一个新的节点加入集群,或者节点发生故障时,Raft 算法能够确保数据仍然一致。
Availability(可用性):可用性指的是每个请求都能在有限的时间内收到响应,不管系统中的部分节点是否故障。在分布式系统中,保持高可用性意味着要确保系统在遇到故障时仍然能够提供服务。Nacos 的集群架构通过多节点部署和故障自动转移来保持高可用性。当节点故障时,其他节点能够继续提供服务。
Partition Tolerance(分区容错性):分区容错性指的是系统中的一些节点之间的通信可能会失败,即节点之间的连接可能会中断,但系统仍然可以继续工作。在分布式系统中,网络分区是无法避免的,因此需要保证系统在分区发生时依然能够正常工作。Nacos 的集群架构通过 Raft 算法来保证分区容错性。Raft 算法在节点故障或网络分区发生时,能够确保集群继续正常运行。
在一个分布式统统中,没办法同时保证三个特性,在某些特定的业务场景下,需要做出牺牲,Nacos支持两种模式。
1、AP模式
Nacos的默认模式,临时实例采用的模式
对于可用性比较高的场景,例如:网站、在线游戏等,可以选择使用AP模式,这种模式下,Nacos会优先保证服务的可用性,然后尽可能的保证服务数据的一致性,减少对业务的影响。对于Nacos的注册中心而言,应该是AP模式,保证服务的高可用,实现数据的最终一致性,这个样可以减少注册中心的压力,对于业务系统而言,在一致性方面,框架一般都会提供服务的容错性和重试机制,避免数据不一致的问题。

2、CP模式
永久实例采用的模式,这意味着即使实例宕机,Nacos服务列表中的实例信息也不会被清除。
对于一致性要求比较高的场景,如:金融、支付等场景,这些场景下,为了保证数据的一致性,会对服务进行隔离和恢复,但是这会导致一些服务的不可用,牺牲服务的可用性。
要设置永久实例,你需要在application.properties或application.yml文件中进行配置。
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置ephemeral为false即表示该实例为永久实例。

服务掉线,不会清除实例信息

Nacos服务元数据启动配置


spring.cloud.nacos.discovery.metadata.VERSION
服务器定时清空nacos log
详见:https://nacos.io/blog/faq/nacos-user-question-history16190/
1 nacos的运行日志 在nacos的主目录(nacos.home)下面,默认: /root/logs

脚本:
touch clear_csp_log.sh
#!/bin/bash
find /root/logs/csp/ -name "sentinel-record.log.*" -type f -mtime +1 -delete
find /root/logs/csp/ -name "jm-cloud-*" -type f -mtime +1 -delete
增加系统任务
crontab -e
16 12 * * * /root/logs/clear_csp_log.sh
2 Nacos的data/protocol/raft/目录下主要存放的是与Raft协议相关的数据和日志文件。这些文件对于Nacos集群中的数据一致性、节点间通信以及故障恢复至关重要。具体来说,这个目录包含了以下几个关键组件

这三个包里面的log目录里面都有大量的日志文件

如:

这里的文件也可以跟上面一样,定时删除