写点什么

有货大数据系统的演进之路

  • 2019-10-09
  • 本文字数:3160 字

    阅读完需:约 10 分钟

有货大数据系统的演进之路

2018 年 11 月 9 日下午 ,由七牛云主办的第 31 期架构师实践日——大数据技术实践与分享,在南京举行。有货架构师兼运维总监张春华为我们带来了题为《有货大数据系统的演进之路》的分享。

本文是对分享内容的整理。


有些同学可能不是特别了解有货, 我先为大家介绍一下有货。有货总部位于南京。我们公司主要有三块业务,一块是媒体,包括线上 APP YOHO!NOW 和潮流杂志 YOHO!BOYS & YOHO!GIRL ; 另一块是零售,包括电商 APP YOHO!BUY 和线下店 YOHO!STORE,最后一块就是分享潮流生活方式的 mars。



我担任有货的架构师,同时也负责运维,加入有货之前我是华为的工程师。


有货是七牛很早的早期存储用户。早在 2014 年的时候,我们就是七牛云存储的一个用户,我们全网所有的图片、小文件、视频都存在七牛云上。到 2015 年、2016 年,我们开始变成七牛 CDN 的用户。



我先分享一下有货从 2013 年到 2015 年大数据的一个基本架构,这个是最原始大数据的一个系统。关于基础设施,我们在北京有自己租用的 IDC,在这个 IDC 的机器上我们部署了基于 Hadoop 的系统,主要提供 hive 的计算。我们做一些简单的业务报表,提供给老板看一些日活月活,包括店铺的销售数据、商品的销售数据等等,是一个很简单的系统。



这个系统主要的问题有两点:



一是存储能力不足,因为你需要自己去买磁阵,而且这个费用是非常高的,而且容易坏掉。另外存储分为冷热存储,自己在 IDC 很难做这个冷热分离。


二是计算能力不足,因为 hive,大家都知道它很难去支撑一些实时或者近实时的业务。我相信大部分公司,第一个大数据平台都是类似这样的,基于 hive 的一个简单的东西。


在 2015 年的时候,我们也做了一个最大的变化,就是从 IDC 迁移到公有云上,迁移到公有云上以后,我们的大数据也一并迁移到公有云上。原来的物理计算机变成了云的虚拟机,在这个虚拟机上我们也搭建了自己的 Hadoop 集群。同时为了支撑一些实时或者近实时的业务,我们也搭建了 Spark 的集群。



有了这个 Sprak 之后我们就能支撑一些实时的业务,比如说老板看一个小时内哪个商品卖得好或者哪个商品点击率高等等,它可以支持实时的查询。从 2015 年到 2017 年,这个系统运行了将近一年多到两年的时间。


这个系统也有一些问题,第一个问题就是计算和存储是耦合的,因为我们是公有云虚拟机搭建的一个 Hadoop 集群,计算能力不足时,你需要加节点,存储也顺带必须要加上,可能存储是够的,加的存储就是浪费。这是一个问题。同时自己搭建集群维护成本很高。



另一方面,Spark 在毫秒级延迟下的 Streaming 计算能力是不足的。基于 hive 的数据仓库也是比较慢的,一般快的需要二三十秒,慢的可能要几百秒。


现在的架构大概是这个样子,最下面是系统的数据源,还有来自外部广告投放的一些点击数据。我们现在存储都是用的云的对象存储,简称 OSS。计算包括流计算、OLAP 和批处理计算。流处理我们使用 Spark streaming + Flink 的架构;OLAP 主要使用了 Druid 和 Spark ;数据仓库方面,我们在 hive 的基础上添加 GreenPlum 来支撑一些更快的查询。


为什么引入 Greenplum 呢?因为这个数据库是 MPP 界开源里面一个比较好的选择。能够支持 PB 级的数据,而且在性能上、可靠性上经过了很多商业案例的检验。我们国内银行、证券等金融行业客户用这个用得比较多。我们做的一些 CRM 人群画像使用宽表存储在 Greenplum 中,业务系统取这些数据的时候就会非常快,如果用 hive 取这些数据就会很慢。


有了这套系统,我们可以支撑报表、运营、CRM、风控、推荐等等业务。



