Google的背后藏了什么?

Google Earth 背后的故事 Google Earth 可以说是最知名和最广泛使用的地理信息系统 (GIS) 软件。它能够创建、存储、查看与位置相关的数据并与之交互。凭借其多用途设计和广泛的工具集,该软件针对跨越教育、政府、房地产、媒体、保险和建筑的多元化用户群,以及一群忠诚的私人消费者。Google Earth 最初被称为 Keyhole,该产品在初创公司被谷歌收购后更名为 Google Earth。在被收购之前,Keyhole 已经从 CIA 的风险投资部门 In-Q-Tel 获得了大量资金。 阅读详情

最近在研究搜索引擎的一些相关技术,并且也阅读了一些Google的相关文章,对Google的神秘感也消退了一些,不过也深为google对技术运用的技巧所折服。在这接下来的几篇文章中,我想总结一下我对Google后台架构和技术的认识,如果见解上有什么差错,请大家指正。

1. Google的背后究竟有什么?

    Google这个搜索巨人,有人评价说,其互联网的技术至少领先微软2年,但这个自然不得为证,但是在研究过它后台的相关技术,我们的确不得不承认,google在技术上的利用和创新上的确是一个王者。Google的后台,总的来说,有几个大部头。

1)GFS

    这是google自己开发的分布式文件系统。鉴于自己要处理海量的数据,而且轻则GB,TB的数量级别,所以,采用数据库显然是非常昂贵的开销,google针对自己的需要的特点,专门有目的性地开发了这个文件系统。这个文件系统,是Google所有存储相关的基础。

    GFS简单来说,有两个部分,一个是Master,一个是ChunServer。Master可以理解为一个总控主机,而ChunServer,则是一系列的主机,存储实际上的数据,并且接收Master的监控。所以,这是一个(1:many)的关系

    在GFS系统中,一个基本理念是:尽量处理大块数据,并且尽量优化大块数据的处理(这是由Google自身的特点所决定的,它的这个系统,根本就是度身定做的),而不去优化小块数据的处理。所以,一个基本的处理单位,是64MB,这就是文件块(Chunk)的概念。一个ChunkServer上面会有很多的Chunk(数据块),这些数据块都是64MB大小,由ChunkServer负责读写。

     从职能上来说,Master维护的信息,就好像是普通pc机的目录表,它记录了所有的chunk块的位置(即对应的chunk Server的地址,如IP:PORT),这样做的基础,是每一个chunk块由一个全局性的GUID,着同样是由Master在创建这个文件块的时候分配的。所以,当用户需要进行操作的时候,会先去Master主机获取对应的目录信息,得到对应的ChunkServer,然后,真正向ChunkServer读写数据。

     那么,master是如何管理这些chunkServer的呢?google的做法非常简单直接。master不会存储chunkserver的信息,而是在每一次启动的时候,向cluster中的所有chunkserver发送指令,由所有的chunkserver自动汇报自己的信息,包括自己有的数据块对应的GUID等,运行状态等,这些数据将会存放到master的内存中(不是硬盘),而master在启动之后,内存中不久就会有所有chunkserver的数据,之后,它会定期去发送消息到chunkserver,以确保这个chunkserver还处于工作状态,通过这种方式,能够及时发现down掉的机器,并且执行容错处理(下面还会细讲)。而当加入新的机器上,只需到master注册一下,新的机器立刻可以加入cluster开始工作,这就是其可扩展性的伟大之处。

    那么GFS是如何容错的呢?实际上,每一个chunk数据块有3份拷贝,一份down掉,则GFS会立刻通过另外两份快速进行恢复。通过这种方式,可以把出错的几率降低到一个几乎可以忽略的程度。

    另外,值得一提的是,GFS的客户端,它和master通信的数据,只是传递控制信息,比如获取目录即chunkserver地址,但是数据传输不会经过master,而是直接和chunkserver通信,这种方式,可以大大降低master的负载,并且容易做到全局负载均衡。

    而google的GFS与普通的DFS或者NFS有什么不同呢?我想,主要有下面几个点:

   1. GFS针对特定的应用,特别是数据块方式的文件存储,特别适用于大量数据读操作的环境。

   2. GFS吞吐率是放在第一位的,即使GFS整体吞吐率最大,但是并不一定兼顾到单次访问的延迟时间。

 

  今天先把GFS介绍到这里,改天继续会和大家谈MapReduce和Bigtable, 以及Google的后台整体框架等。:)

 

 

 

