本周系统设计复习:

  • 6 个将代码转换为精美图表的工具
  • 悲观 vs. 乐观锁
  • 用简单术语解释 JSON Web Token(JWT)
  • HTTP/1 -> HTTP/2 -> HTTP/3

6 个图表工具

  1. Diagrams
  2. Go Diagrams
  3. Mermaid
  4. PlantUML
  5. ASCII 图表
  6. Markmap

悲观 vs. 乐观锁

锁对于在多用户环境中维护数据一致性和完整性至关重要。它们防止可能导致数据不一致的同时修改。

悲观锁

悲观锁假设冲突会发生,并在任何更改之前锁定数据。它防止其他用户访问和更新数据,直到锁释放。

乐观锁

乐观锁假设冲突是罕见的。它允许多个用户同时访问数据,并在更改提交时检查冲突。如果检测到冲突,操作回滚。

一些最佳实践考虑

  • 尽可能短的时间持有锁以减少竞争
  • 在最细粒度级别应用锁,如行而不是表
  • 为因冲突失败的事务实现重试逻辑
  • 悲观锁更适合数据完整性,但可能影响性能
  • 乐观锁更适合效率和性能

JSON Web Token(JWT)

想象你有一个称为 JWT 的特殊盒子。在这个盒子里,有三个部分:头部、负载和签名。

头部

头部就像盒子外面的标签。它告诉我们它是什么类型的盒子以及它如何保护。它通常用称为 JSON 的格式编写,这只是使用大括号{}和冒号:组织信息的一种方式。

负载

负载就像你想要发送的实际消息或信息。它可以是你的名字、年龄或任何其他你想要分享的数据。它也用 JSON 格式编写,所以它易于理解和使用。

签名

签名是使 JWT 安全的东西。它就像只有发送者知道如何创建的特殊密封。签名使用秘密代码创建,有点像密码。这个签名确保没有人可以在发送者不知情的情况下篡改 JWT 的内容。

当你想要将 JWT 发送到服务器时,你将头部、负载和签名放在盒子里。然后你将其发送到服务器。服务器可以轻松读取头部和负载以了解你是谁以及你想要做什么。

HTTP 演进

HTTP 1 始于 1996 年,紧接着第二年 HTTP 1.1。2015 年,HTTP 2 出现,2019 年我们得到了 HTTP 3。

随着每次迭代,协议以新的有趣方式演进。

HTTP 1(及其子版本)

引入了持久连接、管道和头部概念等功能。协议构建在 TCP 之上,提供通过万维网的可靠通信方式。尽管超过 25 年,它仍然使用。

HTTP 2

带来新功能,如多路复用、流优先级、服务器推送和 HPACK 压缩。然而,它仍然使用 TCP 作为底层协议。

HTTP 3

使用 Google 的 QUIC,它构建在 UDP 之上。换句话说,HTTP 3 已远离 TCP。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP140: Top 6 Tools to Turn Code into Beautiful Diagrams

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。