Google大数据:怎样构建一支足球队完美球队

译者: MrFatPumpkin 原作者:Derrick Harris
谷歌借助强大的计算技术和先进的算法模型构建起了强大的神经网络,大大提高了包括图片搜索在内服务的质量,证明了谷歌在大数据领域依然保持着相当的领先优势。
谷歌图片搜索正在变得越来越好用——这样的进步很大程度上可以归因于谷歌专门为此开发的机器学习系统。正如我们所料,Jeff Dean为这个系统作出了相当多的自己的贡献。
我们常常会询问这样一个问题:“谁将成为大数据时代的‘谷歌’?”然而唯一看起来令人能够信服的答案是:“大数据时代的‘谷歌’,依然将是谷歌这家公司。”没错,谷歌从表面上来看,只是一家提供web服务的企业;可是谷歌早在十多年前,就已经站在行业前沿,试图利用数据来构建产品了。而且他们在这一领域前进的脚步看起来丝毫没有停下来的迹象。
谷歌搜索,谷歌广告,谷歌翻译,Play 音乐,谷歌趋势,以及谷歌更多的其他产品,都无法离开海量数据的支撑而存在。但这些数据本身还不足以铸就伟大的产品——产品还应该能以一种高效而可靠的方式展现数据,并逐渐变得更加智能化。借助强大的基础设施和优秀的信息系统,这一切成为了现实——而这也正是谷歌最为自豪的领域之一。
就在本周三,这家公司再一次向世人展现了他们的专业精神。在一篇博客中,谷歌揭示了他们提高用户图片搜索服务质量的秘诀:他们为此专门在搜索系统中“训练”了一批神经模型。谷歌在下文的叙述中详细解释了整个的事件,以及他们最终找到的好方法(这一方法源自于ImageNet竞赛的获胜队伍)
“我们构建并训练神经模型的方法,与获胜队伍使用软件系统训练由Jeff Dean和Andrew Ng主导谷歌开发的大型神经网络的方法是相似的。这些模型在评估中给我们留下了十分深刻的印象。根据我们的测试结果,我们发现使用这种方法的平均准确率几乎是之前尝试的其他方式的两倍。”
“我们为何现在取得了成功?因为我们不论在计算机性能还是在算法上,都有了长足的进步。首先,计算机的性能正变得越来越强,这让我们使用更多数据来训练一个规模更大的神经网络成为了可能。十年之前,即使只在一张图片上运行如此复杂的神经网络也是一个大任务;而现在我们已经可以将其运行在超过10亿张图片之上了。其次,新的神经网络训练技术也使我们实现规模更大、层次更深的神经网络成为了可能,而这对图片识别来说是必需的。”
毫无疑问,谷歌已经实现了训练大规模神经网络的系统。意料之中的是,Jeff Dean也参与其中。
对我来说,Dean是即将带来的Structure大会(于6月19日到20日在旧金山举行)中最耀眼的明星。我准备届时坐在他身边和他聊聊谷歌当前构建出的很棒的系统,以及未来还将推出的创新成果。或许我们还会聊到假如成为互联网上的春哥(原文:Chunk Norris)之后,生活会变成什么模样。
从工程学的角度来说,Dean也是web网络不长的历史中最重要的人物之一。他协助发明了MapReduce——这是谷歌早期搜索引擎背后的平行计算处理引擎。他也是MapReduce论文的主要作者,而Hadoop的发明正是直接受其启发。Dean也在许多其他重要的谷歌系统研发中担任重要职位,比如BigTable分布式数据存储(这是NoSQL数据库,比如Cassandra, HBase, 美国国家安全局数据库等等的后台处理基础)和被称为Spanner的全球分布式事务型数据库。
假如你并不是一名大数据或web系统的专家,那么通过了解Dean所做的工作,你可以窥探到这些领域最核心的部分。当我询问Hadoop的创造者Doug Cutting,Hadoop在未来在哪儿时,他希望我能关注一下谷歌这家公司:
“(谷歌)他们通过发表的技术论文,已经给我们带来了明确的信号。”Cutting说,“因而我们也可以预见,即将到来的,究竟是什么。”
转载请注明来自36大数据(): &
除非特别注明,本站所有文章均不代表本站观点。报道中出现的商标属于其合法持有人。请遵守理性,宽容,换位思考的原则。刘奇:如何使用HBase构建NewSQL?-CSDN大数据
刘奇:如何使用HBase构建NewSQL?
目前主流的数据库或者NoSQL要么在CAP里面选择AP,比较典型的例子是Cassandra,要么选择CP比如HBase,这两个是目前用得非常多的NoSQL的实现。我们的价值观一定认为未来是分布式的,一定是尽量倾向于全部都拥有,大部分情况下取舍都是HA,主流的比较顶级的数据库都会选择C,分布式系统一定逃不过P,所以A就只能选择HA。现在主要领域是数据库的开发,完全分布式,主要方向和谷歌的F1方向非常类似。目前看NewSQL代表未来(Google Spanner、F1、FoundationDB),HBase在国内有六个Committer,在目前主流的开源数据库里面几乎是最强的阵容。大家选型的时候会有一个犹豫,到底应该选择HBase还是选Cassandra。根据应用场景,如果需要一致性,HBase一定是你最好的选择,我推荐HBase。它始终保持强一致,我们非常喜欢一致性,丧失一致性的时候有些错误会特别诡异,很难查。对于Push-down特性的设计其实比较好,全局上是一个巨大的分布式数据库,但是逻辑上是分成了一个个Region,Region在哪台机器上是明确的。比如要统计记录的条数,假设数据分布在整个系统里面,对数十亿记录做一个求和操作,就是说不同的机器上都要做一个sum,把条件告诉他要完成哪些任务,他给你任务你再汇总,这是典型的分布式的 MPP,做加速的时候是非常有效的。2015年HBaseConf 上面有一句总结: “Nothing is hotter than SQL-on-Hadoop, and now SQL-on- HBase is fast approaching equal hotness status”, 实际上SQL-on-HBase 也是非常火。因为 Schema Less 没有约束其实是很吓人的一件事情,当然没有约束也比较爽,就是后期维护十分痛苦,规模进一步扩大了之后又需要迁移到 SQL。现在无论从品质还是速度上要求已经越来越高,拥有SQL的同时还希望有ACID的东西(OLAP一般不追求一致性)。所以TiDB在设计时就强调这样的特点:始终保持分布式事务的支持,兼容MySQL协议。无数公司在SQL遇到Scale问题的时候很痛苦地做出了选择,比如迁移到HBase,Cassandra MongoDB已经看过太多的公司做这种无比痛苦的事情,现在不用痛苦了,直接迁过来,直接把数据导进来就OK了。TiDB最重要的是关注OLTP,对于互联网业务来说通常是在毫秒级内就需要返回一个结果。我们到目前为止开发了六个月,开源了两个月。昨天晚上TiDB达到了第一个Alpha的阶段,现在可以拥有一个强大的数据库:支持分布式事务,始终保持同步的复制,强大的按需Scale能力,无阻塞的Schema变更。发布第一个Alpha版本的时候以前的质疑都会淡定下来,因为你可以阅读每一行代码,体验每个功能。选择这个领域也是非常艰难的决定,实在太Hardcore了,当初Google Spanner也做了5年。不过我们是真爱,我们就是技术狂,就是要解决问题,就是要挑大家最头痛的问题去解决。好在目前阿里的OceanBase给我们服了颗定心丸,大家也不会质疑分布式关系型数据库是否可行。TiDB名字由来为什么叫TiDB?大家起名字的时候特别喜欢用希腊神话里面的人物,但几乎所有的希腊神话人物的名字都被别的项目使用了,后来我们就找了化学元素周期表(理工科男与生俱来的特征),化学元素周期表里找到一个不俗且又能代表我们数据库特性的元素-Ti 。Ti是航空航天及航海里面很重要的设备都会用到的,特别稳定,也比较贵。TiDB的系统架构图TiDB怎么支持MySQL这个协议?这里会有一个协议解析层,它的作用就是去分析MySQL协议,转成内部可以识别的分发给自己的SQL Layer。当SQL Layer 拿到这个语句之后会把它拆成对应的分布式KV操作,所以这里会有一个Transactional KV Storage。接下来是在KV基础上增加事务的支持,再往上是普通的KV操作,理论上KV选什么都可以,如果选的是HBase有一个好处,它本身就是分布式,省掉分布式的工作。目前我们在小米的Themis基础上做了些优化和改进,和我们TiDB做了一个很好的结合。后期我们有一个计划,准备自己重写一套底层的分布式KV,把HBase换掉。因为HBase对于Container不友好,加上GC也是让人比较讨厌的问题,压力比较大的时候GC延迟会加长。Google Percolator实现方式HBase上面分布式事务典型的设计,先来说一下Goolge Percolator 内部实现,看架构图:Goolge Percolator内部实现分布式事务基本设计是在上面这个 Percolator层,Timestamp Oracle 可以保证严格的递增。Percolator是在KV上的实现,它对于SQL的角度考虑比较少,有一个隔离级别的问题,很典型的是Snapshot Isolation, SQL 语句落在KV上的实现,如果只有Snapshot Isolation的话隔离级别就太低了。此外,这个模型还有其它的问题。比如,它每秒能分配多少个递增的Timestamp?Google分享的一个slides的数据,每秒200万,小米也开源了自己的实现,每秒60万,我们前一阵也写了一个每秒400万,优化一下可以达到800万。因为Timestamp业务特别简单,所以可以做针对性的优化,当然很少有业务能跑到这个级别的事务。Yahoo OMID的实现雅虎的OMID实现,架构图如下:雅虎的OMID实现除了Timestamp的职能,TSO还维护更多信息用于检测事务冲突。TSO是整个Omid系统的单点,如果一个系统只需要一个单点,单点做得越少就能获得越多的性能,也更容易优化。下图是它的分布式事务的执行过程:假设现在要发起一个分布式事务,第一个事情是拿Start TS,再去做你的读写操作,做读写操作的时候会把Key都记下来。Commit的时候要先冲突检测,这就是TSO 要做的更多的事情,更具体的细节请参考Omid 的论文或者 &&从零开始写分布式数据库&&一书。谷歌的Spanner,细节非常多,引用的论文有40多篇,很吓人,有些引用的论文也非常经典,很值得一读。Spanner已经不再使用NTP了,需要用一个有信心的靠谱的方式来同步时间。内部也说不再用NTP做时间的维护,GPS是非常简单便宜的方式,GPS是大家使用滴滴打车时用于得到定位信息的。GPS还给了当前精确的时钟信息,有软件可以把这个检测出来,可以直接使用它的这个信号来同步时间。使用GPS信号的好处很明显,随便在哪个山区都有GPS信号,但不一定能收到基站的信号,同时它的精度也非常高。TiDB的技术选型再来说说TiDB的一些技术选型的例子。选择MySQL协议后会做一些取舍,有些地方不完全按Google F1去做设计的。Google F1里做的比较好的是非常经典的Non-blocking schema changes。比如现在要加一个索引,如果横跨数十台机器,数十亿条记录,加索引的速度是非常慢的,那么这个过程必须是不阻塞的,不影响正在运行的业务的。因为在建立索引的同时需要修改别的地方,所以要做一个原子的提交,细节上还要处理事务冲突的错误。F1有并发的图,我们刚才提到HBase里通过Push-down可以把一些计算下推到对应的节点上去。但由于F1依赖Spanner,而Spanner会频繁地做Reblancing,会把数据不断的移动,所以它在上面很难基于range信息一次做最优的决策。SQL如何映射分布式KV?SQL到底是怎么映射到分布式KV上?现在HBase分层分得更加清楚,SQL层不太关心下面到底用什么,在乎的是接口。映射的过程,假设User Table里面有个Email,我们存储的时候是用ID做它的标识,这有很多的好处,比如删掉再重新添加一样的,它要生成不同的ID。在数十亿条记录的情况下删除一个Table,删除的过程完全可以由Map-Reduce异步去做。为什么提供MySQL协议的支持?如果重新写一个数据库会遇到一个很大的问题,大家凭什么相信你是对的,数据库需要时间需要测试,好在你接入MySQL协议,你可以经过和MySQL一样严谨的测试。但如果是自己完全写一个,不借用它的协议,不借用它的语法,没有测试,大家凭什么相信你是对的。现在这个时代没有Communit是很可怕的,闭门造车很容易走偏。TiDB现在可以让用户一行代码都不改,跑WordPress等,还支持很多的ORM,这些ORM可以直接用,用户的代码一行不改可以直接迁过来,完全拥有水平扩展的能力,完全拥有分布式事务的支持。前TiDB在Github上2800+star。个人简介:刘奇,开源分布式数据库TiDB创始人,Codis项目创始人,分布式系统专家。曾任豌豆荚,京东资深系统架构师。同时也是知名的Go语言专家和Redis专家。现从事开源的分布式NewSQL数据库TiDB(受Google F1启发)的开发。擅长高并发、大规模、分布式数据库系统架构设计,微博(@goroutine)。
本站内容来自网友分享,如果侵犯了您的权益,请告诉我们!QQ:

我要回帖

更多关于 权健为孙可买一支球队 的文章

 

随机推荐