系统设计
典型业务功能、系统集成、可观测性,以及工程里用得上的算法。
从哪里开始
先读可观测性与系统分级,它们决定了上线后能不能看清系统、该为哪些系统投入;再按需读功能设计与算法套路。依赖任务的执行接在算法套路的拓扑排序之后读;排序与 Top K、均摊代价两篇讲算法落到 Java 集合上的实际代价。
文章
01从「能跑」到「可观测」三种信号的分工、高基数陷阱、采样策略与 SLO 告警→02追踪上下文在哪一跳丢失线程池、CompletableFuture、虚拟线程换线程就丢、包装执行器接上、traceparent 注入、采样标志与未结束的 span→03系统分级与技术投入按「坏了会怎样」定级,每一级对应可检查的工程清单,依赖会传递等级→04典型业务功能设计购物车、点赞与排行榜同分问题、附近的人、抢红包二倍均值法实测→05短链服务:短码怎么生成只是开头哈希截断的碰撞、同一个长链接的并发创建、301 与 302 的取舍、目标地址校验→06先拿快照再收增量,中间那几条去哪了取快照与订阅的先后、按序号丢弃重叠、重复丢失乱序的统一处理、裁剪过的副本为什么会错、重启后从哪里继续→07未读数显示 3,点进去一条新消息也没有计数器在通知重复、清零与新消息交错时出错且无法校正;已读位置要防回退;自增 ID 小的事务后提交,已读位置会越过它→08接口返回了 202,这件事算办完了吗受理之后任务失败、提交超时后重复登记、重启后永远停在 RUNNING、迟到的上报把成功改回执行中;幂等键、终态集合、租约与执行序号→09位图、布隆过滤器与前缀树海量判存与文本过滤:内存差 219 倍、误判率实测、前缀树快 160 倍→10跨分片分页offset 让每个分片交出 offset+limit 行;单列游标遇到同值时遗漏或打转;复合游标与全局唯一的决胜键→11校验和对上了,数据就没坏吗穷举奇偶位、求和校验、CRC 各自漏掉的错误;Hamming 码遇到两位错会把数据改错、SECDED 遇到三位错同样;CRC 不防篡改→12认证与系统集成登录失败保护、单点登录的方案选择、跨公司对接的签名与防重放→13授权码、PKCE 与 state 各自防什么授权码一次性且重放作废整次授权、回调精确匹配、默认要求所有客户端用 PKCE、state 由客户端校验、刷新令牌轮换没有重放检测→14访问令牌验签通过之后,还要校验什么默认解码器不查受众与签发者、ID Token 能通过、只认 typ=JWT、没有 exp 也接受、scope 子串匹配、撤销窗口→15工程里用得上的十个算法套路滑动窗口、前缀和、二分答案、堆、并查集等,每个配一个真实业务需求→16只要前 100 名,为什么要把一百万条全排一遍减法比较器溢出、同分规则、堆与快速选择的取舍、分片 Top K 为什么会漏→17平均 86 纳秒的 put,为什么有一次要 21 毫秒均摊 O(1) 的扩容尖峰、new HashMap<>(n) 与 newHashMap 的区别、小 N 时扫描与哈希的交叉点→18文件映射、磁盘冗余和历史恢复是三件事无特权 ext4 镜像里的 extent;RAID 容量与故障分布;HDFS 元数据与数据路径,冗余和备份的责任→19依赖任务怎样安全地跑起来发布前报出真实的环、稳定顺序、并发上限下的调度、失败传播的两种策略与重试幂等键→20执行器加了一倍,测试还是一样慢能力匹配与队头阻塞,扩容要加在瓶颈能力上,执行器够了以后瓶颈搬到调度器,崩溃的执行器与租约→
相关专题
- Domain Driven Kit · Tracer — 把 traceId 返回给调用方