01 背景在线交易服务平台目的是减轻核心系统计算压力和核心性能负荷压力,通过该平台可以将核心系统的交易数据实时捕获、实时计算加工、计算结果保存于SequoiaDB中。并能实时的为用户提供在线交易查询服务。在线交易服务平台基于实时处理架构设计,通过将核心系统的数据变更,实时的同步到在平台数据库,从而达到数据实时复制,及向外提供服务的目的。本文旨在分析实时处理系统的各技术原理及整体架构。首先介绍该架构所用到的技术原理,然后再介绍整体架构实现,并从数据采集层,实时处理层,数据存储层等方面进行详细分析与说明。02 技术需求

2.1 如何构建数据库日志文件实时采集系统

该平台需要从银行多个交易系统中,实时获取客户余额变动和交易明细数据。该过程要求数据采集组件能够提供高性能、高可用性、高安全可靠性的实时采集、传输功能,因此我们采用了具备这些特性的 OGG 和 CDC 采集框架。CDC(Change Data Capture):基于数据库日志实现对数据源变化的实时捕获,并且实时传输到目标端。CDC组件通过读取各个业务生产系统数据库的日志文件捕获得到更新(插入、删除、更新)的交易记录信息数据,经过行列过滤,字符编码转换后由 TCP/IP 发送给目标端,目标端接收到源端数据后,经过数值转换,字符编码转换,冲突检测后将变更数据通过 Confluent Rest API 把数据传送到 Kafka,将数据直接进行持久化之前进行消息队列的数据缓存。OGG(Oracle GoldenGate)是一种基于日志的挖掘的技术,它通过解析源数据库在线日志或归档日志获得数据的增量变化后,再将这些变化的数据传输到 Kafka 中,Kafka将数据直接进行持久化之前进行消息队列的数据缓存。

2.2 如何保证对海量数据的实时处理

相比其他实时处理框架如 Spark 来说,Storm 的实时性较高,延时低,而在线交易服务平台实时性要求比较高,要求毫秒级的数据处理。Storm 作为纯实时的计算框架,其实时计算能力能达到毫秒级。Storm 是基于数据流的实时处理系统,提供了大吞吐量的实时计算能力。在一条数据到达系统的时候,系统会立即在内存中进行相应的计算,因此 Storm 适合要求实时性较高的数据分析场景。此外,Storm 支持分布式并行计算,即使海量数据大量涌入,也能得到实时处理。Storm 还具备以下几个优点:低延迟、高可用、分布式、可扩展、数据不丢失,并且提供简单容易理解的接口,便于开发。

2.3 如何实现采集层与实时处理层的对接

在采集层和实时处理层之间,往往需要加一个消息队列机制,用于实现采集层与实时处理层的解耦,并缓存需要实时处理的数据,保证所有数据都能被有序的正确的处理。此外,从源端采集的数据流并不是均匀的,而是时而多时而少的数据流。特别是在高并发的条件下,数据库日志的数据会出现井喷式增长,如果 Storm 的消费速度(即使 Storm  的实时计算能力已经很快了)慢于日志的产生速度,必然会导致大量数据滞后和丢失,因此我们加上 Kafka 消息系统作为数据缓冲区,Kafka 可以将不均匀的数据转换成均匀的消息流,从而与 Storm 结合起来,实现稳定的流式计算。Kafka 是一个分布式的、分区化、可复制提交的日志服务。作为一个可扩展、高可靠的消息系统,在流处理中,经常用来保存收集流数据,提供给之后对接的 Storm 流数据框架进行处理。作为一个消息队列系统,与大多数消息系统比较,Kafka 具有更好的吞吐量、内置分区、副本和故障转移等功能,这有利于及时处理大规模的消息。03 SequoiaDB 作为存储层的优势

在线交易服务平台需要满足实时处理之后海量数据的高速存储和高效检索,并且需要保证数据的可用性与可靠性。SequoiaDB 是一款优秀的分布式数据库,可以被用来存储海量的数据,其底层主要基于分布式、高可用、高性能与动态数据类型设计,同时兼顾了关系型数据库中众多的优秀设计如事务、多索引、动态查询和更新、SQL等。利用巨杉数据库自身的分布式存储机制与多索引功能,能够很好地为应用提供高并发、低延时的查询、更新、写入和删除操作服务。

