背景

在现代软件工程中,我们构建的系统规模越来越庞大,架构也从简单的单体演变为复杂的分布式系统。然而许多系统并没有因为架构升级而变得更加健壮,反而陷入了维护成本变高、故障定位困难、代码质量恶化的泥潭。

要真正打造具有高健壮性与可扩展性的系统,我们需要仔细审视那些让系统变得不稳定或性能下降的根因,而不是急于用防御代码或更细的服务拆分临时性地解决(掩盖)问题,只有找到病因才能对症下药。以下几点是笔者工作中的一些总结和思考,力求抛砖引玉。

锁是原罪

并发编程的核心难题在于共享状态的管理。为了解决多线程或多进程在并发场景下的资源竞争,绝大多数开发者第一反应就是加锁,但笔者的观点恰恰是:锁,是复杂度的原罪。

以 Java 为例,在语言层面和 SDK 层面均提供了极其庞杂的锁机制:synchronizedReentrantLockReentrantReadWriteLockStampedLock 等等不同的锁实现,每种锁不仅用法迥异同时即便是同一种锁还可进一步区分公平和非公平模式、可重入性、乐观、悲观策略等概念。