FPGA新手必看:XC7Z020最小系统搭建全攻略(附原理图解析) 本文为FPGA新手提供了XC7Z020最小系统搭建的完整实战指南。文章详细解析了电源架构、时钟复位、配置调试等关键硬件电路设计,并重点剖析了外围电路与端口引脚的连接要点及常见陷阱,帮助读者从零开始构建稳定可靠的开发平台。 阅读详情

相关推荐

达梦--利用存储过程与定时任务实现数据自动迁移

本文详细介绍了在达梦数据库中如何结合存储过程与定时任务实现数据自动迁移。通过一个电商订单归档的实战案例,阐述了从设计表结构、编写具备异常处理和幂等性的存储过程,到配置DBMS_SCHEDULER定时任务的全流程。该方法能有效替代手动脚本,确保数据同步任务的稳定、准确与自动化执行,适用于报表准备、数据备份等多种场景。

weixin_29261711的博客 430

藏在Google OS背后的野心

首先,本文只是对Google 发布OS及笔记本的一点看法,对于任何公司和个人都无冒犯之意,激进者请出门左拐去菜市场。        随着Google笔记本的发布,Google也渐渐揭开Chrome OS神秘的面纱。Chrome OS核心的部分,就是一个功能强大的Chrome浏览器,一切的工作,娱乐,社交等应用都在网络上,都在Chrome浏览器中。        然而我们仔细审视一下Google笔记本,抛开Google这个让人感到神秘而强大的商标,它只是一个性能普通的笔记本。再看看Chrome OS,一个新生

Son of a bit. 的专栏 767

DOA估计算法从原理到仿真——CBF、Capon、MUSIC算法

从原理出发理解并实现经典的DOA估计算法

m0_55845774的博客 1万+

Google 工程师开发爆火开源工具后被解雇,背后竟藏着这些隐情?

但这触碰到了 Google 的敏感神经,Workspace 是 Google 重要的生产力产品,拥有超 30 亿用户,是企业订阅重要收入来源。然而,所有人都没想到,项目爆火后不久,Justin 就收到了 Google 的解雇通知,一款让开发者社区拍手叫好的产品,最终成了他的 "离职通知书"。

EveningTalk的博客 35

YOLO详解

本文参考知乎 https://zhuanlan.zhihu.com/p/25236464 1. YOLO的创新点 YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出。 从网络设计上,YOLO与two steps的目标检测方法如RCNN、Fast RCNN和Faster RCNN的区别如下: YOLO训练和检测均是在一个单独网...

UnknownPlayer的博客 9945

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 264

你写的6行Keras代码背后,藏着Google一场持续10年的系统工程革命

这是TensorFlow设计中最巧妙的部分之一。一个MatMul操作,在CPU和GPU上有不同的OpKernel实现// 文件路径:tensorflow/core/framework/op_kernel.h(结构示意)public:// 核心计算函数// 注册:同一个MatMul,CPU和GPU用不同实现这意味着什么?你写的同一行,在CPU上用Eigen库执行,在GPU上用cuBLAS执行——你完全不用关心底层差异,TensorFlow替你选最优的实现。设计模式解读。

zhengliebin的博客 314

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7832

Google背后的开源力量

从《全球著名互联网企业背后的开源力量》文章中可知,目前开源软件已经成为了各大互联网企业背后的支撑力量,并逐渐改变着世界软件开发的格局。 [企业开源系列]系列专注于全球著名企业(包括国内企业)中的开源现状,探讨开源软件的力量,以使更多的开发者了解开源、贡献开源,打造更加和谐的国内开源生态。 本期先来了解Google背后的开源力量。 在企业使用开源和贡献开源方面,Goog

MyDriverC 992

6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go)

6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go)

算法大师! 436

基于Python实现身份证信息识别

身份证是一种重要的证件,包含了个人的基本信息,如姓名、性别、出生日期、住址等。在实际应用中,有时需要对身份证进行自动化的识别,以提高工作效率和准确性。本文将介绍如何使用Python实现身份证信息的识别,通过图像预处理、OCR技术和解析算法,实现对身份证号码和其他信息的提取和解析。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

google背后的分布式架构

