后端架构

服务间认证三种走法:JWT 透传、网关统一鉴权、mTLS 的性能损耗与安全边界实测对比

三种服务间认证方案实测对比:JWT透传性能最优但token泄露风险大;网关统一鉴权性能略优,但网关成为单点瓶颈;mTLS安全最强但性能损耗近半。测试基于Go服务和Envoy/Istio,覆盖QPS、延迟、CPU等指标。选型需权衡性能与安全:低QPS可任选,高QPS需按业务场景取舍,金融等高合规场景建议mTLS,中等规模推荐网关方案。

后端架构

先拆查询还是先拆交易:我们两次微服务化的真实账单

从两次微服务拆分实践出发,对比先拆查询与先拆交易两种路径的决策逻辑、实施代价与适用场景。核心结论是:选择取决于业务约束——旧系统稳定但查询慢时先拆查询,用数据冗余换低风险;旧系统本身成瓶颈时先拆交易,用高复杂度换架构根治。同时强调团队能力与业务容错空间是隐性关键变量。

后端架构

那次缓存雪崩,我们在过期时间上加了一层随机抖动才稳住

缓存雪崩源于大量key同时过期导致请求穿透至数据库。解决方案包括:用key哈希值生成固定随机抖动,将过期时间分散到宽窗口;对热点key采用本地缓存、Redis和数据库三级架构,并提前异步刷新避免集中失效。该策略适用于高QPS、数据库脆弱的场景,需权衡一致性与复杂度。

后端架构

压到极限才见真章:Kafka、RocketMQ、Pulsar 在不同分区下堆积到接近崩盘时,延迟到底差多少

在极端分区(最高5000)和高堆积(TB级)条件下,对Kafka、RocketMQ和Pulsar进行物理集群压测。结果显示,Kafka延迟恶化最可控,呈渐进式增长;RocketMQ在2000分区时出现性能断崖,延迟飙升至秒级;Pulsar在分区超500后几乎不可用,架构开销导致指数级恶化。性能断崖根因各异,选型需匹配业务瓶颈。

后端架构

我们团队用版本号管接口兼容性踩过的坑,以及为什么最后选了消费者驱动契约测试

版本号管理接口兼容性在微服务规模扩大后迅速失控,线上多版本并存导致事故频发。核心问题是服务端单方面声明兼容,却不知消费方实际使用情况。团队转向消费者驱动契约测试,由消费方定义需求、服务端验证,并通过CI流水线和Can I Deploy检查实现自动化兼容管理,最终将接口事故降为零,废弃字段得以安全清理。

后端架构

那次我们拉了十几个业务方关在会议室两天,用事件风暴把微服务边界理清楚了

一场为期两天的事件风暴工作坊,帮助团队解决了微服务拆分的边界难题。核心在于强制统一业务语言,通过梳理领域事件、命令和聚合,从业务事件流中自然推导出服务边界。文章详细记录了建立共识、处理异常流程、将成果转化为代码结构的过程,并分享了落地时的事件版本管理、顺序问题及监控等实战经验。

后端架构

布隆过滤器防缓存穿透,位数组大小和哈希函数个数不是你拍脑袋定的

布隆过滤器的核心在于位数组大小和哈希函数个数的计算。从误判率公式出发,可根据预期数据量和可接受误判率反推位数组大小,再计算最优哈希函数数量。Guava和RedisBloom等工具可自动完成参数计算,自实现时需注意哈希函数选择与双哈希技巧。线上需预留余量并定期重建,以防数据增长导致误判率飙升。

后端架构

RocketMQ 事务消息和 RabbitMQ 确认机制,在拆微服务后保证数据一致性上,各自适合什么场景?

RocketMQ 事务消息通过两阶段提交实现消息发送与本地事务的原子性,适合“先发消息后落库”的强一致性场景;RabbitMQ 确认机制配合本地事件表,以“先落库后发消息”实现最终一致性,适合允许秒级延迟的业务。选型取决于业务对实时性和运维复杂度的权衡,且需注意回查逻辑与 Outbox 扫描的实现细节。

后端架构

我们当年拆微服务,在数据库上踩的最深的一个坑,是从一张订单表开始的

一次深夜数据库故障揭示了微服务拆分中数据库迁移的致命陷阱:过早拆表导致跨库查询崩溃、数据迁移脚本忽略实时变更引发停机、分布式事务在流量高峰时陷入恶性循环。核心教训是:拆分时机优先于方式,应遵循“先服务后数据库”和“先读后写”的迁移策略,用本地事务处理强关联业务,异步消息仅用于真正跨域操作,并通过静态检查杜绝跨库查询。