事件驱动型服务的并发常常是一种有保障的反面的彩票中奖,虽然对于特定的并发问题可能概率很低。然而,一切都归结于尝试次数,由于服务所处理的事件量非常大,所以一个不大可能的事件几乎变成了一定会发生的事情。例如,我们曾经遇到一个问题,其发生的概率大约为百万分之一。该服务每秒处理约一百条信息,这意味着该问题每小时会发生三次左右。根据设计,事件驱动型服务需要应对巨大的规模和吞吐量,使得并发问题特别容易发生。

并发问题,或称竞态条件,是指当某行代码并行运行时所产生的意想不到的行为,如果代码单线程运行,就不会出现这种情况。对程序员来说,处理并发问题往往不是自然而然的事情,我们习惯于以单线程的方式来考虑我们的代码。检测并确保代码并行运行的安全,往往需要一个有丰富经验、接受过专门训练的人。而且,并发问题并不明显,往往只在生产环境中才会暴露出来,因为本地或开发环境与实际环境的吞吐量有很大的差别。