您还未登录 ! 登录 注册 群组首页 → 互联网 → 大网络 → 论坛 发表回复 google背后的分布式架构 dogstar 2008-05-29 Google背后的分布式计算架构策略 Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用 (比如那个大堂里的地球模型

junecau的专栏 1728

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

探索Google App Engine背后的奥秘

探索Google App Engine背后的奥秘(1)--Google的核心技术   探索Google App Engine背后的奥秘(2)--Google的整体架构猜想   探索Google App Engine背后的奥秘(3)- Google App Engine的简介   探索Google App Engine背后的奥秘(4)- Google App Engine...

过客阵营 -- 简单的就要最简单 165

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[视频]Google Chrome背后的故事

 Google为什么要开发浏览器Chrome?Chrome有着怎样的功能和特点?Google Chrome的目标是什么?请看这段由Google Chrome开发工程师所讲述的“Google Chrome背后的故事”。1顶一下<!--google_ad_client = "pub-9066977823953139";google_alternate_color

小发猫 867

探知Google员工离职背后的故事 称Google无创新

导读:原Google员工James Whittaker在msdn发表博文《Why I left Google》,文中他谈及他离开Google背后的故事。并对比旧Google与新Google之间的区别,还称Google已抛弃创新精神,而一味的偏向广告,不再是一家技术公司。以下是文章内容: 每个人都想知道我为什么离开Google,我在文章中会给大家一个满意的答复。文章内容属实,不带有

zhangqii1的专栏 804

Google 网页排名背后的技术

Google 网页排名背后的技术 var ReTitle = 回复:Google 网页排名背后的技术; 感谢35公里的投递这是 Google 工程师 Amit Singhal 发表在 Google 官方博客的一篇文章,讲述了 Google 搜索排名背后的一些技术,涉及到 Google 对网页,对语义,对用户意图的理解。Google 搜索排名的核心技术源自已有50年历史的学术

ckecom的专栏 216

GOOGLE:单一模式背后

很难想象,支撑Google庞大搜索工程,竟然是一种非常单一的搜索主题,以及非常简洁的广告模式。   表面上,Google符合一家成功了的技术公司的一切典型特征:公司创始人年纪轻轻就已成为亿万富翁;员工人数在3500人左右;想要进入这家公司的人挤破了门槛。然而,Google的真正内质却与别的完全不同。Google以搜索引擎发家,到目前为止,这家公司的几乎所有业务都是围绕这一中心展开的。令人矛盾的是

1572

揭秘Microsoft Bing与Google搜索背后的故事

导读:Google搜索引擎已经赢得全球范围的赞誉,而这一切都要归功于Google开创性的MapReduce。Google搜索引擎算法只是其搜索引擎的一部分,在后台支持Google算法的基础设施才是真正的幕后英雄,其基础设施可快速的索引链接成千上万台普通服务器。MapReduce的成功也直接推动了Hadoop的发展。现今从Facebook、Twitter、eBay、LinkedIn以及eB...

di0808的博客 363

[置顶] 探索Google App Engine背后的奥秘

探索Google App Engine背后的奥秘(1)--Google的核心技术   探索Google App Engine背后的奥秘(2)--Google的整体架构猜想   探索Google App Engine背后的奥秘(3)- Google App Engine的简介   探索Google App Engine背后的奥秘(4)- Google App Engine的架

vb2005xu的专栏 359

Google地图之野望:你所不知道的背后故事

Google地图堪称人类智慧的结晶。举个例子,你要从美国西海岸的 San Francisco横跨美洲大陆到东海岸的Boston,只需用Google地图搜索一下即可。然而,在你开着车一路畅通无阻地享受Google地图的优质服务的时候,你是否会想:“这帮家伙是怎么做出这样的产品的”?近日,Google就向《The Atlantic》高级编辑Alexis C. Madrigal独家披露了Google

雷锋网 1504

LAMMPS dump_modify 命令完全指南:灵活调控 dump 输出的核心工具

> 本文以 [doc/src/dump_modify.rst](https://link.gitcode.com/i/cdb94e60a9ac43d3adc4cfb158fa0491) 为骨架,系统讲解 LAMMPS 中 `dump_modify` 命令的全部关键字与用法。`dump_modify` 用于修改此前由 [dump](https://link.gitcode.com/i/e5e8f88

gitblog_00914的博客 253
下一篇: Google的Bigtable
koder2009
博客等级 码龄18年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值