最近朋友那里遇到的一个架构问题,但是我目前正在有一个项目进行中,时间紧迫,所以实在不能分身去做。但是问题本身很有意义,所以就把完整问题发出来,或许会给 V2EX 的同学带来一些灵感。
一台服务器上用 nfcapd 每 5 分钟记录下一个文件,netflow 格式。netflow 是一种流量日志,里面的每条记录是类似这样的:
Date flow start Duration Proto Src IP Addr:Port Dst IP Addr:Port Packets Bytes Flows
2005-08-30 06:59:52.338 0.001 UDP 36.249.80.226:3040 -> 92.98.219.116:1434 1 404 1
关于 nfdump 的更多资料:
http://nfdump.sourceforge.net/每 5 分钟生成的 nfdump 文件中,差不多有 15 - 25 万条这样的记录。也就是说,一天的数据量会超过 5000 万条。
现在需要这样的一个系统:
- 索引大概一到两个月的数据量(每天都会有新数据写入)
- 输入起始 IP 地址,结束 IP 地址(能够支持子网掩码更好),并选择一段时间(比如一天、一周),然后计算出在这段时间内的流量,并生成流量图表
- 也可以只输入起始或结束 IP 地址,选择时间段后,生成这个 IP 上的所有流入或是流出的流量
我自己做了一些试验,假如用把这些数据导入 MySQL 的方式来实现的话(列类型全部是 unsigned int),每 5 分钟的数据差不多会占用 8M 左右的空间,并占用大概 3M 左右的索引空间。这样的话,一天的数据量差不多就是 2.5G,索引差不多就是 800M 左右。
这是一个很有意思的问题。
如果你来实现这个系统,你会怎么做呢?包括后端的语言和数据库选择,及前端和绘图组件的选择?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/47984
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.