大数据时代,海量数据分析就像吃饭一样,成为了咱们每天的工作。为了更好的为公司提供经营决策,各种抖伶俐甚至胡思乱想的想法都会紧跟着接踵而来!业务多变,决定了必须每天批改零碎,从新跑数据,这就要求极高的海量数据读取和存储速度!
公司每天减少几亿行的业务日志数据,咱们须要从中剖析出各种维度的业务画像。通过很长时间的摸索,抉择了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#大数据