【仅供内部供应商使用,不提供对外解答和培训】

1、集群使用本地文件系统时各机器之间文件同步:

  • RPC方案:需要RPC目标文件、操作类型和流,对于创建和修改文件的操作,还需要传输流。但是新机器启动后的同步比较困难,启动过程中的其它机器的文件同步RPC都已经不存在,可行性很差;
  • 状态服务器存储所有文件状态方案:所有的文件的版本号(last_modify之类)和所在机器都在状态服务器维护,新加机器启动后需要和状态服务器扫描对比每个文件,再从该文件最新版本所在机器请求(听起来怪怪的);
  • 日志和finedb这些文件不用于同步。

2、集群使用共享存储:

  • 使用共享存储没有同步的问题,但是由于共享的存储服务器一般是在其它机器上,可能会比各机器使用自身文件系统慢;
  • 需要使用锁来控制文件的读写,多个机器锁竞争也可能导致性能问题,考虑zookeeper或者FileLock来实现锁功能;
  • 由于使用抽象的存储,不能再直接使用java.io.File来进行文件的操作,否则会出bug。

3、不同的存储访问上层统一接口:

  • 考虑的存储有文件存储FTP、NFS,HDFS,对象存储OSS等,这些存储的要构建一个统一的访问接口;
  • 文件夹的概念,OSS的所谓文件夹实际上是一个大小为0kb的文件;

4、文件同步失败:

  • RPC失败,通信问题;
  • 状态服务器方案的也是网络问题;
  • 失败后如何处理;

5、目录对比扫描更新:

  • 文件同步分为两种场景
    i 业务逻辑操作文件后的同步;
    ii 手动添加文件后的同步;
  • 对于手动添加的文件,我们需要及时的发现并进行同步,初步的方案是使用apache common-io的文件定时扫描,触发文件更新监听的事件去做同步。

 

  • No labels