使用腾讯云COS对象存储进行Eagle素材的云同步

2021-10-29

< view all posts

Eagle是设计领域常用的一个素材管理软件,虽然它本身没有提供云存储,但是支持把素材库放到云同步盘来远程保存和更新。一般配合Eagle使用的是坚果云和OneDrive,但是都有各自的一些缺点:坚果云价格偏高且存储空间小,OneDrive的同步容易卡住、网络有时候不稳定。

是否存在另外的解决方案呢?这次我尝试了使用腾讯云COS对象存储+rclone的方式,将COS挂载为一块网络硬盘作为Eagle的保存目录。从结果上来说是可用的,但也存在一些问题,下面详细说说。

首先是配置方式,腾讯云的这篇文档已经讲得很详细了。简单来说,首先要在腾讯云的COS控制台创建一个存储桶,注意访问权限选择“私有读写”,这样存储的内容才不会被公网上的其他人访问。创建时还有一些可选的功能,包括:版本控制、日志和服务端加密,根据自己的需要添加就可以。

接下来,需要进入“访问管理 - 访问密钥 - API密钥管理”页面,创建一对密钥,通过这个密钥可以访问账户上的云资源。之后到存储桶的概览页面,复制存储筒的访问域名,安装相应的软件,并连接到存储桶的地址即可。

软件可以使用开源的rclone(需要配合Winfsp进行磁盘挂载),或者一步到位使用收费的TntDrive。这两个软件功能基本上是一致的,TntDrive的操作相对简单一些,而且提供了图形界面。

在成功挂载网络硬盘之后,就能像在本地位置一样创建Eagle资源库了。但是需要注意的是,rclone以及TntDrive都没有坚果云或者OneDrive那样智能的本地缓存机制。它们的缓存机制很原始:缓存不会主动更新,只在第一次访问某个文件时将它加入缓存,之后所有的读取都先在缓存里查找,如果缓存里面有,就直接用缓存的数据,不检查云端这个文件的状态。可以看到这里和同步盘是不一样的:只要缓存还在,它就不会从云端重新读,即使文件内容发生了更新

而另一方面,Eagle的存储机制是这样的:对每个素材文件,它都会生成一个与之相对应的json配置文件,而为了提升访问速度,它又额外把这些独立的json文件拼接到一起,创建一个大json文件用作提速缓存。

因此,在使用COS多设备同步Eagle的时候,如果某台机器上有旧缓存未失效,就可能导致问题:首先Eagle可能无法正确载入新的素材,更严重的是在变动了素材库之后,Eagle的大json文件会被本地缓存的旧版本直接覆盖掉,导致数据的丢失。

为了避免这个问题,最简单的方法就是不要使用缓存。但这样每次重新打开Eagle之后就得从头下载所有素材的缩略图,以及点开时要重新下载原图,流量(收费)和载入速度又会变成一个问题。

另一个解决方案是创建多个存储桶,每台设备只对一个存储桶有写权限,对其它存储桶都以只读形式访问。这样就可以设置非常长的缓存保留时间,因为只要每个Eagle素材库都只有一台设备能写,就可以保证不会发生缓存相互覆盖的情况。对只读的存储桶,最坏可能的结果是本地的缓存过旧,读不到新的文件,此时清理缓存重新下载即可,相比每次打开都重新下载方便了不少。

因为存储桶的数量是不计费的,想创建多少个就可以创建多少个(计费的是总容量),因此多开几个存储桶并不影响成本。当然,这个方案本质上依然没有解决时不时地可能需要清理缓存,重新下载的问题,只是避免了缓存覆盖导致数据损坏的可能性。

最后总结一下,使用COS方案的优势:存储空间价格相对低(标准存储约0.1元/GB/月)、网速还行且稳定(上行和下行共享15Gbit/s)、可上传超超大文件:(上传单个对象最大48.82TB)

劣势:按流量收费(约0.5元/GB)、缓存机制原始导致的载入慢(时不时需要重新下载文件)和消耗流量大、配置复杂。