携程的数据采集系统架构

实时数据采集系统

原文链接

1. 典型的数据采集分析系统

  1. 数据采集
  2. 数据传输
  3. 数据清洗/建模/存储
  4. 数据统计/分析/挖掘
  5. 数据可视化/反馈
现代化系统都要借鉴大数据优秀的开源解决方案,所以都是架构在Java上

2. 携程的实现

  1. 客户端数据采集:手机SDK
  2. 后端业务:登入后日志/订单等(基于UID)
  3. 数据清洗直到挖掘:基于Netty的网络框架方案
  4. 数据即时调用的消息队列:基于Kafka
数据存储
    * Hadoop
    * Storm
    * OLAP
    * HBase 主要做系统检测

3. 技术组件特性

1) Netty 和Nginx主要区别是全异步

  • 内置多种数据编码解码功能,支持多种网络协议
  • 高性能
  • 可扩展性
  • API的易用性
  • 成功的商业应用

2) 加密/压缩方案

  • 主要是解决可逆加密的客户端(JS/APP)秘钥存储问题
  • 使用Emscripten把C代码转化为JS代码

3) 消息机制

  • 基于Kafka的携程自制消息中间件Hermes

对消息存储方式的对比

* MySQL适于消息量中等,并对消息治理有较高要求的场景
* Kafka 适于大量群发消息, 且对实时性要求不高的场景
* `Broker` 分布式文件存储(是Kafka的扩展)

4) Kafka 的技术特性

  • 消息持久化能力,和大数据量情况下的高性能访问
  • 高吞吐率
  • 支持消息分区存储后的分布式消息,即保证分区后的消息顺序
  • 支持离线或实时数据处理
  • 支持在线水平扩展 Scale out

典型的Kafka集群组成和运行模式

* 若干`Producer`(即消息产生源)
* 若干`Broker`(即吞吐集群)
* 若干`ConsumerGroup`
* 以及一个`Zookeeper`集群
* Kafka通过Zookeeper管理集群配置,选举leader,以及在ConsumerGroup发生变化时进行rebalance
* Producer 使用push 模式讲消息发布到broker,Consumer 使用pull 模式从broker订阅并消费消息

5) 基于Avro格式的实时数据灾备存储

主要指当网络严重阻塞/中断,或系统突发故障时,临时数据紧急保存方式并待恢复后迅速处理,并不是永久化灾备

Avro是一个数据序列化反序列化框架,可以将数据对象转化为便于存储的格式

4. 方案可行性和数据对比

使用ApacheBenchmark进行性能压力测试

5. 系统工具

  1. 单用户浏览跟踪
  2. 页面转化率
  3. 用户访问流
  4. 点击热力图
  5. 采集数据验证测试
  6. 系统性能报表

你可能感兴趣的:(携程的数据采集系统架构)