SequoiaDB 使用 MPP(海量并行处理)架构,整个集群主要由三个角色构成,分别是协调节点,编目节点和数据节点。其中,编目节点存储元数据,协调节点负责分布式系统的任务分发,数据节点负责数据存储和操作。当有应用程序向协调节点发送访问请求时,协调节点首先通过与编目节点通信,了解底层数据存储的结构与规则,再将查询任务分发给不同的数据节点,然后聚合所有数据节点上的结果,并将结果排序作为合适的查询结果。SequoiaDB 具备以下几点优势:1) 具备丰富的查询模型:SequoiaDB 适合于各种各样的应用程序。它提供了丰富的索引和查询支持,包括二级索引,聚合框架等。2) 具有常用驱动:开发者整合了系统环境和代码库的原生驱动库,通过原生驱动库与数据库交互,使得 SequoiaDB 的使用变得简单和自然。3) 支持水平可扩展:开发人员能够利用通过服务器和云基础架构来增加 SequoiaDB 系统的容量,以应对数据量和吞吐量的增长。4) 高可用性:数据的多份副本通过远程复制来维护。遇到故障系统会自动转移到辅助节点、机架和数据中心上,使得企业不需要自定义和优化代码,就能让系统正常运行。5) 内存级的性能:数据在内存中直接读取和写入。并且为了系统的持久性,系统会在后台持续把数据写入磁盘。这些都为系统提供了快速的性能,使得系统无需使用单独的缓存层。04 技术架构

实时处理架构主要分为数据实时采集,实时处理,实时存储三个模块。其中 CDC,OGG用来获取数据,Kafka 用来临时保存数据,Strom 用来进行数据实时计算,SequoiaDB是分布式数据库,用来保存数据。

系统结构整个实时分析系统的架构先由 OGG/CDC 实时捕获数据库日志文件,提取其中数据的变化,如增、删、改等操作,并存进 Kafka 消息系统中。然后由 Storm 系统消费 Kafka 中的消息,消费记录由 Zookeeper 集群管理,这样即使 Kafka 宕机重启后也能找到上次的消费记录。接着从上次宕机点继续从 Kafka 的 Broker 中进行消费,并使用定义好的 Storm Topology 去进行日志信息的分析,输出到 SequoiaDB 分布式数据库中进行持久化,最后提供在线实时查询接口供用户进行查询。

4.1 数据采集

在日志收集流程方面,针对不同的系统环境,我们设计了不同的采集流程。外围系统采用实时数据同步工具 OGG 进行数据实时采集。OGG 通过捕捉进程在源系统端读取数据库日志文件进行解析,提取其中数据的变化如增、删、改等操作,并将相关信息转换为自定义的中间格式存放在队列文件中,再利用传送进程将队列文件通过 TCP/IP 传送到 Kafka 队列中。

OGG数据采集流程图

而对于核心系统,通过在核心系统源端部署 InfoSphere CDC 实时采集数据库日志及其文件以捕获源端数据库产生的更新(插入、删除、更新)交易记录信息,通过连续镜像运行模式,不间断地把最新交易数据传送到目标端。在目标系统上同样运行  InfoSphere  CDC,接收来自于不同源系统传过来的数据,再通过 Confluent Rest API把数据传送到 Kafka,在对数据进行计算或者直接进行持久化之前进行消息队列的数据缓存。

4.2 实时处理

这里采用 Storm 进行实时处理,Storm 作为实时处理框架具备低延迟、高可用、分布式、可扩展、数据不丢失等特点。这些特点促使 Storm 在保证数据不丢失的前提下,依然具备快速的处理速度。在 Storm 集群中 Master 节点上运行的一个守护进程叫“Nimbus”,负责集群中计算程序的分发、任务的分发、监控任务和工作节点的运行情况等;Worker 节点上运行的守护进程叫“Supervisor”,负责接收 Nimbus 分发的任务并运行,每一个 Worker 上都会运行着 Topology 程序的一部分,而一个 Topology 程序的运行就是由集群上多个 Worker 一起协同工作的。Nimubs 和 Supervisor 之间的协调工作通过 Zookeeper 来管理,Nimbus 和 Supervisor 自己本身在集群上是无状态的,它们的状态都保存在 Zookeeper 上,所以任何节点的宕机和动态扩容都不会影响整个集群的工作运行,并且支持 fast-fail 机制。在 Storm 上做实时计算,需要自定义一个计算程序“Topology”,一个 Topology 程序由 Spout 和 Bolt 共同组成,Storm 就是通过 Topology 程序将数据流 Stream 通过可靠(ACK机制)的分布式计算生成我们的目标数据流 Stream。我们使用 Kafkaspout从 Kafka 的 queue 中不间断地获得对应的 topic 数据,然后通过自定义 bolt 来做数据处理,分别区分出增、删、改记录,再通过自定义 bolt 来调用 SequoiaDB API 对SequoiaDB 数据库进行对应的增,删,改操作,从而达到对源数据实时复制的目的。

