苏宁实时会员行为服务系统的实践

背景

随着苏宁易购会员数据不断增长,数据量越来越大,并且会持续快速增长。有越来越多的使用需求,对系统的实时性,稳定性也提出了更高的要求。为了满足今年双11预计订单量3000w+需求对系统的实时性/可用性/性能/扩展性方面都有很高的要求。实时用户行为服务作为基础服务,该系统服务主要提供新人接口判断为促销平台和各业务系统提供实时服务,比如用户画像,浏览历史,实时订单信息是否是新人、通过各种标签筛选人群进行精确营销。

系统架构

在此背景下,设计了如下系统架构

框架简介:主要分为离线数据和实时数据,离线数据通过IDE数据交换平台写kafka或直接写hbase, mdsdata来进行数据处理(数据清洗)写到kafka, mdspt和mdsgroup共同消费相同的数据流。实时流也是通过mdsdata进行数据清洗下发到下游通过kafka,mdsp和mdsgroup消费。mdsadmin系统主要是做后台常用配置使用。mdspt提供个人画像服务rsf接口,mdsgroup提供客群列表服务输出到ftp上。

数据有两种流向,分别是处理流和输出流。

在处理流,行为日志会从客户端上传到服务端的。将消息发送到分布式队列kafka。数据处理模块由流计算框架完成,从分布式队列读出数据,处理之后把数据写入数据层,由分布式缓存和数据库集群组成。

输出流,通过rsf接口提供个调用方,另一种客群输出,将人群发送到ftp服务器或分布式消息队列kafka中。

系统特性

实时性

作为一个实时会员行为服务系统,首先要求的是系统的实时性,实时就会面对各种异常问题,常见的几种情况如:大促期间流量倍增如何处理,系统异常实时数据丢失如何补偿、数据积压如何快速处理等其他问题。

由此设计考虑到以上情况,使用storm来处理实时数据,storm可以实时处理消息和更新DB,对一个数据量进行持续的查询并返回客户端(持续计算),对一个耗资源的查询作实时并行化的处理(分布式方法调用,即DRPC),storm的这些基础API可以满足大量的场景。

可伸缩性高: Storm的可伸缩性可以让storm每秒可以处理的消息量达到很高。

扩展一个实时计算任务,你所需要做的就是加机器并且提高这个计算任务的并行度 。Storm使用ZooKeeper来协调集群内的各种配置使得Storm的集群可以很容易的扩展。

1.保证无数据丢失: 实时系统必须保证所有的数据被成功的处理。 那些会丢失数据的系统的适用场景非常窄, 而storm保证每一条消息都会被处理, 这一点和S4相比有巨大的反差。

2.异常健壮: storm集群非常容易管理,轮流重启节点不影响应用。

3. 容错性好:在消息处理过程中出现异常, storm会进行重试

4. 语言无关性: Storm的topology和消息处理组件(Bolt)可以用任何语言来定义, 这一点使得任何人都可以使用storm。

可行性

作为基础服务,对可用性的要求比一般的服务要高得多,因为下游依赖的服务多,一旦出现故障,有可能会引起级联反应影响大量业务。项目从设计上对以下问题做了处理,保障系统的可用性。storm本身比较成熟地支持集群化运维;web服务支持了无状态处理并且通过负载均衡实现集群化;Redis和DB方面已经支持主备部署,使用过程中如果主机发生故障,备机会自动接管服务;通过全栈集群化保障系统没有单点。

另外系统在部分模块不可用时通过降级处理保障整个系统的可用性。如storm处理数据可以通过scm配置开发来降级。Rsf接口服务通过并发控制来降级

数据存储层

海量数据存储的特性:

1. 基于明细数据的存储与预聚合的存储分别去搭建。为什么不仅要基于原始数据存储,还需要预聚合存储?因为其有两种不同的需求。第一个是面向固化的高频查询的数据,我们可以基于预聚合存储的方式。去查询其周期跨度比较长的需求,一年两年都可以进行查询。但是基于近半年或者一年的数据需要进行深度数据探索分析的,便可以基于原始明细数据做实时聚合分析。还有在基于原始明细数据进行分析的时候,他会更佳灵活。比如会员画像服务,通过会员编码查询用户的行为如会员等级、生日、消费能力、订单详细信息等。

2. 海量数据中怎么去实现快速检索,是基于搜索引擎的索引技术进行改造的。但是在筛选方式上,目前只能支持时间筛选、文本筛选和数值筛选、人群标签的筛选。

由此产生以下几种存储介质

Hbase

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。

系统按照主题域建hbase表,如用户画像信息(用户基本信息+行为信息)、订单信息(首末购订单信息、品类、品牌、营销产品类型纬度来存放)便于用户判断是否是新人,访问流(根据页面名称来标识达到千人千面的效果)

ElasticSearch

Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。

Mysql

为什么要分库分表

Mysql常用的关系性数据库,随着数据量增加也许单台DB的存储空间不够,随着查询量的增加单台数据库服务器已经没办法支撑。这个时候可以再对数据库进行水平区分和垂直区分。

性能&扩展

系统调用量统计如下:今年818当天调用次数4亿+,日均调用2亿+,双11期间服务支撑可达10亿+,日均4亿+。

服务器配置:jboss服务器50台,hbase独立集群、es服务器80台、storm集群、mySql 10组 30台机器

扩展方面:storm集群只要扩机器即可,storm部署是比较方便的,只要上传重启就可以完成部署。部署之后由于程序重新启动上下文丢失,可以通过Kafka记录的游标找到之前处理位置,恢复处理。

Hbase集群扩容只需要增加机器即可。

ES服务器也只需增加机器即可。

总结

苏宁实时会员行为服务系统主要有以下特点:

1:原始数据存储,可以分为三个阶段,第一是BI阶段、第二是数据的挖掘、第三是预测分析。

2:满足多维度实时查询。是为了在数据基于原始数据存储之后,去做到聚合结果能够满足用户对海量增量数据快速查询的需求。

3:快速响应需求,必须去解决好如何快速地响应业务需求。

4:数据的探索分析,所以必须要基于原始多维的数据进行数据的探索,挖掘数据新的价值,而不是按照已有的固化的业务模式,只是生产出一些固化的业务模型的数据。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();