我们重点看一下 Flink 在我们这边的一些应用。以恶意请求检测的场景来介绍,我们电商系统或者其他系统应该都会遇到一些恶意的攻击,比如说羊毛党、撞库等等。系统入口的请求日志通过 Filebeat 收集到管道-即 Kafka 集群中,一个 Flink Straming 任务是对原始日志做清理。清理完之后再把结构化的数据写到 Kafka 集群里面。然后再有另外一个任务读取这些清理过的事件,然后根据规则判断请求是否恶意。 我们通过 spring cloud config server 来提供规则配置服务。如果 IP 是恶意的,就会写入到 Redis 中,Openresty 会 subscribe 到恶意 IP,并且实时拦截请求。


这是一个简单的恶意 IP 识别的系统。这个识别是基于规则。我们也尝试过去做一些所谓的人工智能基于有标签的历史数据集就行训练。经过我们实践之后,发现基于特征和基于规则的结果都是差不多的,所以我们没有上线基于机器学习的恶意检测系统。


这个系统,我们现在能够支撑到 5 万每秒的请求,所以如果你用 Spark Streaming 这个来做,同样的延迟和吞吐量,可能会需要更大的 yarn 集群资源。


接着介绍一下 OLAP。我们做过 POC 后最终选了 Druid 来做 OLAP。



Druid 可以直接对接 Kafka 流数据,可以很方便地做一些数仓的切片、切块等等,可以支持汇聚,能够支持快速的 count-distinct。count-distinct 电商系统里面是非常常见的,你要计算 PV、UV 等等。我们用 Druid 主要做留存分析,包括热门店铺、热门商品、热门品类等等。运营系统里面很多数据、很多计算都是来自于 Druid。我们有一个简单的 APM 系统,我们也用 Druid 来分析 APP 上报的数据,能知道哪个地区可能网络质量不是很好,哪个版本可能崩溃率比较高等等。


下面是 Druid 的一个架构图,简单介绍一下,Druid 可主要包括历史节点、实时节点,Broker 节点和协调节点,它们各司其职。



Druid 的历史数据存储有很多选择,例如 Hadoop HDFS、OSS 等。大家知道 Druid 只存储汇聚后的数据,原始数据我们是存储在 Greenplum 中。


接下来分享一下我们在构建大数据一路演进下来的一些经验或者一些教训。


第一个是存储空间的优化,我们最初在公有云上用 EMR 的时候,我们的存储空间是非常非常大的,用了一个月之后我们发现这个存储账单爆掉了,光存储就是十几万的账单。为什么?我们发现我们犯了一个低级错误,没有清理一些 Trash 目录,这个释放掉之后空间就会省出很多。第二个是存储格式,一开始没有做压缩,存储空间就很大。后面我们切换了 orc+snappy 的方式,存储空间就很小。


下图展示了各种存储方式空间大小。切换存储方式应用也要有一些变化,所以这个工作最好在一开始就做好。



第二个是对象存储文件的一个前缀优化,如果大家做过 HDFS 应该都知道,这个会造成所谓的热点。要怎么做呢?可能说你把这个前缀做一些 random 的东西,例如对路径做 HASH,这样的话,这些文件就会分布到不同的节点上。但是做了这个之后也会变得很麻烦。 Hadoop 集群在 IDC 中,你会感受不到热点的问题。当你的数据量变得很大的时候,并且你的数据都是通过网络从 OSS 中获取的,你会发现这个问题很严重。我们当时几乎每天都会出现热点问题,会报超时,但是没有太好的办法,就需要做前缀的这些优化。



当然,各个公有云厂商也在不断对 OSS 产品做改进。我相信其他的公有云厂商,比如说阿里云、华为云或者七牛云,他们都在做优化,我相信再过一年两年这个优化就会成为历史,可能不需要自己做,OSS 厂商就会帮你做。


第二个就是 AutoScaling,这个是非常重要。 公有云 EMR 中 task 节点是无状态的,可以方便的伸缩。我们现在每天凌晨扩展一些 task 节点支持大批量的 ETL 计算。计算结束之后,到第二天早上大概到 9 点时,我们会把这些 task 节点全部都缩掉。这个能降低成本,这也是使用公有云的一个好处。



这就是我今天分享的主要内容 :有货大数据系统从基本的 Hadoop 集群进化到现在一个包括 Streaming、OLAP、Batch 的基于公有云的数据平台,也有从 IDC 迁移到公有云的经验。 谢谢大家。


