产品设计原则总结

  1. 复杂度转移原则

    • 内核: 将一切可确定,可封装的流程和重复配置操作的复杂度转移到系统内部, 实现用户的认知负担和操作负担最小
    • 来源: tailscale 登录即组网,无需手动配置路由表,端口等,ACL规则由官方服务器进行同步,每个节点自动修改规则实施,无需手动修改。所有的配置复杂度都被系统内部消化
    • 复用: 面向非专业用户的产品,通过系统的流程封装实现少配置甚至零配置效果
  2. 去中心化与责任再分配

    • 内核: 不设置单一权威中心节点承担多项关键职能, 而是将权利和责任对等地分配到各个节点,中心节点仅作轻量协调
    • 来源: tailscale 基于wireguard协议所有节点权利对等,没有中心节点,只使用一个协调节点做公钥和规则的同步,抗单点故障能力极强
    • 复用: 技术和架构上允许,对稳定性要求极高,要求高效率和灵活性的系统
  3. 最小暴露面+零知识原则

    • 内核: 系统运营者只收集完成任务所必须的最少信息, 从架构上降低隐私泄露的风险
    • 来源: tailscale 官方的协调服务器只交换公钥,同步ACL规则和流量转发,用户的信息全程加密,协调服务器不可见
    • 复用: 用户上传信息涉及隐私内容,对保密,隐私要求高
  4. 易用性优先于绝对控制

    • 内核: 在多数场景下,易于使用的产品和容易理解的规则比复杂但绝对控制的产品拥有更低的失误率更低的学习成本,更低的迁移成本. 高级控制可以作为高级可选项而不是默认项
    • 来源: tailscale 提供了简单直观的控制台界面,规则和节点状态可以通过界面直观地进行修改,极大地降低了失误率和学习成本
    • 复用: 需要快速使用和上手且用户从零学习操作较为困难的产品
  5. 柔性降低机制

    • 内核: 在极端情况下通过性能上或者其他方面的降级来保证系统始终可用,服务稳定运行
    • 来源: tailscale 默认使用 P2P 直连,在 双对称NAT等极端情况下打洞失败时,使用 DERP 进行流量中继转发
    • 复用: 对系统稳定性有较高要求的产品
  6. 兼容翻译层

    • 内核: 根据用户提供的高级的,接近自然语言的要求,系统做出具体的操作翻译,降低用户的学习和理解成本
    • 来源: tailscale 的 ACL 规则只需要通过下拉框的目标选择就可以进行流量规则的制定,由系统进行自动同步和配置
    • 复用: 面向普通用户的产品, 和对效率要求高,且操作多数可穷举和重复的场景