本地优先软件概念来自 Martin Kleppmann 、Adam Wiggins 、Peter van Hardenberg 、Mark McGranaghan 合写的《 Local-first software 》这篇研究报告
和本地软件相比,云服务能够从任何设备访问数据并且和任何人实时协作,在无缝协作层面有巨大优势。但云服务也存在缺陷:
而“传统”的本地软件,数据都在本地磁盘上读取和写入,用户对数据拥有完全的所有权和控制权,不依赖不可控的云端服务,也不被云服务商的用户条款给限制。但另一方面,本地软件的数据是孤立的,难以在多个设备之间同步,更无法做到和他人实时协作。
总体而言,云给了用户协作,而本地软件给了用户所有权。数据所有权和实时协作并不天然对立,是否有鱼和熊掌兼得的方案,让产品既具有云服务所有优点,同时允许用户拥有数据所有权?
本地优先软件正好可以应对这一挑战。在云服务中,服务器上的数据被视为数据的主要权威副本,客户端的数据只是从属于服务器,任何数据获取和修改都必须连接到服务器。而在本地优先应用程序中,交换了数据主体的角色,本地设备(电脑或手机)上的数据变成了主要副本,服务器仍然存在但它们的主要作用只是保存数据的辅助副本以帮助数据在多台设备之间同步。这种数据主体的改变带来全然不同的产品形态,也是本地优先软件最重要的特征——优先使用本地存储和本地网络而不是远程数据中心的服务器来管理数据。
传统的云服务,数据存储在云端服务器,数据修改和数据查询操作都需要往返服务器。虽然现在大部分情况下网络速度已经足够快了,但在如跨国、户外等一些场景下,仍然存在网络带宽不足甚至网络连接不稳定的情况,这种时候云服务的体验会迅速下降。
而本地优先软件因为数据的主要副本保存在本地设备上,数据相关的操作首先读写入本地磁盘数据来完成,数据同步工作则在后台悄悄进行,操作过程中不需要等待服务器的来回请求,不受网络条件影响,使用过程会顺畅无比。
本地优先的软件可以将数据保存在每台设备的本地存储中,并且这些数据可以在多个设备之间同步。通常来说同步服务会将完整的数据副本备份在云服务器上,并通过云服务器作为数据同步的中心节点实时同步多个连接的设备。
本地优先软件在本地有不依赖网络的运行环境,而且数据的主要副本存储在每个设备的本地文件系统中。这种设计让用户即使在离线时也可以正常使用,当网络连接可用时,再与其他设备同步。而且本地优先软件的数据同步不一定需要通过中心云服务或者通过互联网来完成,可以使用蓝牙、本地 WiFi 将数据同步到附近的设备。
相比传统的云服务,本地优先软件在多人协作场景时会遇到更多技术困难,是本地优先软件需要面对的重大挑战之一。在技术层面上 CRDT (无冲突复制数据类型)有潜力成为实现本地优先软件的基础技术,在本地优先软件非实时、去中心的协作场景下,CRDT 更关注实现无需人工处理冲突的最终一致性。
传统云服务数据和云服务功能完全绑定,如果云服务关停(在商业社会里这种情况司空见怪),用户也无法再访问云服务产生的数据了,即便有数据导出,离开了运行环境的数据也会变得难以使用。对本地优先软件来说,因为数据以及读取和修改数据所需的软件都存储在本地计算机上,数据的寿命会长得多。即便软件运营公司不再更新软件,操作系统升级换代,在必要得情况下,依然可以在虚拟机里安装原始软件来使用数据。
更严苛的做法是,在一开始构建软件的时候,对用户产生的数据使用标准数据格式。
不是所有的云服务商都有能力提供一流的安全团队来保障云端数据免受外部攻击,而且即便是道德标准很高如谷歌这样的公司也依然会以多种方式分析用户的数据。面对云服务,涉及数据安全和隐私问题时,用户唯一能做的就是完全信任云服务商。
而对本地优先软件而言,本地客户端提供了完整的功能和数据,并不需要一个全知全能的云中心。本地优先的应用程序可以通过端到端数据加密方案来保障数据安全和隐私。在端到端加密方案里,做为数据中转的云全程只传输和保存加密后的数据,天然规避了云服务商的主动做恶并能有效阻挡来自第三方的网络攻击。
云服务的数据所有权不是用户的,当用户的行为被平台认定为违反平台规则、侵犯他人权益、触犯相关法律法规、甚至只是平台自己犯了严重的技术或者运营错误导致数据不可用时,就能明白这一点。而在本地优先的应用程序中,数据的所有权始终归用户所有。
在数据控制权方面,云服务中用户访问和修改数据的方式受到服务提供商的 API 、产品功能和服务条款的限制。而本地优先软件的所有数据都存储在用户自己的设备上,因此用户可以自由地任意处理这些数据。
您可以访问《 Local-first software 》,或者该文章的译文《本地优先软件》了解更多关于本地优先软件的理念。
在我们最初打造 Pixcall 的时候,我们希望做出符合我们自己理想的产品,即有云的便利又不会丢掉我们看重的隐私权,然后刚好我们的产品和本地文件相关,自然得我们就选定了目前这样一个形态的产品---全功能的本地+加密的云。然后在过程中我们看到了《 Local-first software 》这篇文章,发现已经有人系统得整理了我们这类产品的特质。当然,作为深度实践者,我们也有一些额外的感受:
1
snoopyhai 2022-09-29 14:48:38 +08:00 2
对于目前这个国域网政策来说,一切无法自建的云端服务,都无法被信任。
所以我更倾向于那些可以自己部署后端服务的服务。 |
2
Exdui 2022-09-29 14:53:43 +08:00
在中国是私有化部署优先。
|
3
charlie21 2022-09-29 15:04:21 +08:00
老式桌面软件 + 数据上传下载功能
|
4
agagega 2022-09-29 15:28:13 +08:00 via iPhone
作为用户当然是喜欢的。对开发者来说,本地优先会增加复杂度,因为读写数据从纯的发请求变成了同步,要处理的麻烦事会更多。
|