本周系统设计复习:
- 6 个将代码转换为精美图表的工具
- 悲观 vs. 乐观锁
- 用简单术语解释 JSON Web Token(JWT)
- HTTP/1 -> HTTP/2 -> HTTP/3
6 个图表工具
- Diagrams
- Go Diagrams
- Mermaid
- PlantUML
- ASCII 图表
- 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。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。