在这篇文章中,我们将讨论以下话题:
- 9 大最流行的 API 测试类型
- Passkey 正在塑造无密码未来吗?
- 缓存系统如何出错?
- 大端 vs. 小端
- 我们如何将事件溯源纳入系统?
Passkey 工作原理
Google 最近宣布 Android 和 Chrome 支持 PassKey。
Passkey 由 Apple 和 Microsoft 支持,号称是比密码更安全的替代品。
下图显示了 Passkey 如何工作。
步骤 1 - 创建 Passkey
最终用户需要确认账户信息并提供凭据(面部 ID、指纹 ID 等)。
基于网站提供的公钥生成私钥。私钥存储在设备上。
步骤 2 - 在设备上使用 Passkey 登录
当用户尝试登录网站时,他们使用生成的私钥。只需选择账户信息并提供凭据来解锁私钥。
因此,没有密码泄露的风险,因为网站数据库中没有存储密码。
Passkey 基于行业标准,可在不同平台和浏览器之间工作 - 包括 Windows、macOS 和 iOS,以及 ChromeOS,具有统一的用户体验。
缓存系统出错的 4 种情况
下图显示了缓存可能出错的 4 种典型情况及其解决方案。
1. 雷群问题(Thunder Herd Problem)
当缓存中的大量键同时过期时会发生这种情况。然后查询请求直接击中数据库,使数据库过载。
有两种方法可以缓解这个问题:
- 一种是避免为键设置相同的过期时间,在配置中添加随机数
- 另一种是只允许核心业务数据击中数据库,防止非核心数据在缓存恢复之前访问数据库
2. 缓存穿透(Cache Penetration)
当键在缓存或数据库中都不存在时会发生这种情况。应用无法从数据库检索相关数据来更新缓存。这个问题给缓存和数据库都带来了很大压力。
为此,有两个建议:
- 一种是为不存在的键缓存空值,避免击中数据库
- 另一种是使用布隆过滤器首先检查键是否存在,如果键不存在,我们可以避免击中数据库
3. 缓存击穿(Cache Breakdown)
这与雷群问题类似。当热键过期时会发生这种情况。大量请求击中数据库。由于热键占查询的 80%,我们不为其设置过期时间。
4. 缓存崩溃(Cache Crash)
当缓存宕机且所有请求都转到数据库时会发生这种情况。有两种方法可以解决这个问题:
- 一种是设置断路器,当缓存宕机时,应用服务不能访问缓存或数据库
- 另一种是为缓存设置集群以提高缓存可用性
大端 vs. 小端
微处理器架构通常使用两种不同的方法在内存中存储单个字节。这种差异称为”字节序”或”端序”。
小端(Little Endian)
Intel x86 处理器存储两字节整数时,最低有效字节在前,然后是最高有效字节。这称为小端字节序。
大端(Big Endian)
在大端字节序中,最高有效字节存储在最低内存地址,最低有效字节存储在最高内存地址。较旧的 PowerPC 和 Motorola 68k 架构通常使用大端。在网络通信和文件存储中,我们也使用大端。
当数据在不同系统之间传输或由具有不同端序的系统处理时,字节序变得重要。正确处理字节序对于在不同系统之间一致地解释数据非常重要。
事件溯源应用案例
事件溯源改变了编程范式,从持久化状态到持久化事件。事件存储是真相来源。让我们看三个例子。
1. 纽约时报
该报纸网站自 1851 年以来将每篇文章、图像和署名存储在事件存储中。然后原始数据被去规范化为不同视图,并输入到不同的 ElasticSearch 节点用于网站搜索。
2. CDC(变更数据捕获)
CDC 连接器从表中拉取数据并将其转换为事件。这些事件被推送到 Kafka,其他接收器从 Kafka 消费事件。
3. 微服务连接器
我们也可以使用事件溯源范式在微服务之间传输事件。例如,购物车服务为从购物车添加或移除物品生成各种事件。Kafka 代理充当事件存储,包括欺诈服务、计费服务和电子邮件服务在内的其他服务从事件存储消费事件。由于事件是真相来源,每个服务都可以自行确定领域模型。
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP93: Is Passkey Shaping a Passwordless Future?。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。