项目背景
FydeOS 是基于 ChromiumOS 的操作系统,面向国内个人与企业用户进行本土化和二次开发定制。系统装好之后,个人用户需要使用日常应用、提高生产力、设备间共享文件;企业用户还需要账号认证、同步偏好设置、绑定设备等等云服务。

我做了什么
- 应用商店:面向国内用户的 Chrome 应用镜像商店。通过爬虫持续抓取并重新签名打包 1000 多款网页应用和浏览器扩展。商店支持应用浏览、搜索和版本更新;管理后台供运营维护应用信息、版本和上架状态。后来还加入了直接从商店安装安卓应用的功能。
- FyDrop:基于 WebRTC 的浏览器端文件共享,同一网络下不登录账号就能在设备间互传文件。集成进 FydeOS 文件管理器,成为系统内置功能。
- 社区论坛:基于 Discourse 定制的论坛。处理上游版本升级的兼容问题。开发多语言切换、订阅绑定和工单系统等插件。
- 企业管理平台:参与后端从 Node.js / MongoDB 到 Go / PostgreSQL 的重构。

技术细节
账号与同步服务重构: 账号服务和同步服务原本是两个独立的 Node.js 服务,后又加入企业管理后端,三套服务各自对外提供接口。重构时把账号服务和同步服务用 Go 重写,后端服务统一用 gRPC 定义接口,前面加一层 APISIX 网关统一对外。除了编程语言,数据库也从 MongoDB 迁移到 PostgreSQL,优化数据结构,配合联合索引和分片,重构后的同步服务数据库查询耗时降低 50%。
重构前 · 各自对外的独立服务
账号服务Node.js
同步服务Node.js
企业管理后端Go
重构后 · 网关统一入口
Apache APISIX 网关gRPC
账号服务Go 重写同步服务Go 重写企业管理后端Go
FyDrop 点对点连接: 浏览器通过 WebSocket 连上信令服务器,按公网 IP 把同网络下的设备分进一个房间。文件经 RTCDataChannel 在设备之间直接传输,全程加密。文件切成小块按顺序发送,每发完一段等接收方确认再继续,避免缓冲区堆积。用 STUN 发现公网 IP,考虑到在某些复杂的 NAT 环境下会失败,所以另外部署了 TURN 服务器中继兜底。