您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

携程用户数据采集与分析系统

2023/2/11 1:02:36发布58次查看
一、携程实时用户数据采集系统设计实践
随着移动互联网的兴起,特别是近年来,智能手机、pad等移动设备凭借便捷、高效的特点风靡全球,同时各类app的快速发展进一步降低了移动互联网的接入门槛,越来越多的网民开始从传统pc转移至移动终端上。但传统的基于pc网站和访问日志的用户数据采集系统已经无法满足实时分析用户行为、实时统计流量属性和基于位置服务(lbs)等方面的需求。
我们针对传统用户数据采集系统在实时性、吞吐量、终端覆盖率等方面的不足,分析了在移动互联网流量剧增的背景下,用户数据采集系统的需求,研究在多种访问终端和多种网络类型的场景下,用户数据实时、高效采集的方法,并在此基础上设计和实现实时、有序和健壮的用户数据采集系统。此系统基于java nio网络通信框架(netty)和分布式消息队列(kafka)存储框架实现,其具有实时性、高吞吐、通用性好等优点。
1、技术选型和设计方案:
一个典型的数据采集分析统计平台,对数据的处理,主要由如下五个步骤组成:
图1、数据平台处理流程
其中,数据采集步骤是最核心的问题,数据采集是否丰富、准确和实时,都直接影响整个数据分析平台的应用的效果。本论文关注的步骤主要在数据采集、数据传输和数据建模存储这三部分。
为满足数据采集服务实时、高效性、高吞吐量和安全性等方面的要求,同时能借鉴互联网大数据行业一些优秀开源的解决方案,所以整个系统都将基于java技术栈进行设计和实现。整个数据采集分析平台系统架构如下图所示:
图2(数据采集分析平台系统架构)
其中整个平台系统主要包括以上五部分:客户端数据采集sdk以http(s)/tcp/udp协议根据不同的网络环境按一定策略将数据发送到mechanic(ubt-collector)服务器。服务器对采集的数据进行一系列处理之后将数据异步写入hermes(kafka)分布式消息队列系统。为了关联业务服务端用户业务操作埋点、日志,业务服务器需要获取由客户端sdk统一生成的用户标识(c-guid),然后业务服务器将用户业务操作埋点、日志信息以异步方式写入hermes(kafka)队列。最后数据消费分析平台,都从hermes(kafka)中消费采集数据,进行数据实时或者离线分析。其中mechanic(ubt-collector)系统还包括对采集数据和自身系统的监控,这些监控信息先写入hbase集群,然后通过dashboard界面进行实时监控。
(1)基于nio的netty网络框架方案
要满足前面提到的高吞吐、高并发和多协议支持等方面的要求。我们调研了几种开源异步io网络服务组件(如netty、mini、xsocket),用它们和nginxweb服务器进行了性能对比,决定采用netty作为采集服务网络组件。下面对它进行一些概要介绍:netty是一个高性能、异步事件驱动的nio框架,它提供了对tcp、udp和文件传输的支持,netty的所有io操作都是异步非阻塞的,通过future-listener机制,用户可以方便的主动获取或者通过通知机制获得io操作结果。
图3(netty框架内部组件逻辑结构)
netty的优点有:
a、功能丰富,内置了多种数据编解码功能、支持多种网络协议。
b、高性能,通过与其它主流nio网络框架对比,它的综合性能最佳。
c、可扩展性好,可通过它提供的channelhandler组件对网络通信方面进行灵活扩展。
d、易用性,api使用简单。
e、经过了许多商业应用的考验,在互联网、网络游戏、大数据、电信软件等众多行业得到成功商用。
netty采用了典型的三层网络架构进行设计,逻辑架构图如下:
图4(netty三层网络逻辑架构)
第一层:reactor通信调度层。该层的主要职责就是监听网络的连接和读写操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事件、写事件等,将这些事件触发到pipeline中,再由pipeline充当的职责链来进行后续的处理。
第二层:职责链pipeline层。负责事件在职责链中有序的向前(后)传播,同时负责动态的编排职责链。pipeline可以选择监听和处理自己关心的事件。
第三层:业务逻辑处理层,一般可分为两类:a. 纯粹的业务逻辑处理,例如日志、订单处理。b. 应用层协议管理,例如http(s)协议、ftp协议等。
我们都知道影响网络服务通信性能的主要因素有:网络i/o模型、线程(进程)调度模型和数据序列化方式。
在网络i/o模型方面,netty采用基于非阻塞i/o的实现,底层依赖的是jdknio框架的selector。
在线程调度模型方面,netty采用reactor线程模型。常用的reactor线程模型有三种,分别是:
a、reactor单线程模型:reactor单线程模型,指的是所有的i/o操作都在同一个nio线程上面完成。对于一些小容量应用场景,可以使用单线程模型。
b、reactor多线程模型:rector多线程模型与单线程模型最大的区别就是有一组nio线程处理i/o操作。主要用于高并发、大业务量场景。
c、主从reactor多线程模型:主从reactor线程模型的特点是服务端用于接收客户端连接的不再是一个单独的nio线程,而是一个独立的nio线程池。利用主从nio线程模型,可以解决一个服务端监听线程无法有效处理所有客户端连接的性能不足问题。netty线程模型并非固定不变的,它可以支持三种reactor线程模型。
在数据序列化方面,影响序列化性能的主要因素有:
a、序列化后的码流大小(网络带宽占用)。
b、序列化和反序列化操作的性能(cpu资源占用)。
c、并发调用时的性能表现:稳定性、线性增长等。
netty默认提供了对googleprotobuf二进制序列化框架的支持,但通过扩展netty的编解码接口,可以实现其它的高性能序列化框架,例如avro、thrift的压缩二进制编解码框架。
通过对netty网络框架的分析研究以及对比测试(见后面的可行性分析测试报告)可判断,基于netty的数据采集方案能解决高数据吞吐量和数据实时收集的难点。
》》点击阅读全文
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product