我正在开发一款用于监控网络流量的软件,我需要一款能够快速存储和查询数据包头字段的数据库服务器。我知道有一种 .pcap 文件格式,但它不适合我,因为我每天要存储大约 10 TB 的流量。是否存在某种专门用于网络流量的数据库服务器?
答案1
就这个数量而言,你问的问题不对。你应该问的问题是:我需要用我获取的信息来回答什么问题?
从这里你可以回答存储引擎的问题。你真的需要每个字节吗?你是否需要结构化来回答临时问题,或者回答一些非常结构化的特定问题?
您可以将其分片到多台机器上吗,还是仅限于单个系统?
您是否需要同时读取和写入(这将使您的 IOPS 增加一倍以上)还是将它们分开进行?您是否需要实时索引,或者您可以单独构建它们?您是否需要索引?在什么地方?
您在这里谈论的是超过 100MB/s 的数据存储,但这是否反映了负载?您有突发流还是稳定状态?接收和存储之间是否有延迟是否重要?您是否必须按顺序提交,或者您是否可以让查询端无序地查看数据?
无论如何,为了尽可能好地回答这个具体问题,请查看市面上的各种 NetFlow 存储和分析工具。这些工具最有可能让你得到这个问题的一般答案。
答案2
考虑到您所谈论的捕获数据量,数据来源几乎完全无关紧要。
首先,您需要考虑如何通过网络将 100MB/s 的数据流传输到收集点(或者更好的是,点,因为可能需要分布式系统来处理负载)。
然后,您需要考虑如何构建数据库来处理如此多的传入记录。如何将负载分散到多个磁盘上?如果多台服务器试图同时提交数据,如何避免争用?您需要多少冗余才能解决写入磁盘时发生故障的问题,以及如何确保您的系统能够从此类故障中恢复而不会丢失任何传入的数据?
然后,您需要考虑如何查询数据。在忙于尝试将 100MB/s 的数据附加到其表的同一数据库上运行查询可能会引起争用问题。您第二天要进行批处理吗?如果您需要实时分析,您将如何处理它引起的额外负载而不中断仍在进行的写入?
你不需要“专门用于网络流量的数据库服务器”,你需要一个专门的高写入量数据库系统。一旦你解决了这些挑战,找出存储所需数据所需的确切模式几乎就是事后的想法