实时处理

4.3 数据存储

数据源获取数据经过 Kafka 和 Storm实时处理之后,通过调用 SequoiaDB API 接口将实时解析后的数据存储到 SequoiaDB 中。通过 SQL 查询 SequoiaDB 为 OLAP 场景提供支持,也可通过 JDBC 为在线应用提供 OLTP 服务。将海量数据保存在 SequoiaDB 分布式数据库中,利用其数据库自身的分布式存储机制与多索引功能,能够很好地为应用提供高并发、低延时的查询,以及更新、写入和删除操作等服务。

数据实时处理流程示意图SequoiaDB 数据库底层采用多维分区的方式将海量数据分散到多个数据分区组上进行存储。该方式通过结合了 Hash 分布方式和 Partition 分布方式的优点,让集合中的数据以更小的颗粒度分布到数据库多个数据分区组上,从而提升数据库的性能。

多维分区架构图

采用分区的目的主要是为了解决单台服务器硬件资源受限问题,如内存或者磁盘 I/O 瓶颈问题,使得机器能够得到横向扩展;此外还能将系统压力分散到多台机器上,从而提高系统性能,并且不会增加应用程序复杂性。同时结合 SequoiaDB 的副本模式,保证系统的高可用性。05 实现价值5.1 商业价值越来越多的企业不再满足于通过夜间运行批量任务作业的方式来处理信息,更倾向于实时地获取数据的价值。他们认为数据的价值只有在刚产生时才是最大的,认为在数据刚产生时就移动、处理和使用才是最有意义的。在线交易服务平台作为实时处理架构的最佳实践,将各个系统的数据进行实时处理,整合得到有价值的数据,并将其保存到 SequoiaDB 数据库中供用户实时查询使用。数据实时处理系统不仅提高了用户的满意度,还将实时处理技术与实际业务应用有效地结合了起来。在未来,将会有更多的业务场景需要该技术的支持。5.2 技术价值一个稳定可靠且高效的实时处理架构是将实时数据转化为价值的基础。在线交易服务平台作为由数据实时处理架构搭建起来的平台,能够稳定的在生成环境中运行,提供高效的服务,在技术上具有很高的参考价值。该数据实时处理架构实现了 SequoiaDB 与其他数据库的实时对接,能够方便从其他数据库中迁移和备份数据,可以作为 SequoiaDB  与其他数据库实时对接的中间件。

点击阅读原文,获取更多精彩内容~

