|
携程及时用户行为处事作为基本处事,今朝普遍应用在多个场景中,好比猜你喜欢(携程的推荐系统)、动态告白、用户画像、欣赏汗青等等。 以猜你喜欢为例,猜你喜欢为应用内用户提供潜在选项,提高成交效率。观光是一项综合性的需求,用户往往需要不止一个产物。作为一站式的旅游处事平台,跨业务线的推荐,出格是及时推荐,能实际满意用户的需求,因此在上游提供买通各业务线之间的用户行为数据有很大的须要性。 携程原有的及时用户行为系统存在一些问题,包罗:1)数据包围不全;2)数据输出没有统一名目,对浩瀚利用方提高了接入本钱;3)日志处理惩罚模块是web service,较量难支持多种数据处理惩罚计策和实现利便扩容应对流量洪峰的需求等。 而近几年旅游市场高速增长,数据量越来越大,而且会一连快速增长。有越来越多的利用需求,对系统的及时性,不变性也提出了更高的要求。总的来说,当前需求对系统的及时性/可用性/机能/扩展性方面都有很高的要求。 一、架构 这样的配景下,我们凭据如下布局从头设计了系统:
图1:及时用户行为系统逻辑视图 新的架构下,数据有两种流向,别离是处理惩罚流和输出流。 在处理惩罚流,行为日志会从客户端(App/Online/H5)上传随处事端的Collector Service。Collector Service将动静发送到漫衍式行列。数据处理惩罚模块由流计较框架完成,从漫衍式行列读出数据,处理惩罚之后把数据写入数据层,由漫衍式缓存和数据库集群构成。 输出流相对简朴,Web Service的靠山会从数据层拉取数据,并输出给挪用方,有的是内部处事挪用,好比推荐系统,也有的是输出到前台,好比欣赏汗青。系统实现回收的是Java+Kafka+Storm+Redis+MySQL+Tomcat+Spring的技能栈。 Java:今朝公司内部Java化的气氛较量浓重,而且Java有较量成熟的大数据组件 Kafka/Storm:Kafka作为漫衍式动静行列已经在公司有较量成熟的应用,流计较框架Storm也已经落地,而且有较量好的运维支持情况。 Redis: Redis的HA,SortedSet和逾期等特性较量好地满意了系统的需求。 MySQL: 作为基本系统,不变性和机能也是系统的两大指标,比拟NoSQL的主要选项,好比HBase和ElasticSearch,十亿数据级别上MySQL在这两方面有更好的表示,而且颠末设计可以或许有不错的程度扩展本领。 今朝系统天天处理惩罚20亿阁下的数据量,数据从上线到可用的时间在300毫秒阁下。查询处事天天处事8000万阁下的请求,平均延迟在6毫秒阁下。下面从及时性/可用性/机能/陈设几个维度来说明系统的设计。 二、及时性 作为一个及时系统,及时性是首要指标。线上系统面临着各类异常环境。譬喻如下几种环境: 突发流量洪峰,怎么应对; 呈现失败数据或妨碍模块,如何担保失败数据重试并同时担保新数据的处理惩罚; 情况问题或bug导致数据积存,如何快速消解; 措施bug,旧数据需要从头处理惩罚,如何快速处理惩罚同时担保新数据; 系统从设计之初就思量了上述环境。 首先是用storm办理了突发流量洪峰的问题。storm具有如下特性:
图2:Storm特性 作为一个流计较框架,和早期大数据处理惩罚的批处理惩罚框架有明明区别。批处理惩罚框架是执行完一次任务就竣事运行,而流处理惩罚框架则一连运行,理论上永不断止,而且处理惩罚粒度是动静级别,因此只要系统的计较本领足够,就能担保每条动静都能第一时间被发明并处理惩罚。 对当前系统来说,通过storm处理惩罚框架,动静能在进入kafka之后毫秒级别被处理惩罚。另外,storm具有强大的scale out本领。只要通事靠山修改worker数量参数,并重启topology(storm的任务名称),可以顿时扩展计较本领,利便应对突发的流量洪峰。 对动静的处理惩罚storm支持多种数据担保计策,at least once,at most once,exactly once。对及时用户行为来说,首先是担保数据尽大概少丢失,别的要支持包罗重试和降级的多种数据处理惩罚计策,并不能发挥exactly once的优势,反而会因为事务支持低落机能,所以及时用户行为系统回收的at least once的计策。这种计策下动静大概会重发,所以措施处理惩罚实现了幂等支持。 storm的宣布较量简朴,上传更新措施jar包并重启任务即可完成一次宣布,遗憾的是没有多版本灰度宣布的支持。
图3:Storm架构 |

















