Illegal vs Unwanted States17 hours agohttps://buttondown.com/hillelwayne/archive/illegal-vs-unwanted-states/非法状态永远不可接受,而不期望状态虽不受欢迎但可暂时存在。不期望状态(如日程冲突或超额预订航班)可能不会导致非法状态,但仍需解决。系统必须表示不期望状态,如外部输入或有意设计(例如航空公司允许超售)。不期望状态可能是工作流所必需的(如重复预订),应提醒用户加以管理。形式上,非法状态违反不变量(始终为假),而不期望状态涉及安全性和活性属性,例如最终必须恢复的网络分区。
Entropic Thoughts17 hours agohttps://entropicthoughts.com/lean-not-backpressure文章认为卢卡斯·科斯塔使用的“背压”比喻不准确;这应该关乎质量信号,而不仅仅是放慢速度。精益制造理念被提出作为更好的类比,强调尊重工人和对不完美的容忍。强调了三种精益实践:单件流、自働化(jidoka)和防错法(poka-yoke),以确保质量。系统应设计为归咎于流程,而非机器人或人类,因为坏系统会打败好人。
We'll Take the Benefits, Hold the Rules13 days agohttps://docs.eventsourcingdb.io/blog/2026/07/16/well-take-the-benefits-hold-the-...事件溯源的核心不变性原则是其优势的基础:可审计性、确定性重放和时间旅行能力。为了遵守GDPR的删除权而覆盖事件会损害审计跟踪、缓存、快照和调试功能。像存储引用或加密粉碎这样的替代方案可以在允许数据删除的同时保持不变性,而不损害其优势。适应Scrum或事件溯源等方法论需要理解权衡;放弃规则往往会丧失相关优势。团队应在做出例外前评估他们重视哪些优势,因为突变可能会无声地破坏关键保证。
Job queues are deceptively tricky14 days agohttps://typesanitizer.com/blog/job-queues.html任务队列(用于调度和运行批处理作业)看似简单,但涉及复杂的细节。系统设计的三个视角:对队列的警惕性、明确的限制以及故障模型。一个实际例子涉及打包参考仓库,采用两种方法:整体打包(7小时)和增量打包(2小时)。提出的调度方案是在周末运行整体打包,在工作日运行增量打包,以平衡大小和更新及时性。重叠作业的任务队列语义包括并行产生、优先新任务、等待和优先旧任务。对于周末工作负载,在3小时间隔和7小时作业时长下,优先旧任务语义效果最佳,可避免浪费。如果没有优先旧任务语义,则需要替代解决方案,如类似cron的调度或独立作业。管理不善的队列可能导致问题,如无限制增长,需要手动修复和临时解决方案。在设计时考虑队列、限制和故障模型,可以实现更健壮和优雅的降级。理解系统的假设有助于用户评估其是否适合他们的工作负载,并避免潜在问题。
Best Simple System for Now25 days agohttps://dannorth.net/blog/best-simple-system-for-now/文章探讨了软件开发中‘完美主义’(构建全面、可持续的系统)与‘实用主义’(快速、临时的解决方案)之间的二元对立,但提出了一条名为‘当前最佳简单系统’(BSSN)的中间路径。BSSN被定义为满足当前需求的最简单系统,编写符合适当标准,没有多余代码且具有恰好所需的健壮性。它强调‘为当下’设计,而非预测未来。BSSN的关键要素包括:‘为当下’(避免未来推测)、‘简单’(为当前需求最小化复杂性)和‘最佳’(编写高质量、意图清晰的代码,不偷工减料)。文章反驳了对BSSN的常见反对意见,比如认为它对原型来说过度、不完整或效率低下,并强调了其益处,如早期交付、降低风险以及通过迭代开发实现适应性。采用BSSN需要良好的习惯(例如避免过度工程)、勇于尝试新方法的勇气以及接受不确定性的谦逊。它鼓励从小处着手,关注反馈,并随着需求变化演进系统。示例展示了BSSN的实践:为九种实体类型定制的JSON编组解决方案和XStream XML库,两者都展示了简单性和专注的功能性。结论强调,BSSN兼顾质量与速度,使团队能够编写可替换、令人愉悦的代码(遵循如CUPID等原则),适应变化的需求而无需不必要的复杂性。