vaex 处理海量数据_核心业务“瘦身”进行时!手把手带你搭建海量数据实时处理架构...相关推荐

  1. 卸载idea2020删除以前的配置_系统瘦身指南:卸载软件,看着简单,实际贼困难...

    人们常说:"对于计算机来说,硬件是躯体,软件是灵魂.""没有软件,电脑就发挥不出它强大的功能."把这句话加强一下,那么就是: 上而施脑多件, 脑无力为足成. 算 ...

  2. mysql主从架构搭建_技术 | 手把手教你搭建MySQL主从架构

    1 什么是MySQL的复制 MySQL的主从复制可以实现将数据从一台数据库服务器(master)复制到一台或多台数据库服务器(slave)上,进而可以保证数据有多份冗余. 默认情况下,属于异步复制,所 ...

  3. linux配置usb主从_技术 | 手把手教你搭建MySQL主从架构

    黑马程序员 微信号:heiniu526 传智播客旗下互联网资讯,学习资源免费分享平台 1 什么是MySQL的复制 MySQL的主从复制可以实现将数据从一台数据库服务器(master)复制到一台或多台数 ...

  4. python国际象棋ai程序_只需五步!手把手教你搭建国际象棋AI机器人

    王新民 编译 量子位 报道 | 公众号 QbitAI 要创建一个简单的象棋AI,我们在开始编程之前要先了解四个基本的概念:移动生成.棋局评估.最大最小搜索和α-β剪枝搜索过程. 在每个步骤中,我们将会 ...

  5. 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译

    此论文翻译仅仅用于自己方便学习.译文来自其他处. 在许多实际应用中部署深度卷积神经网络(CNN)很大程度上受到其计算成本高的限制.在本文中,我们提出了一种新的CNNs学习方案,能同时1)减小模型大小; ...

  6. iOS 优化 - 瘦身

    前言 iOS 优化将是一个专题,其中会包括包体积优化(瘦身).启动时间优化.UI 优化等等.那么这个专题的开篇就从瘦身开始吧. APP 的大小是分为 APP 下载大小和安装大小两个概念的. 下载大小是 ...

  7. Jetson Nano 系列之:刷机、瘦身、部署应用

    背景 模型已经训练好了,完成了在jetson nano b01上的各种测试,测试的过程中安装了各种自己也记不清的包,系统装载了32G TF卡上,每次开机还报错,并且引导很慢,这种状态不能直接做生产环境 ...

  8. newduba首页怎么去掉_京喜小程序首页瘦身实践

    前言 在 web 开发场景,减少代码体积虽然是性能优化的一个方向,还没到锱铢必较的程度.但是在小程序场景,由于代码包上传阶段限制了主包 2M 和总包 16M(近期微信官方正在内测将总包上限调整至 20 ...

  9. 如何通便清肠快速见效_如何三个月合理瘦身减脂

    首先2017年,是我人生最灰暗的一年,因为我得了亚甲炎,一种内分泌紊乱的病,吃了激素,让我一度胖到128斤,吃完饭130斤-我照着镜子,看着一张被肉撑到锃亮的脸,看着自己像被水泡过浮囊的腿和胳膊,以及 ...

最新文章

  1. ActionBarSherlock ViewPagerIndicator
  2. mac os 录屏快捷键_Mac跨平台自动同步记事本
  3. MassTransit - .NET Core 的分布式应用程序框架
  4. kuka机器人焊接飞溅大_库卡机器人KCP4示教器屏幕校准方法
  5. 来吧~不要互相伤害,ssh之间要互相信任
  6. Linux-Ubuntu安装软件
  7. Linux集群:LVS搭建负载均衡集群(二)
  8. Xcode工作区间xxxx.xcworkspace不包含xxxx.xcodeproj
  9. SQLite数据库学习小结——Frameworks层实现
  10. vue项目之UI插件:Element-UI的基本使用
  11. 清空计算机网络缓存,怎么清除DNS缓存 利用命令行清理dns缓存方法
  12. bootstrapTable 数据格式
  13. 抖音国庆小游戏是如何实现的?带你走近 Cocos
  14. Windows注册服务的两种方式,并设置服务开机自启
  15. 第三次学车-侧位停车
  16. android动画特效
  17. Exp2 后门原理与实践 20164321 王君陶
  18. 为什么深度学习中一般使用mean=[0.485, 0.456, 0.406]和std=[0.229, 0.224, 0.225]来归一化图像?
  19. 小程序根据经纬度计算两点距离
  20. 史上最强大的权限系统设计方案——极简主义

热门文章

  1. div 隐藏_div的position属性
  2. android 插入耳机 使用自身mic录音_这样选用麦克风,耳机降噪效果会更好
  3. linux java socket编程_深入学习socket网络编程,以java语言为例
  4. 服务器基线加固脚本_Linux 基线检查,安全加固脚本
  5. 删过几十亿个账号,Facebook的人工智能是怎么培养出来的?
  6. 先生,要点单吗? (HTTP协议概览)
  7. html页面返回原理,浏览器输入URL到界面显示(HTML渲染)发生了什么?
  8. ExoPlayer用户手册
  9. hashmap另一种初始化
  10. 58到家为2000万家庭提供上门生活服务的背后是云计算的高效支撑