在Wiz,一切都与规模有关。Wiz平台每天摄取数百亿种云资源的元数据和遥测数据。Wiz的无代理扫描程序收集了大量数据,Wiz需要非常高效地处理这些数据。随着公司的发展,Wiz在如何有效维护和扩大规模方面面临重大挑战。亚马逊云科技使用Amazon ElastiCache和解决方案,提高了Wiz的业务效率,并且增加了Wiz为客户创造的价值。
Wiz成立于2020年,亚马逊云科技着手帮助安全团队降低其云风险。在短时间内取得了长足的进步,打破了融资、估值和ARR记录,成为了有史以来发展最快的软件即服务(SaaS)公司,并达到了1亿美元的ARR里程碑。
Wiz平台向客户展示了其云环境状态的最新视图。这意味着,Wiz平台上将尽快反映每项更改,无论是创建新的云资源、更改现有云资源还是删除现有云资源。
挑战
当Wiz考虑同时运行的并发客户、云提供商、账户、订阅、工作负载和数千个并发扫描的数量时,就会出现挑战。
Wiz平台每天摄取数百亿次云资源更新。以前,Wiz会在每次扫描后更新每项云资源的记录,即使该资源自上次扫描以来未发生变化。Wiz之所以这样做,是因为需要通过更新资源记录中的上次查看和运行ID值,来记住需要在步骤5中从数据库中删除哪些资源。这给Wiz数据库额外带来了大量负载,
这就需要考虑通过一种更有效的方法来计算每次扫描后需要删除哪些云资源,并减少对数据库的写入次数。
目标
在过去的几个月里,实施了一项变更来优化摄取管道。主要目标是通过避免在云资源保持不变时进行更新,从而显著减少数据库写入次数。这有助于实现以下目标:
-
消除来自数据库的压力,这将提高查询性能并减少查询延迟
-
减少PostgreSQL事务ID的使用量,并减小autovacuum频率以避免事务ID回卷
-
减少CPU、读取、写入、吞吐量和IO的使用量
-
适当调整数据库实例类型的大小以优化成本
Amazon ElastiCache前来相助
Amazon ElastiCache for Redis是一项完全托管的亚马逊云科技服务。它是一种高度可扩展、安全的内存中缓存服务,可支持需要亚毫秒级响应时间的最苛刻的应用程序。它还提供了内置的安全性、备份与恢复以及跨区域复制功能。
Wiz决定利用Redis的内置功能和对数据结构的原生服务器端支持,来存储和计算每次扫描程序运行后需要删除的云资源。可以通过使用Set数据模型来实现此目标,该模型是唯一字符串的无序集合,可以在其中添加或删除数据,也可以将它与其他集合进行比较。
当扫描程序观察一个云资源时,都会将其唯一标识符添加(使用SADD命令)到当前扫描运行集合中,以便每次扫描运行都会填充自己的集合密钥,该密钥最终将包含当前扫描运行期间观察到的所有云资源ID。
当扫描程序完成并且该计算应删除哪些云资源时,(使用SDIFF命令)与上一个扫描运行集合进行比较。此比较的输出是一组需要从数据库中删除的云资源ID。通过使用ElastiCache对Set数据类型的原生支持,可以将整个比较过程从数据库转至ElastiCache引擎。
结果
在将整个更改部署到生产环境后,可以立即发现数据库有所改进。CPU和内存使用量显著降低,这使Wiz能够适当调整数据库实例的大小。
现在,90%的云资源将被跳过,而根本不会写入到数据库中!
另外,在做出更改后,IO和成本也相应地降低了,如以下Amazon Cost Explorer成本管理服务图表中所示。
总结
通过在亚马逊云科技Amazon Aurora PostgreSQL兼容版数据库前添加ElastiCache,Wiz提高了整体应用程序性能,减小了数据库上的压力,能够适当调整数据库实例的大小,节省了TCO,同时扩大了规模并处理了更多客户负载。
在将最终结果存储在Amazon Aurora PostgreSQL兼容版本数据库之前,Wiz使用ElastiCache消除了大批数据库更新。在此过程中,Wiz利用了每个数据库引擎的长处。Redis是用于存储高速数据的绝佳工具,而PostgreSQL更适合长期存储和分析。
ElastiCache是Wiz的摄取管道中的关键组件。它使Wiz能够显著扩展,从而能够处理更多的扫描和云资源摄取。通过这样做,Wiz设法提高了数据库性能,减少了实例类型,并将总成本降低了30%(包括ElastiCache成本)。此外,Wiz使用ElastiCache预留节点进一步降低了成本。