编者按:大数据的题目看起来好写,因为大家似乎都懂,但是其实也难写,因为太大了,没有具体的问题很难写出有营养的东西,所以今天选取两个QCon比较典型的例子来管中一窥大数据的魅影。

有的同学很困惑米国人不看知乎怎么知道那么多知识呢?米国人当然看Quora啦,Quora是一个问答社交软件,问答社交的特点就是有各种各样的计数器,比如帖子的支持、反对、评论数量,用户的关注、粉丝数量等等,随着用户量的增加、帖子的增多、以及带来的互动的增长,Quora处理的数据也是爆炸式增长。Quora从第一天开始就长在云上(AWS),生产环境使用MySQL和HBase做存储,使用RefShift和Spark用来做数据分析,在这些组件的基础上Quora做了一个数据服务叫Quanta,Quanta的设计约束是:

A:数据更新之后不能丢失,要求持久化到disk

B:有billion级别的counter,单机放不下,所以需要分布式集群

C:每秒写>10W次,每秒读>100W次,只能用追加写

D:读写都要很快

E:资源和负载能够线性扩展,而且能够扩展到目前负载的50倍

F:成本越低越好

Quora还有很多基于时间序列数据计算,比如:

A:过去T时间内发生了什么,基于滑动窗口

B:过去Y时间内每隔X该事件发生了多少次,需要访问历史存储数据

C:X和Y可以是任意的

还有比较复杂的计算是关系图引入的多层聚合,如:

对于图有两种计算方式,一种是lazy update,只更新单个节点,关联节点在有读操作发生时再触发,一种是eager update,每次update都触发整个关联图的更新,Quora最终采用的是eager update,理由是:每次读的时候都去做一次更新会加大延迟,不可接受;更新即使慢也没关系,因为是异步的;图更新比起读操作还是极少的。当然有向无环图DAG有多种形状,有线性的、菱形的,每种图上的counter更新算法也略有不同,不再赘述。

整个Quora的架构大概是这样子的:

客户端写日志到一个journal系统,数据处理Processor从journal系统不停pull数据然后分别更新图和counter存储服务,客户端从counter服务读数据,写操作是追加数据到journal服务,update操作是以thrift message的形式来封装的,所以可以支持各种各样的client;Processor是stateless的异步服务,可以批量读取数据并做处理;counter存储服务用的是HBase,理由是每个计数都可以利用column family字段来保存若干个时间窗口的数据,比如一天的、一周的等等,而且schema还可以随时改变,当设置TTL的时候数据还可以自动过期,吞吐量也足够大;图服务用的也是HBase,每一个row就是图的一个edge,column family存储的是入边和出边,而且通过设置bloom filter还可以实现negative查询,这些模型都比较适合图运算。

目前存在的问题是当Processor处理update数据的时候可能会存在两个job处理同一个图的不同vertex的问题,Quora对这个问题的解法也比较巧妙,就是通过简单的算法将整个连通图隔离出来,这个子图中的所有节点都只会在一个job中去运算,这样就解决了冲突的问题。

总结下来Quora将数据做了很好的model,主要分为两大类,有计数的、有图的,然后对两类数据分治处理,尤其是在处理图数据的时候通过将图分割来解除依赖,所以不需要加锁,极大提升了并行度;对系统也做了很好的设计,比如写和更新解耦、更新可弹性伸缩、存储采用HBase更为灵活,当然前提是要对业务有深度思考并对约束有清晰的判断。

接下来的案例是Spotify,Spotify的问题是成长太快,在流量和用户快速增长的时候,系统服务依赖也成指数级别增长,由于整个架构缺乏体系的思考和设计,所以在服务多了之后就出了一系列的问题,如隔三差五的小故障、Hadoop挂掉、数据重复处理、很多数据流水线上的bug无法追查等等,针对这些问题,Spotify做了一系列的改造。

首先是先暴露问题,做早期报警,然后做了一个有领域编程语言支持的监控工具Datamon,Datamon不仅仅做报警,更重要的是对数据的所有权进行了划分,这是一个比较大的进步,报警大家都会做,但是把报警发给谁是一个更有挑战的问题;针对调度和计算不好debug的问题做了一套叫Styx的服务,Styx的每一个job都用docker来做隔离,也暴露了更多的debug信息出来,易用性上也比之前有很大提升,具体实现细节没有多讲;最后一步为了实现弹性扩缩容利用Kubernetes做了一套系统叫GABO,不再赘述。

从Spotify这个例子可以看出如果一个架构师或者CTO没有从体系上和整体架构上去思考问题,业务发展越快跪得越快,给飞机换轮子听着很英勇但是能避免的还是尽量提前避免。

通过上面这两个例子我们也能看出无论目前有了什么样的工具、多么牛逼的产品,定义问题、提炼需求、确定问题边界反而比直接去写代码更有价值,这才是我们的核心竞争力,这些技能也就是我们平时所倡导的调研和思考,用在思考上的时间多了用在擦屁股上的时间也就少了,与君共勉。

2016美国QCon思考:通过Quora和Spotify案例,直击数据处理背后的魅影相关推荐

  1. QCon思考之通过Quora和Spotify案例,直击数据处理背后的魅影

    有的同学很困惑米国人不看知乎怎么知道那么多知识呢?米国人当然看Quora啦,Quora是一个问答社交软件,问答社交的特点就是有各种各样的计数器,比如帖子的支持.反对.评论数量,用户的关注.粉丝数量等等 ...

  2. 2016美国大选数据分析

    2016年美国大选Trump数据分析: 案例题目:分析随时间推移的民意调查趋势,提取特朗普/克林顿的选票比率. 数据来源:https://www.kaggle.com/fivethirtyeight/ ...

  3. 【数据分析学习笔记day09】数据分析实战案例:2016美国大选民意调查统计+2016年美国总统大选民意调查数据统计+示例代码1 +示例代码2:

    文章目录 2016年美国大选民意调查数据统计: 示例代码1 : 示例代码2: 2016年美国大选民意调查数据统计: 项目地址:https://www.kaggle.com/fivethirtyeigh ...

  4. 美本计算机专业,2016美国本科计算机cs专业排名

    1 Carnegie Mellon University卡内基梅隆大学 1 Massachusetts Institute of Technology麻省理工学院 1 Stanford Univers ...

  5. 2016美国计算机科学硕士,美国计算机科学硕士MS in Computer Science TOP10学校录取要求提醒...

    原标题:美国计算机科学硕士MS in Computer Science TOP10学校录取要求提醒 #1 Carnegie Mellon University,Pittsburg,PA M.S. in ...

  6. python 数据分析--2016美国竞选辩论可视化

    数据分析入门与实战  公众号: weic2c 从用python实现分析数据的一个完整过程.以下着重几个python的moudle的运用"pandas",""wo ...

  7. (翻译)2016美国数学建模MCM D题 翻译:测量协会信息网络的演变和影响

    PROBLEM D:Measuring the Evolution and Influence in Society's Information Networks Information is spr ...

  8. 2016美国计算机科学硕士,干货│给申请美国计算机科学硕士的战士们

    原标题:干货│给申请美国计算机科学硕士的战士们 干货 新闻 分享 活动 案例 写在前面 从2008年我拿到职业生涯中第一个哥伦比亚大学的计算机科学硕士录取开始,我就已经领教了这个专业的申请难度,默默地 ...

  9. lehigh计算机就业,2016美国大学计算机专业排名

    1.麻省理工学院Massachusetts Institute of Technology Cambridge, MA 2.斯坦福大学Stanford University Stanford, CA ...

  10. 2016美国总统经济报告:机器人就像蒸汽机革命

    人工智能(AI)领域的快速发展,将对社会带来重大的影响,这引发了许多激烈的争论.一些人认为,它将驱动经济增长,为改善生活质量带来数不清的机会.尽管我们相信那些最深的恐惧其实是夸大其词的,但认知技术这一 ...

最新文章

  1. 求数组中奇数偶数的个数
  2. html的css样式中表示后代选择器,html添加css——样式选择器
  3. Sql Server 连接池
  4. springboot根据环境装配配置文件、启动加载外置配置文件
  5. mysql几个timeout参数_MySQL中 timeout相关参数解析
  6. struts2.3.4 问题
  7. 2021-09-13Top-N 推荐系统,通常指的是个性化推荐系统,有别于热门推荐。
  8. Word中如何设置论文中的公式与序号
  9. mysql密码怎么解密_MySQL密码加密与解密详解
  10. javacv获取摄像头列表
  11. threejs学习05-OimoPhysics模型的物理特性
  12. 2018年需要记住的5个区块链事实
  13. install pecl php_Linux下 PHP 安装pecl_http方法
  14. mtk+android+wear,MTK专用处理器--可穿戴
  15. window.onload用法
  16. 【数据说第二期】联盟第一人詹姆斯四个时期大PK
  17. 示波器播放Bad apple坏苹果教程XY模式
  18. 专访中国信通院云大所栗蔚:ChatGPT的成功揭示了云计算作为数字世界“中枢神经”的价值
  19. iOS 如何在一个已经存在多个project的workspace中引入cocoapods管理第三方类库
  20. Rust之包,箱和模块管理(四):用use关键字引用其他包

热门文章

  1. 服务器上的数据库文件夹下,服务器怎么打开数据库文件夹下
  2. mysql数据库+查询+sequence_MySQL数据库InnoDB存储引擎Log漫游
  3. Python让繁琐工作自动化——chapter14 处理CSV和JSON数据
  4. mnist tensorrt 运行_TensorRT学习笔记(三)
  5. 帆软模板中tooltip 提示框的使用
  6. 帆软高级函数应用之层次坐标函数
  7. 如何确定地址_小规模公司注册地址 创业者该如何选择
  8. 力扣题目系列:474. 一和零
  9. securecrt修改mysql密码_在CentOS下Mysql5.5的密码修改
  10. JavaWeb19-HTML篇笔记