部署到gcp_剖析大数据公司为什么选择 GCP?

文章来源:加米谷大数据

假如L 是一家大数据公司。下面我们的文章将围绕L展开分析。

很多公司拥有大数据。每天早餐之前,健壮的日志框架就已经生成了 PB 级别的日志,并以防万一将这些数据长期保存在了亚马逊的 S3 上。

还有一些公司会使用他们自己的大数据。他们拥有自己的产品,他们会通过 Hadoop 和 Spark 来做一些机器学习,从而生成针对客户的产品推荐。

但是像 L 这样的大数据公司就很少了。我们从客户那里赚取的每一分钱都来自于我们的 Hadoop 处理流水线。L 的产品线很广,但这些产品都经由了相同的生产流程,即提取、转换、加载、加入 Hadoop 处理管道。如果说今天我们关闭了 Hadoop 基础设施,那公司也就可以直接关门停业了。

到去年为止,L 所有的大数据计算都是在本地数据中心完成的。我们的数据中心部署了一个超过 2500 节点的 Cloudera Hadoop 集群。而从今年开始,我们逐步把它们迁移到了 GCP(谷歌云计算平台)。

Sasha Kipervarg,Patrick Raymond 和我在 Google Next 大会上展示了这次迁移之旅,包括我们从中学到的经验教训,以及接下来的计划等。在本系列博客文章中,我将从技术角度更深入地探讨这次迁移,重点有:

  • 在 2018 年及其以前,我们是如何在本地运营 L 大数据基础设施的?
  • 我们为什么要决定迁移?
  • 我们希望 L 基础设施在 GCP 上是什么样子?
  • 我们是如何实现的?
  • 我们下一步该如何发展?

尽管这是一项巨大的工程,但我们仍然对其感到兴奋,因为它将改变 L 的开发体验,让我们可以用前所未有的速度将可扩展的、可靠的产品推向市场。

L 一览

f858cde2bfeb612b262ea06be0d5c8bc.png

L 有很多产品,但它们都是本着匹配客户 CRM(客户关系管理)以及匹配数据集的原则在不同生态系统之间转移数据。我们通过批文件传输管道和实时的像素服务器这两种方式将这些转换后的数据传输到数字广告生态系统中去。

Hadoop 生态系统尤其适合执行大规模数据连接,这也是我们所使用的。我们的绝大多数硬件都用在了 Cloudera Hadoop 集群。本地集群的最大规模可达到为:

  • 2500 个工作节点
  • 90000 个 CPU
  • 300TB 的内存
  • 100PB 的存储

我们的基础设施非常繁忙,每天有超过 10 万个 YARN 应用在运行,读写量超过 13 个 PB/ 天,以及超过 80% 的系统利用率:

51769b43a30c678dd753c7202b3783f6.png

