在 LobeChat 中实践本地优先软件范例,利用 YJS 和 WebRTC 构建无缝云同步。
在数字时代,云服务几乎已成为每个在线应用程序的标准组成部分。它们为用户提供了便捷、可靠、灵活的数据存储和访问方式。然而,随着数据安全和隐私问题日益受到关注,”本地优先 “的概念从去年开始变得越来越流行。
本地优先的启蒙
2022 年,笔者读到《Local-first software》一文,该文主张将本地环境作为数据处理和存储的首选位置,通过巧妙的设计,远程同步是可能的,但不是必须的。这种思想对于保护用户隐私和提高应用程序性能有很大的好处。本地优先 “一文为我打开了一个新视角,引发了我对构建以本地环境为中心、云同步为补充的产品的深入思考,并为这一做法播下了种子。
LobeChat 作为开源社区中一个新兴的人工智能聊天应用程序,拥有一个非常活跃的社区,我们收集了许多关于云同步的请求。我们的用户希望在不影响数据隐私和安全的前提下,在不同设备上获得一致的聊天体验。从用户体验的角度来看,如果我们能将 “本地优先 “的精神与无缝远程同步结合起来,产品体验会是怎样的呢?
这促使我探索一种解决方案,既能在 LobeChat 中无缝同步到云端,又能支持本地优先。
探索与实践
在决定采取行动之后,我们选择尝试使用 YJS 和 WebRTC 技术构建点对点(P2P)同步机制。
经过两周左右的实践,初步完成了整个功能的实现,其优点如下:
- 无需传统的后台数据库: 利用 YJS 共享编辑库和 WebRTC 实时通信技术,我们可以不使用 Redis 和 MySQL 等传统数据库进行数据管理和同步。
- 高度隐私: 使用 WebRTC 在客户端之间直接交换信息,只需信令服务器建立连接,在保证效率的同时,大大提高了数据传输的安全性和私密性。
- 零冲突: YJS 引擎可确保所有参与者随时看到完全相同版本的数据状态,并自动解决任何潜在冲突。
- 实时会话同步: 在完成整个方案后,发现实时会话同步可以带来 “即时聊天 “般的体验,未来甚至有可能支持多人同时在线与人工智能对话。
遭遇挑战:SoT(真相来源)困境
当然,我们在实施过程中也遇到了挑战: 如何处理离线期间产生的操作?例如,如果在 PC 上删除了一条信息,但移动设备在重新连接之前没有更新,该如何处理?
本地优先 “概念的背后隐藏着一个更深层次的问题: 真相来源”(SoT)到底在哪里?当多个独立且权利平等的节点出现不一致时,如何确定唯一的真相来源?
我们目前的实施策略相对简单,节点一旦重新上线,就会尽力达到最新状态,以确保内容在不同设备间尽可能保持一致;新的或修改的操作会广播到所有节点。这意味着,只有当所有设备都在线并能够通信时,此类问题才能得到完美解决。就用户体验而言,这并不理想,因此我们认为这一功能目前还处于 “实验 “状态。我们也非常希望得到社区的反馈,并共同讨论本地优先方向的下一步。
总结
总之,”本地优先 “的探索给 LobeChat 带来了许多启示和变化。从技术选择、架构设计到具体问题的处理方法,都得到了重塑。随着第一版云同步解决方案的推出,我相信 LobeChat 的 “本地优先 “之旅已经正式开始。
作者:LobeHub。原文:https://lobehub.com/blog/lobe-chat-sync-with-yjs-webrtc
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。