Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

考虑使用绝对路径存放应用数据 #78

Open
xtyuns opened this issue May 12, 2024 · 10 comments
Open

考虑使用绝对路径存放应用数据 #78

xtyuns opened this issue May 12, 2024 · 10 comments
Labels

Comments

@xtyuns
Copy link

xtyuns commented May 12, 2024

背景

当使用 cargo install 安装 rnacos 后,实际上可以在任意目录下启动 rnacos,但是目前的应用数据路径 AppSysConfig.config_db_dir 默认使用相对路径 nacos_db,这使得每次运行 rnacos 的工作路径必须相同,否则将会在新的工作路径下创建数据文件。

建议

将默认数据路径指定为操作系统的规范路径,如 linux 下的:$HOME/.local/share/<project_path>

@heqingpan
Copy link
Collaborator

heqingpan commented May 12, 2024

这类场景需求确实是合理的,需求已收到。

不过调整的建议方案,可能还要再看看。

主要需要考虑对以下几个场景的支持:

  1. 需要尽量兼容目前用户使用正在使用的版本,不要用户一升级,结果存储数据都变,这会在用户预期之外。(如果一定要变,升级前一定要让用户明确感知)
  2. 在同一台机器上启动多实例场景,如果储存地址默认是同一个也会有问题(可能已经有用户正在使用这类部署方式)。
  3. r-nacos打包的docker目前的运行的存储目录是在/io/nacos_db下,如果直接改默认路径,docker版本升级后就有问题(和之前的说明文档与部署样例也存在冲突)。

这类默认行为方式和对外的接口协议类似,已经暴露给外部用户使用之后,不太好直接调整默认行为。

后面可以考虑通过增量的参数或配置来支持,或者在某个不向下兼容的版本再一起调整。

目前版本可以先通过增加配置一个额外的环境变量支持你的诉求。

在linux或mac系统,可以在~/.bash_profile中增加环境变量:

export RNACOS_CONFIG_DB_DIR=~/.local/share/r-nacos/nacos_db

在windows系统,也可以手动配置系统环境变量。

配置好环境变更后,每次直接通过rnacos启动,都会使用同一个存储目录。


  1. 不调整默认行为,通过额外配置可以支持此功能,其代价不大;
  2. 通过调整默认行为,以支持此功能,其影响点较大,代价较大;

通过比较,暂定不对这个块内容做调整。

@heqingpan
Copy link
Collaborator

heqingpan commented May 14, 2024

之后我又仔细思考,这个建议的目标处理方式是合理的,那我们应该就往这个方向推进。

切换方式:

  1. 在合适的版本,把默认不配置数据目录切换为规范目录($HOME/.local/share/<project_path>);用户如果在配置指定目录,则按指定目录存储。
  2. 再切换之前的一个版本更新文档,提示用户在生产环境要指定配置部署,切换的版本加上对应的说明。(默认值不兼容,可以通过明确配置规避问题)
  3. 对docker目录/io/做兼容处理;如果运行的目录在/io/,那么认为是docker环境,如果没有配置数据目录则和目前的取值操持一致(nacos_db相对目录)。

我会选一个合适的版本执行切换。

在没有切换之前,只能通过上面给出的方式多配置一个全局环境变量RNACOS_CONFIG_DB_DIR支持默认全局路径。

@xtyuns
Copy link
Author

xtyuns commented May 15, 2024

应该在一次 breaking change 中进行调整。

  1. 对于已经使用中的用户,需要手动设置 RNACOS_CONFIG_DB_DIR 为之前正在使用的目录,从而保证更新兼容或手动迁移数据至新目录
  2. 对于同一台机器上启动多实例场景,考虑新增一个 --data-dir 之类的选项指定数据目录(难道之前的多实例都需要切换到不同的目录启动吗?)
  3. dockerfile 中默认将 RNACOS_CONFIG_DB_DIR 设置为 /io/nacos_db 来保证兼容

@xtyuns
Copy link
Author

xtyuns commented May 15, 2024

另外,RNACOS_CONFIG_DB_DIR 是否应该修改为 RNACOS_DATA_DIR,同时也添加一个 RNACOS_CONFIG_DIR 来作为 .env 文件的默认目录

相关 crate: https://crates.io/crates/directories

@heqingpan
Copy link
Collaborator

heqingpan commented May 15, 2024

打包的docker 中设置RNACOS_CONFIG_DB_DIR默认环境变量的方式很好。

关于RNACOS_CONFIG_DB_DIR改为RNACOS_DATA_DIR,可以同时支持两个配置,两个都配置时取后者,后面文档说明推荐使用RNACOS_DATA_DIR。 这样就可以平滑切换。

目前以支持通过运行参数指定配置,增加RNACOS_CONFIG_DIR个人认为必要性不高,可以考虑不指定配置文件时,先后尝试从当前目录.env,~/.local/share/r-nacos/.env加载配置文件。

@leyou240
Copy link

有没有配置文件的方式啊。方便在配置文件中指定

@heqingpan
Copy link
Collaborator

配置文件指定数据目录最开始就是支持的,这个issue主要讨论的是没有配置指定时默认目录。

配置中指定数据文件目录的配置项是:RNACOS_CONFIG_DB_DIR ,具体可以参考配置说明。

@heqingpan
Copy link
Collaborator

r-nacos v0.6.0 版本已发布,已默认使用绝对路径存储数据。

reigadegr pushed a commit to reigadegr/r-nacos that referenced this issue Oct 8, 2024
@xtyuns
Copy link
Author

xtyuns commented Oct 8, 2024

相关 crate: https://crates.io/crates/directories

不考虑使用这种成熟的库来实现跨平台下的一致性吗

@heqingpan
Copy link
Collaborator

heqingpan commented Oct 8, 2024

现在其实已经引入跨平台的库。

我个人之前使用windows的经验是默认通过文件管理进入到对应目录再双击运行应用,这种场景数据默认存储在当前目录比较友好。

我也有段时间不怎么用windows,不确定我的经验是不是主流的,目前没有数据支撑,就先按自己理解的来。

如果大多数人觉得windows默认也应该用绝对路径,后面再调整。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants