英国《2023年在线安全法案》的一项拟议修正案旨在阻止16岁以下用户访问范围广泛的在线服务,远不止“社交媒体”。该修正案要求“受监管的用户到用户服务”——一个定义广泛的类别——实施“高度有效的年龄验证”措施,实际上禁止未成年用户使用。 这不仅会影响Signal等平台和家庭消息应用程序,还会影响共享列表、照片分享、带有聊天功能的在线游戏,甚至可能包括像维基百科这样的论坛。年龄验证的要求适用于*所有*用户,从而造成一种“请出示证件”的情况,个人可能需要验证身份才能访问常用的在线工具。 作者批评了该修正案的范围过大,源于现有《在线安全法案》中宽泛的定义。他们还质疑这项立法试图解决的明确问题,强调潜在的隐私影响以及年龄验证行业可能因此受益。
## Stepped:在Rails中编排复杂工作流
Stepped 是一个Rails引擎,用于构建和管理复杂的多步骤工作流,将其组织成动作树。每个动作都会被持久化,通过Active Job执行,并可以触发进一步的动作,确保步骤间的依赖关系得到满足。Stepped 最初是为诸如应用程序部署(DNS配置、健康检查等)之类的任务而开发的,它允许您直接在Rails模型上定义动作。
主要特性包括**并发通道**(限制同时执行具有相同key的动作)、**重用**(通过校验和跳过冗余工作)以及对**外部动作**的支持(由外部事件完成)。动作具有诸如`pending`(待处理)、`performing`(执行中)、`succeeded`(成功)和`failed`(失败)等状态。
定义动作很简单:在模型上使用`stepped_action`,并使用DSL定义步骤、钩子和key。步骤可以使用`step.do`或`step.on`来排队执行进一步的动作。Stepped 还提供诸如前/后置钩子、超时、异常处理和全面的测试工具,以确保可靠的工作流执行。
**安装:** `bundle install`,`bin/rails stepped:install`,`bin/rails db:migrate`。Stepped 与 Active Record 和 Active Job 无缝集成,为在Rails应用程序中管理复杂后台进程提供了一个强大的解决方案。
## 耐用执行:摘要
作者(前Porter CTO)最初不理解其价值,现在则大力推崇耐用执行,认为它是处理复杂、有状态工作流的强大解决方案。传统任务队列处理后台处理,通常依赖消息代理来实现持久性。然而,当任务变得复杂——涉及许多步骤、潜在故障和外部依赖关系时——简单的队列就显得不足。
耐用执行通过持久化工作流的*中间状态*来解决这个问题,允许在故障后(如机器崩溃)从检查点恢复,而不会丢失进度。这是通过追加日志实现的,确保确定性的重试和子任务的精确一次处理。
虽然耐用执行提供了显著的优势——抵御意外故障、程序化工作流定义以及跳过冗余工作——但它并非万能的解决方案。它需要确定性工作流(避免在执行过程中改变逻辑),并会引入开销。它最适合于管理复杂状态和保证完成至关重要的场景,可以补充而不是取代传统的队列系统。作者的公司Hatchet提供了一个基于这些原理构建的耐用执行平台。