V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mooqii
V2EX  ›  问与答

本地优先软件(Local-first software)这个概念你怎么看?

  •  
  •   mooqii · 64 天前 · 688 次点击
    这是一个创建于 64 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本地优先软件概念来自 Martin Kleppmann 、Adam Wiggins 、Peter van Hardenberg 、Mark McGranaghan 合写的《 Local-first software 》这篇研究报告

    “本地优先软件”是一种软件设计原则:让用户在使用软件过程中既能拥有云服务的协作性又能像使用传统本地软件那样拥有完整的数据所有权

    和本地软件相比,云服务能够从任何设备访问数据并且和任何人实时协作,在无缝协作层面有巨大优势。但云服务也存在缺陷:

    • 云服务的所有数据访问都通过服务器进行,用户只能做云服务商允许做的事情。换句话说,云服务商才是真正拥有数据所有权的对象,并且控制着所有数据。
    • 云服务的数据和云服务完全绑定,如果云服务关闭,数据也会变得不可使用。即便能导出数据,离开了云端服务,通常也无法继续发挥数据的价值。

    而“传统”的本地软件,数据都在本地磁盘上读取和写入,用户对数据拥有完全的所有权和控制权,不依赖不可控的云端服务,也不被云服务商的用户条款给限制。但另一方面,本地软件的数据是孤立的,难以在多个设备之间同步,更无法做到和他人实时协作。

    总体而言,云给了用户协作,而本地软件给了用户所有权。数据所有权和实时协作并不天然对立,是否有鱼和熊掌兼得的方案,让产品既具有云服务所有优点,同时允许用户拥有数据所有权?

    本地优先软件正好可以应对这一挑战。在云服务中,服务器上的数据被视为数据的主要权威副本,客户端的数据只是从属于服务器,任何数据获取和修改都必须连接到服务器。而在本地优先应用程序中,交换了数据主体的角色,本地设备(电脑或手机)上的数据变成了主要副本,服务器仍然存在但它们的主要作用只是保存数据的辅助副本以帮助数据在多台设备之间同步。这种数据主体的改变带来全然不同的产品形态,也是本地优先软件最重要的特征——优先使用本地存储和本地网络而不是远程数据中心的服务器来管理数据。

    理想的本地优先软件具备以下七个特质

    1. 本地运行没有网络延时
    2. 支持多端同步
    3. 网络不是必选项
    4. 支持多人协作
    5. 更有生命力的数据
    6. 天然具备安全和隐私
    7. 用户拥有完全的所有权和控制权

    1.本地运行没有网络延时

    传统的云服务,数据存储在云端服务器,数据修改和数据查询操作都需要往返服务器。虽然现在大部分情况下网络速度已经足够快了,但在如跨国、户外等一些场景下,仍然存在网络带宽不足甚至网络连接不稳定的情况,这种时候云服务的体验会迅速下降。

    而本地优先软件因为数据的主要副本保存在本地设备上,数据相关的操作首先读写入本地磁盘数据来完成,数据同步工作则在后台悄悄进行,操作过程中不需要等待服务器的来回请求,不受网络条件影响,使用过程会顺畅无比。

    2.支持多端同步

    本地优先的软件可以将数据保存在每台设备的本地存储中,并且这些数据可以在多个设备之间同步。通常来说同步服务会将完整的数据副本备份在云服务器上,并通过云服务器作为数据同步的中心节点实时同步多个连接的设备。

    3.网络不是必选项

    本地优先软件在本地有不依赖网络的运行环境,而且数据的主要副本存储在每个设备的本地文件系统中。这种设计让用户即使在离线时也可以正常使用,当网络连接可用时,再与其他设备同步。而且本地优先软件的数据同步不一定需要通过中心云服务或者通过互联网来完成,可以使用蓝牙、本地 WiFi 将数据同步到附近的设备。

    4.支持多人协作

    相比传统的云服务,本地优先软件在多人协作场景时会遇到更多技术困难,是本地优先软件需要面对的重大挑战之一。在技术层面上 CRDT (无冲突复制数据类型)有潜力成为实现本地优先软件的基础技术,在本地优先软件非实时、去中心的协作场景下,CRDT 更关注实现无需人工处理冲突的最终一致性。

    5.更有生命力的数据

    传统云服务数据和云服务功能完全绑定,如果云服务关停(在商业社会里这种情况司空见怪),用户也无法再访问云服务产生的数据了,即便有数据导出,离开了运行环境的数据也会变得难以使用。对本地优先软件来说,因为数据以及读取和修改数据所需的软件都存储在本地计算机上,数据的寿命会长得多。即便软件运营公司不再更新软件,操作系统升级换代,在必要得情况下,依然可以在虚拟机里安装原始软件来使用数据。

    更严苛的做法是,在一开始构建软件的时候,对用户产生的数据使用标准数据格式。

    6.天然具备安全和隐私

    不是所有的云服务商都有能力提供一流的安全团队来保障云端数据免受外部攻击,而且即便是道德标准很高如谷歌这样的公司也依然会以多种方式分析用户的数据。面对云服务,涉及数据安全和隐私问题时,用户唯一能做的就是完全信任云服务商。

    而对本地优先软件而言,本地客户端提供了完整的功能和数据,并不需要一个全知全能的云中心。本地优先的应用程序可以通过端到端数据加密方案来保障数据安全和隐私。在端到端加密方案里,做为数据中转的云全程只传输和保存加密后的数据,天然规避了云服务商的主动做恶并能有效阻挡来自第三方的网络攻击。

    7.用户拥有完全的所有权和控制权

    云服务的数据所有权不是用户的,当用户的行为被平台认定为违反平台规则、侵犯他人权益、触犯相关法律法规、甚至只是平台自己犯了严重的技术或者运营错误导致数据不可用时,就能明白这一点。而在本地优先的应用程序中,数据的所有权始终归用户所有。

    在数据控制权方面,云服务中用户访问和修改数据的方式受到服务提供商的 API 、产品功能和服务条款的限制。而本地优先软件的所有数据都存储在用户自己的设备上,因此用户可以自由地任意处理这些数据。

    您可以访问《 Local-first software 》,或者该文章的译文《本地优先软件》了解更多关于本地优先软件的理念。

    实践

    在我们最初打造 Pixcall 的时候,我们希望做出符合我们自己理想的产品,即有云的便利又不会丢掉我们看重的隐私权,然后刚好我们的产品和本地文件相关,自然得我们就选定了目前这样一个形态的产品---全功能的本地+加密的云。然后在过程中我们看到了《 Local-first software 》这篇文章,发现已经有人系统得整理了我们这类产品的特质。当然,作为深度实践者,我们也有一些额外的感受:

    • 相比瘦终端或者纯浏览器环境的云服务,开发本地优先软件工作量和难度都要大得多得多,而且所有数据都在本地的模式也会给功能开发带来诸多限制。在大型复杂项目里,本地优先和纯云端服务是可以也是有必要结合的,核心基础功能和核心基础数据可以本地优先的方式,一些相对独立的业务用纯云端的方式处理会是更好的选择。
    • 本地优先软件相比云服务有点像 web 3 和 web 2 ,云服务依然是主流选择,而本地优先软件则会在某些注重隐私和数据所有权的领域闪闪发光。是这个普遍没有隐私权的时代的一间密室,也是内容合规大环境里的一块自留地。端到端加密在一定程度上保护了隐私,但大部分情况下加解密方法依然掌握在开发者手里,除非加密方式由用户控制,但这会进一步增加软件的复杂性,不仅对开发者,而且对用户而言也是。
    • 即便是本地优先软件,开发者和用户之间的信任也很难建立,使用标准格式数据是一个好的开始,而开源会进一步建立这种信任。
    • 云时代的用户,很难完全明白本地优先的产品的主数据保存在本地意味着什么,很可能用户在无意识的情况下更改或者删除了本地数据存放的文件夹导致软件无法正常使用甚至数据丢失。

    各位 V2EXer ,怎么看 Local-first software 这个概念?

    4 条回复    2022-09-29 15:28:13 +08:00
    snoopyhai
        1
    snoopyhai  
       64 天前   ❤️ 2
    对于目前这个国域网政策来说,一切无法自建的云端服务,都无法被信任。
    所以我更倾向于那些可以自己部署后端服务的服务。
    Exdui
        2
    Exdui  
       64 天前
    在中国是私有化部署优先。
    charlie21
        3
    charlie21  
       64 天前
    老式桌面软件 + 数据上传下载功能
    agagega
        4
    agagega  
       64 天前 via iPhone
    作为用户当然是喜欢的。对开发者来说,本地优先会增加复杂度,因为读写数据从纯的发请求变成了同步,要处理的麻烦事会更多。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4030 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 10:09 · PVG 18:09 · LAX 02:09 · JFK 05:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.