作者介绍:


张春华,有货架构师兼运维总监,负责有货电商中台系统、大数据系统的架构设计。对微服务框架、电商大数据系统、运维系统等有一定的认识和丰富的实践。


本文转载自公众号七牛云(ID:qiniutek)。


原文链接:


https://mp.weixin.qq.com/s/wxEbekoBFN0Nw_J-wZSJdw


2019-10-09 11:04979

评论

发布
暂无评论
发现更多内容

专业解读财务共享实现财务数智化转型的有效路径

用友BIP

财务共享

微服务是不是金科玉律?基于Spring Cloud如何构建分布式系统?

做梦都在改BUG

Java 架构 微服务 Spring Cloud

惊喜!华秋DFM软件升级,新功能让你爱不释手

华秋电子

厦门狄耐克:助推智慧医疗,需要夯实自身的技术底座

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

如何通过财务共享推进财务精细化管理

用友BIP

财务共享

TiDB x Flink 数据集成实践

TiDB 社区干货传送门

实践案例 大数据场景实践 数据中台场景实践 OLAP 场景实践

深入浅出微服务:40个微服务架构实战案例(Dubbo+Springcloud)

做梦都在改BUG

Java 微服务 Spring Cloud

池州控股集团财务共享项目启动啦!

用友BIP

财务共享

用友协办国有资本投资运营公司第八次圆桌会议, 展示数智国资发展新路径

用友BIP

国资国企数智化转型

秒杀系统常见问题—如何避免库存超卖?

做梦都在改BUG

秒杀系统 电商超卖

阿里全新推出:微服务突击手册,把所有操作都写出来了|超清PDF

Java你猿哥

Java spring Spring Cloud ssm Ribbon

属实不赖!Alibaba开源GitHub星标114K微服务架构全彩进阶手册

Java你猿哥

Java 架构 微服务 微服务架构 ssm

跪了!Alibaba内部优质Springboot笔记:两大项目实战+源码解析

做梦都在改BUG

Java spring 微服务 Spring Boot 框架

面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?

Java你猿哥

Java JVM ssm Java性能优化

用友与临港集团签署战略合作协议

用友BIP

国资国企数智化转型

Github标星78k,Alibaba最新发布的Spring Boot项目实战文档!太强了

Java你猿哥

Java 面试 Spring Boot ssm Spring MVC

TiDB 使用国内公有云和私有部署的 S3 存储备份指南

TiDB 社区干货传送门

数据库架构设计 6.x 实践

SpringBoot 实现启动项目后立即执行方法的几种方式

Java你猿哥

源码 jdk Spring Boot ssm

软件测试/测试开发丨Web自动化测试中显式等待的高级使用

测试人

程序员 软件测试 自动化测试 测试开发

官宣!时序数据库 TDengine 与天翼云完成产品兼容性认证

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

浅析财务共享各阶段面临的挑战

用友BIP

财务共享

【5.19-5.26】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

开发敏捷高效 | 云原生应用开发与运维新范式

CODING DevOps

DevOps 云原生 CODING DevOps 开发运维 敏捷高效

TiDBv6.5离线部署

TiDB 社区干货传送门

6.x 实践

TiDB x Flink x Iceberg 实时 ODS 实践

TiDB 社区干货传送门

实践案例 大数据场景实践 实时数仓场景实践 数据中台场景实践 OLAP 场景实践

Github上星标55.9k的微服务神仙笔记真的太香了

做梦都在改BUG

Java 架构 微服务 Spring Cloud 设计模式

如何将千亿文件放进一个文件系统,EuroSys'23 CFS 论文背后的故事

Baidu AICLOUD

文件存储 元数据

JVM—解析运行期优化与JIT编译器

做梦都在改BUG

Java JVM JIT

C4D 常用 14 款插件

Finovy Cloud

C4D 3D软件

基于openfaas托管脚本的实践

百度Geek说

数据库 百度 企业号 5 月 PK 榜

JVM——解析运行期优化与JIT编译器

Java你猿哥

JVM ssm 虚拟机 编译器 JIT编译器

有货大数据系统的演进之路_文化 & 方法_张春华_InfoQ精选文章