大数据时代,海量数据分析就像吃饭一样,成为了咱们每天的工作。为了更好的为公司提供经营决策,各种抖伶俐甚至胡思乱想的想法都会紧跟着接踵而来!业务多变,决定了必须每天批改零碎,从新跑数据,这就要求极高的海量数据读取和存储速度!
公司每天减少几亿行的业务日志数据,咱们须要从中剖析出各种维度的业务画像。通过很长时间的摸索,抉择了 Redis 作为读写数据的缓存。
1,开发平台,C#Net,写 Windows 服务抓取原始日志数据,合并精简压缩后,写入 Redis 集群。
2,各业务零碎从工夫维度上遍历 Redis 缓存数据,逐行剖析解决,两头后果和最终后果写入 Redis。
3,另一套 Windows 服务抓取 Redis 里的后果数据,保留回数据库。这里有点像 MQ 的工作形式。
实际上,第一步只有一套零碎,这是数据根底。第二第三个别每个子系统都有一对。甚至 A 零碎的后果间接拜访 B 零碎放在 Redis 中的后果数据。
整体上看起来耦合度有点高,然而这一套架构失去了极高的速度,单个子系统实例每秒钟可解决 1 万到 10 万个订单!并且是很多套子零碎同时工作,繁多子系统因业务起因不会吃齐全部 Redis 性能。独自对某一台 Redis 服务器做压力测试,最高失去了 222 万 ops 的速度,测试的是比较简单的业务,统计满足某种业务规定的订单总数。
为何须要这么高速度??
业务规定一旦扭转,批改程序后,往往须要从新跑最近一周什么一个月的历史数据。如果每天改几次呢?如果赶上双十一淡季,太慢的速度恐怕连实时数据都赶不上。
Redis 怎么做到 220 万 ops
1,Redis 是单线程模型,因而 32 外围服务器装置 32 个实例
2,数据分片,key 散列后均分到几十个实例上
3,敞开长久化,运维和 Linux 保障可靠性
4,管制好数据包大小,高性能网络通信最忌收发大量小包,管制在 1400 字节左近最佳,最差也要 pipeline
5,其它在网上能轻易找到的细小技巧
为什么不必数据库??
通过大量验证,同样 32 外围服务器,数据库 3 巨头个别失去 20000qps 的查问速度和靠近 10000tps 的写入速度。这是依照单表几百万数据有两个索引的状况测试。如果数据达到几千万上亿,再多两个索引,读写同时进行,那么速度只剩下四分之一不到。真真一个惨字!
大数据分析,有很多是长期数据,须要合并、叠加、去重等等,它们的生命周期不长,个别 24 小时或 48 小时,也有不少是两三个小时,要害是数据量还特地大,每天几千万很常见。这类数据,写数据库是很不适合的。
而应用 Redis,一台 32U512G 机器,能够装下一个月几十亿通过压缩解决的历史数据,资源占用在 50% 高低。
我是大石头,打 1999 年起,18 年轻码农。目前在物流行业从事数据分析架构工作。欢送大家一起 C# 大数据