• 1. 开源的企业文件云存储平台潘凌涛 freeplant@gmail.com@freeplant
  • 2. 内容提纲产品介绍,Seafile 是什么 项目理由,为什么要做 Seafile 工作原理,Seafile是怎么工作的 经验分享,从 Seafile项目从学到的经验
  • 3. Seafile 是什么Seafile 是一个面向企业、团队的云盘, 解决文件管理和共享的问题。在此基础上,Seafile 提供群组协作的功能, 形成一个以文档为中心的协作平台。
  • 4. 资料库和个人页面
  • 5. 群组页面和讨论
  • 6. 机构页面
  • 7. 资料库页面
  • 8. 客户端
  • 9. 为什么要做 Seafile文件管理和共享和企业/团队的最基本的需求。Seafile 就是要做一个高质量的开源的企业云存储平台。同时加入协作功能,形成一个创新的产品。
  • 10. Seafile 特色群组协作功能 端到端加密 小巧/高性能,可部署于非常多的平台
  • 11. 10000 次/月的服务器软件下载1300+ Github Star
  • 12. Seafile 怎么工作 –资数据料库模型一个资料库是一个带历史的去重的文件系统
  • 13. Seafile 怎么工作 – 数据存储文件对象,目录对象,文件块存在操作系统的文件系统上,或者 S3/Swift/Ceph 这样的外部存储中。结构化数据存在 MySQL 或者 SQLite。
  • 14. 定期到服务器查看最新的 Commit 下载文件和元信息,和本地内容归并 本地有修改,生成新的 Commit,并增量上传到服务器 同步算法
  • 15. Seafile 怎么工作 – 架构Ccnet 负责通信,Seahub 网站界面,HttpServer 模块负责网页端的文件上传下载。Seafile 负责数据管理和同步。
  • 16. 实现语言选择Ccnet/Seafile/HttpServer 用 C 语言实现,使用 libevent 事件循环+线程池处理异步任务的架构。Seahub 使用 Python Django 框架。TaskDaemon 处理后台发邮件等任务,用Python 语言。
  • 17. 实现语言选择进程间通信使用自己设计的 RPC。用 python 和 c 都上实现了一遍 RPC Server/Client。用 json 来做数据交换的格式, 以支持跨语言的数据交换。
  • 18. Seafile 项目经验产品设计 架构设计 实现技术选择
  • 19. 产品设计在确定功能核心的基础上, 列出最小功能集合, 把易用性和符合大众习惯放在第一位 来进行设计
  • 20. 产品设计Seafile 的核心是团队文件共享, 群组和多资料库同步是最基本的功能多资料库同步照成了一定的入门难度, 但是我们认为是必要的。
  • 21. 产品设计原来为了方便,客户端的界面是用 Python 来实现了一个本地的 Web 界面。造成了不少混淆,这是不符合大众习惯的反面例子。后来我们改成了 Qt。
  • 22. 架构设计客户端不应该采用复杂的多进程架构
  • 23. 通信协议选择程序内部的多组件(可能分布在多个机器上)通信,效率和便捷性是第一位的,在 TCP 协议上直接设计一套 RPC 是最好的。 多程序间以及互联网的通信,互操作性才是最重要的。HTTP协议才是互联网标准的通信协议。
  • 24. 通信协议选择 – HTTP 协议HTTP 的坏处是比较复杂,它不是一个为传输文件而设计的协议。在处理文件传输的时候,有太多的小陷阱。好处是一旦使用了 Http 协议,你的应用就能使用上 Proxy, Cache, Load Balance 这些基础服务。
  • 25. 实现语言选择客户端:C/C++ 是最好,最成熟的跨平台语言服务器:Python 写 Web 和脚本都是非常好的 选择。追求性能的地方要用 C。
  • 26. 总结难点:无论是服务器还是客户端都要运行在多个平台上。功能选择还有架构设计上都要保持简单。使用最成熟的、支持最广泛的实现技术。
  • 27. 如果重新编写客户端使用单进程,用 QT 框架, C++ 语言。服务器端保持目前的架构,使用 Python + C。客户端和服务的通信使用 HTTP 协议。
  • 28. 关于 Seafile 更多信息http://seafile.com