/file-clone

Help you sync files efficiently, quickly and securely, even for large files

Primary LanguageKotlin

file-cloner文件克隆同步器

Help you sync files efficiently, quickly and securely, even for large files

一个“文件双向同步的工具”,支持大文件上传,支持断点续传,支持多任务并发执行,支持文件实时上传(修改即上传),更多特性参考下面。

开源项目地址 https://github.com/yancheng199287/file-clone

概念

基于同步原则,实现客户端——服务端的文件双向同步,即客户端文件可以自动复制到服务端,并且服务端的文件也可以自动复制到客户端,二者取并集,并在二者启动的时候,任意一方的文件发生变更也将自动同步到另一方,真正实现跨主机自动复制。

开发环境

开发语言:kotlin,使用该语言可以无缝利用Java生态资源,并且可以更加高效简便的编码

模块划分

  1. client 客户端模块,主要是在用户本机启动,监听指定目录文件变化并同步到服务端

  2. common 公共通用模块,主要是抽取客户端和服务端相同的逻辑代码,实现组件独立,解耦合,多复用

    主要功能,实体类,缓存,发布订阅,事件,文件监控,文件分割,配置文件解析等相关操作

  3. db 数据库模块,主要是存储本地文件的同步状态

  4. protocol 协议模块,自定义netty协议

  5. server 服务端模块,主要是在远程服务器上启动,接收客户端连接,实现文件双向同步

主要组件

网络通信组件:netty 网络通信利器

序列化组件:kryo 高效的序列化神器

本地缓存:caffeine Java最好的本地缓存

发布订阅:disruptor 高并发无锁发布订阅

文件配置:config4k 非常人性化的配置

本地缓存:mapdb 本地持久化缓存

本地数据库:sqlite 本地数据库

文件监听:commons-io apache开源文件监控

日志组件:logback 高性能日志组件

工具类:YC 自研通用开发工具箱

orm工具:dbcp2+dbutils+ormlite+sqlite-jdbc orm框架

jni扫描器:walkdir 使用Rust编译动态链接库,给java提高性能

主要特性

  1. 文件深度扫描,速度极快,内存极低
  2. 修改即同步,增加新文件,修改文件内容,删除文件,立即同步,拒绝等待
  3. 极速秒传,拒绝冗余
  4. 分块传输,无惧大文件
  5. 断点续传,无惧网络不稳定
  6. 多路并行,上传下载同时执行,多任务互不干扰
  7. 基于git的文件忽略**,贴心服务,体验至上
  8. 数据统计,进度提示,看得见的数据,放心的使用
  9. 支持ssl加密选用,支持客户端服务端,秘钥,IP,MAC认证,安全放心,值得信赖

核心原理

客户端,服务端启动瞬间,即扫描指定目录文件,添加到数据库

根据同步状态,客户端和服务端分别开始同时即接收来自对方的文件也发送自己的文件

程序运行期间,任何文件的变更都会被发现,也将加入同步队列

客户端和服务端最终取各自双方的并集,实现文件目录一模一样,绝对的保证文件的完整性

自身优势

程序自诞生以来,在追求体验的基础之上,不断优化程序的性能,无论是执行速度还是内存占用都是尽量苛刻,这一优势不仅来自大量的数据测试支撑,更来自于作者对项目的高质量追求,无论是选型开源组件,还是在编码中,都尽量以追求高性能,满足低性能硬件计算机的要求,也尽量保证不过多浪费用户的计算机资源

应用场景

如果你经常需要在多个电脑之间传输文件,你可以使用,免去搭建ftp服务,配置账号的尴尬

如果你经常需要远程服务器,需要上传文件,你可以使用,实现自动上传,无需人工操作

如果你需要保证多个电脑之间,文件的内容一模一样,你可以使用,特别适合个人网盘

如果你需要安全的传输文件,便捷的上传文件,跨主机拷贝文件就像本地复制粘贴一样,你可以使用

目前已知用户的使用场景:

某用户经常同步服务端的日志和自动备份的数据文件到自己电脑,以便及时备份和分析项目问题,避免自己来回手动操作

愿景计划

以文件传输为核心,逐渐由内向外延伸拓展,打造一个精品内核,以拓展优秀的边缘生态

联系我们

QQ交流群:368512253