【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

  • 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:04831

评论

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

大数据技术培训学习机构怎么样

小谷哥

【Meetup预告】SeaTunnel + OpenMLDB:共筑数据集成生态,加速实时场景落地

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

腾讯企点助力建发纸业:浆纸产业数字化战略,传统行业在低增长时代的新路径

人称T客

神经网络模型复杂度分析

嵌入式视觉

params 模型计算量分析 FLOPs 卷积层MAC 浮点计算能力

容器 I/O 性能诊断:到底哪个应用是带宽杀手?

阿里巴巴中间件

阿里云 容器 云原生

深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”

云布道师

云网络

武汉web前端培训靠谱吗

小谷哥

目标检测模型基础知识

嵌入式视觉

Focal Loss IOU NMS Soft NMS anchor

java程序员培训学习值得吗?

小谷哥

程序摄像头Trace Profiling:生产环境10分钟黄金时间快速排障手册

KINDLING

Java Linux 运维 ebpf

WEB前端编程培训学技术怎么样

小谷哥

2023 好运开年,OpenMLDB 入选 2022 中国技术品牌影响力企业

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

目标检测模型的评价标准-AP与mAP

嵌入式视觉

ap map roc PR曲线 精确率与召回率

软件测试/测试开发 | 使用 Zabbix + Grafana 搭建服务器监控系统

测试人

软件测试 Grafana 自动化测试 zabbix 测试开发

Github获赞32.4K!阿里大牛亲码Spring Boot进阶(全彩版小册)

架构师之道

Java 微服务 架构师

​​软件开发入门教程网之​​C++ 标准库

雪奈椰子

C++

​​软件开发入门教程网之​​C++ 信号处理信号

雪奈椰子

软件开发入门教程网之C++ 引用

雪奈椰子

ios打包

16款跨平台应用开发框架,你Pick谁?

Speedoooo

跨端开发 跨端框架 跨端应用平台 跨端开发平台

如何定义算法?10分钟带你弄懂算法的基本概念

九章云极DataCanvas

机器学习 机器学习算法

火山引擎DataTester:5个优化思路,构建高性能A/B实验平台

字节跳动数据平台

大数据 AB testing实战

NineData获"IT168 & ITPub 年度创新产品"奖

NineData

数据库 数据管理 多云管理平台 玖章算术 NineData

AI创作惊艳四方,诸多挑战仍在路上

科技热闻

​​软件开发入门教程网之​​C++ 信号处理

雪奈椰子

ios打包

一站式开发平台 赋能办公全场景

力软低代码开发平台

OceanBase 4.0解读:从TPC-H性能测评看4.0与3.x差异

OceanBase 数据库

数据库 oceanbase

餐饮业数字化提速,OceanBase助海底捞变身“云上捞”

OceanBase 数据库

数据库 oceanbase

从0.5到4.0,OceanBase单机分布式一体化的技术演进|DTCC 2022

OceanBase 数据库

数据库 oceanbase

MX934-1D Maxon Ex d IIC T6 Gb/Ex tD A21 IP68 T80℃ Explosion-Proof 5G Router & Heavy Duty Antenna

wifi6module

Heavy Duty

学习大数据技术培训班靠谱吗

小谷哥

到底什么样的 REST 才是最佳 REST?

江南一点雨

Rest springboot

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