大数据时代,海量数据分析就像吃饭一样,成为了我们每天的工作.为了更好的为公司提供运营决策,各种抖机灵甚至异想天开的想法都会紧跟着接踵而来!业务多变,决定了必须每天修改系统,重新跑数据,这就要求极高的海量数据读取和存储速度!
公司每天增加几亿行的业务日志数据,我们需要从中分析出各种维度的业务画像.经过很长时间的摸索,选择了 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# 大数据
来源: https://www.cnblogs.com/nnhy/p/Redis220.html