任何拥有 150 名工程师并且在不断增长的公司都会面对大量的服务以及与之对应的支持基础设施。截至 2018 年,我们使用了 500 多个由 Chef 统一配置管理的 VMWare 虚拟机(一个相对小一些的基于 CoreOS Tectonic 版本的 Kubernetes 集群。我们的实时键值服务平台则由内部的一个开源项目实现。

我们需要每天从合作伙伴处获取文件和日志,然后将处理后的文件送还,平均数据量约为 8TB 每天,像素服务器的平均访问量也达到了 20 万 QPS。

尽管我们在 AWS 运行了一些与国际团队和像素服务器相关的服务,但如此大的工作任务仍然用尽了本地数据中心的硬件资源。

上云

虽然我们对自己的基础设施有诸多不满,但是本着“正常工作”优先的原则,我们一直没有对它进行改变。但到了 2017 年中旬,我们开始意识到本地数据中心的规模已经无法满足我们的国际化需求。于是我们具备了所有迁移到云的一般动机:

  • 规模扩展:我们需要能够更快地扩展我们的基础设施,而不再受限于数据中心物理设备的搭建,例如 2 个月的硬件购买时间以及更多的空间放置需求等。
  • 灾难恢复:我们并不满意自己的灾难恢复系统。我们希望在数小时内就可以从灾难性的停机状态中恢复过来,而不是花费几个星期从冷备份开始恢复。
  • 招聘:工程师们希望能够接触到更重要和实用的技能,而在 2019 年,这就是着云计算。
  • 开发速度:假如我们有 30% 的开发人员可以从基础设施维护中解放出来,这意味着他们可以重新转向产品开发,从而将产品推向市场的速度提高 30%。

因此,到 2017 年底,我们开始认真地评估云服务供应商,并开始把 L 想象成一家云原生技术公司。

为什么选择 GCP?

ce9e18e3dc436207dd1b62ba4b3fc07d.png

我们喜欢 GCP,但我们知道它并不是默认选项。我们之所以选择 GCP 主要有两个驱动因素:

  • 技术

技术评估并不适合放在本篇文章中,但我要强调的一点是 GKE(谷歌 Kubernetes 引擎)是一个非常关键的因素。本次迁移有一个很明确的方向,那就是要把所有的应用程序和服务迁移到 Kubernetes 平台。可以粗略地讲,GKE 就是 Kubernetes 领域事实上的领头羊。

虽然我们可以选择任意一家云供应商并最终完成迁移,但一个很大的区别就是云供应商背后的技术支持人员。GCP 把我们同那些想回答我们问题并提供解决方案的工程师很好地联系了起来。

我们对 GCP 的技术支持合约也非常满意。我们总是能够与专业工程师及时取得联系并迅速得到解决措施。这也给了我们信心,通过与 GCP 合作,我们相信可以解决任何问题,这一点都现在也没有改变。

在下一篇文章中,我将讨论一些大数据基础设施迁移到 GCP 的细节,哪些方面可以直接转换到 GCP,而哪些方面又需要重新设计。敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis缓存那点破事 , 绝杀面试官 25 问

转载:https://blog.csdn.net/itomge/article/details/122118060 精彩文章汇总 GitHub https://github.com/aalansehaiyang/technology-talk ,Star 12K ,汇总java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例…

css 动画 - 这次不会忘记了

css 动画基本用法 div {animation-name: rainbow; /*动画名称*/animation-duration: 1s; /*这段动画开始到结束总共需要花费多长时间*/animation-fill-mode: forwards; /*动画在结束时元素的样式*/animation-iteration-count: infinite; /*动画运行几次?*/animatio…

Mysql的select in会自动过滤重复的数据

Mysql的select in会自动过滤重复的数据 默认使用 SELECT 语句; 当加上in范围后,结果如下图: in范围内的数据,如果有重复的,只会选择第一个数据。 所以如果不是直接使用SQL语句来查询,而是在代码中来查询…

vue初始

一、引入 Vue 文件 <script src"https://cdn.jsdelivr.net/npm/vue2.6.14/dist/vue.js"></script>二、定义一个容器 <!--root 容器里的代码称为 Vue模板;VueProject 实例和容器是一一对应的&#xff1b;真实开发中只有一个 Vue 实例&#xff0c;并且…

小眼睛适合大框还是小框眼镜_【图】小眼睛适合什么眼镜框 这个禁忌千万不要犯_小眼睛_伊秀服饰网|yxlady.com...

很多天生眼睛偏小的人&#xff0c;都会想尽办法来让自己的眼睛看起来更大&#xff0c;而佩戴眼镜就是其中比较常见的方式。但佩戴眼镜也是需要讲究诀窍的&#xff0c;那么&#xff0c;小眼睛的人应该如何挑选眼镜呢&#xff1f;对于现代的年轻男女来说&#xff0c;很多时候佩戴…

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key c

错误原图&#xff1a; 错误分析&#xff1a;外键约束失败导致插入数据有误 解决问题&#xff1a;检查被关联的外键字段值&#xff0c;在原表中是否有对应的值&#xff0c;添加时外键的值在原表&#xff08;外键关联的表&#xff09;中一定要有该值&#xff0c;没有的值添加报错…

android 开源 高斯模糊_Android图像处理 - 高斯模糊的原理及实现

欢迎大家前往由前言高斯模糊是图像处理中几乎每个程序员都或多或少听过的名词&#xff0c;但是对其原理大家可能并不了解&#xff0c;只知道通过高斯模糊能实现图像毛玻璃效果。本文首先介绍图像处理中最基本的概念&#xff1a;卷积&#xff1b;随后介绍高斯模糊的核心内容&…

Vue数据绑定v-bind

一、单向数据绑定 <div id"root"><!-- 仅仅只是绑定一个属性在标签上 只有 data 变化&#xff0c;输入框才会变化 -->数据单向绑定&#xff1a;<input type"text" name"" id"" :value"name"> </div&g…

MySql 清空、删除、截断表时1701错误

项目已经进行一段时间&#xff0c;整体的开发工作已经完成。接下来要进入综合测试阶段&#xff0c;所以想要将数据清理一下&#xff0c;然后报了1701错误&#xff0c;由错误提示得知是外键约束的问题 解决办法&#xff1a;关闭外键约束->清空表、截断表->启动外键约束。…

mysql cascade|restrict|no action|set null__mysql 外键的几种约束

mysql cascade|restrict|no action|set null MySQL有两种常用的引擎类型&#xff1a;MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。InnoDB中外键约束定义的语法如下&#xff1a; [CONSTRAINT [symbol]] FOREIGN KEY[index_name] (index_col_name, ...)REFERENCES tb…

编辑流程图_流程图不会绘制?一分钟手把手教你学会,超简单

我们每天的日常工作非常繁忙&#xff0c;经常被日常的事务性工作淹没&#xff0c;而忽略掉我们工作的流程是否正确&#xff0c;我们的方向是否正确。如果流程、方向错了&#xff0c;再努力都是没有用的。要确保努力与付出是有价值的&#xff0c;就必须确保前进方向是正确的&…

MVVM 模型

MVVM 模型 在实际代码中 <!--MVVM 模型&#xff1a;1. M: 模型(Model) : data 中的数据2. V: 视图(View) : 模板代码3. VM: 视图模型(ViewModel) : Vue 实例观察发现&#xff1a;1. data 中所有的属性&#xff0c;最后都出现在了 vm 身上2. vm 身上所有的属性 以及 Vue 原…

MySQL外键命名规范

数据库 外键命名规范 外键字段&#xff1a;与主表主键字段完全一样 主键&#xff1a;pk_表名 例如&#xff1a;pk_main 外键&#xff1a;fk_从表名_主表名 例如&#xff1a;fk_sub_main

收音机磁棒天线4根接法_有关收音机磁性天线和电路的小知识

有关收音机磁性天线和电路的小知识&#xff0c;一起来了解一下吧&#xff01;一、收音机的磁性天线有什么作用&#xff1f;用磁性天线可以代替超外差收音机的天线线圈。由于磁性天线中磁棒的导磁率大&#xff0c;因而绕在磁棒上面的线圈可以获得比较多的电磁波能量&#xff0c;…

data 的数据代理

一、Object.defineProperty() 控制对象的属性值 let num 18; let person {name: mary,age: num; };Object.defineProperty(person, age, {writable: true, // 控制属性是否可以修改. 默认值是 falseenumerable: true, // 控制属性是否可以枚举&#xff0c;默认值是 falsecon…

MySQL百万级/千万级数据存储解决方案

MySQL 百万级/千万级数据存储解决方案 百万级、千万级数据处理&#xff0c;个人认为核心关键在于数据存储方案设计&#xff0c;存储方案设计的是否合理&#xff0c;直接影响到数据CRUD操作。总体设计可以考虑一下三个方面进行设计考虑&#xff1a; 数据存储结构设计索引设计数…

vue 加载太慢_Vue首页加载过慢 解决方案

一、什么导致了首页初步加载过慢&#xff1a;app.js文件体积过大二、解决方法&#xff1a;1、Vue-router懒加载vue-router懒加载可以解决首次加载资源过多导致的速度缓慢问题&#xff1a;vue-router支持WebPack内置的异步模块加载系统。所以&#xff0c;那些使用较少的路由组件…

事件处理 v-on

<!--事件的基本使用&#xff1a;1. 使用 v-on:xxx 或 xxx 绑定事件&#xff0c;其中 xxx 是事件名2. 事件的回调需要配置在 methods 对象中&#xff0c;最终会在 vm 上3. methods 中配置的函数&#xff0c;不要用箭头函数&#xff01;否则 this 就不是 vm 了4. methods 中配…

java restful文件传输_java中使用restful web service来传输文件

【1】上传大文件&#xff1a;前端页面&#xff1a;1)同步上传&#xff1a;2)异步上传&#xff1a;异步上传文件上传文件&#xff1a;function doUpload() {// var formData new FormData($("#uploadForm")[0]);var formData new FormData()formData.append("t…

enum与int、String之间的转换

enum与int、String之间的转换 enum<->int enum -> int: int i enumType.value.ordinal(); int -> enum: enumType b enumType.values()[i]; enum<->String enum -> String: enumType.name() String -> enum: enumType.valueOf(name); 下面是Enum和字…