2024年11月14日,Cloudflare发生了一个事件,影响了大多数使用Cloudflare日志的客户。在大约3.5小时的服务中断期间,约55%的日志未能发送给客户并因此丢失。
在大规模系统中,故障是不可避免的,至关重要的是,子系统需要保护自己免受其他部分故障的影响,以防止连锁反应。在本案例中,系统某个部分的配置错误导致另一个部分的过载,而该部分本身也存在配置错误。如果该部分得到了正确配置,可能就能防止日志丢失。
背景
Cloudflare的网络是一个全球分布的系统,支持和提供各种服务。该系统的每个部分都会生成事件日志,记录有关全球各地系统运行的详细元数据。例如,Cloudflare的CDN每接到一个请求就会生成一个事件日志。Cloudflare Logs将这些事件日志提供给客户,客户可以用于合规性、可观察性和账务等多种场景。
在一个典型的工作日,Cloudflare向客户发送大约4.5万亿个事件日志。虽然这些日志只占总处理日志量50万亿中的不到10%,但在构建一个可靠和容错的系统时,仍然面临着独特的规模挑战。
系统架构
Cloudflare的网络由成千上万台单独的服务器、网络硬件组件和专门的软件程序组成,分布在全球330多个城市。虽然Cloudflare的Edge Log Delivery产品会直接从每个服务器向客户发送事件日志,但大多数客户选择不这么做,因为这种方式在接收端会产生显著的复杂性和成本。
打个比方,想象邮政服务每封信件都按一次铃,而不是为每一包信件按一次铃。每秒钟可能有成千上万封信件,这样一来,所涉及的单独事务数量会变得不可承受。
幸运的是,我们还提供了Logpush,它能够以更可预测的文件大小收集和推送日志,并且随着使用量的增加自动扩展。为了提供这一功能,多个服务需要协同工作来收集和推送日志,正如下面的示意图所示:

订阅专栏 解锁全文
970

被折叠的 条评论
为什么被折叠?



