来膜拜下 Google 的全球化网站架构

news/2024/5/20 15:11:24/文章来源:https://blog.csdn.net/UW63ZqpKxwlRL1/article/details/82229901
这是 Google SRE 工程师在2018年5月的一篇分享。本文大致的介绍了 Google 整个网站的 infrastructure,以及代码发布流程。而更详细的细节,可以阅读 Google 出的《Site Reliability Engineering》这本书。


640

原视频 Google Tech Talk 的链接:https://youtu.be/dhTVVWzpc4Q


网络层


  • Google Edge network,是 Google 分布全球各地的服务器网络Data Center 通过国际骨干网 B4 连接


  • Data Center 内部使用 Jupiter 连接。Jupiter 可以把多个交换机(一般是几百个)虚拟成一个交换机。Jupiter 的带宽大约是 1.3PB/s


  • 一个发给 google 的 web request 通过 edge network 之后,到达 Google frontend (GFE)。GFE 进行 reverse proxy (反向代理),将 request 发送给内部 service


  • Global software load balancer (GSLB)在三个层面做 load balance

    • 地理位置层面的 load balance,比如发往 google.com 的 request

    • 针对不同产品的 load balance,比如 google maps, youtube

    • RPC load balance


所以,用户浏览 google.com 时,request 通过当地的 ISP,到达 Google edge network,到达 GFE,然后通过 GSLB 进行 load balance,然后通过Jupiter,转送到 service。整个过程的耗时在 ms 级。


Data Center


640


Data Center 的层级关系是:


  • 一个 campus 可以有多个数据中心。campus 类似于 region 或 availability zone 的概念。图中展示的是一个 campus,包含两个 data center

  • Data center 有多个 cluster。图中每个 data center 有两个 cluster ,用方形表示。

  • cluster 有很多排(row)

  • 每排有很多服务器机架(rack)

  • 每个机架上有很多台机器 (machine)


Campus > Data center > Cluster > Row > Rack > Machine


Cluster 的管理


640


Cluster 需要高效地管理里面的服务器资源。 Google 内部,有 job 的概念。每个 job 有很多子 task(关于 job 和 task 的概念,可以参考之前 Netflix Titus 架构 部分的内容)。job 还定义了期望使用多少资源。


工程师们使用内部软件运行 job。job 被发送给 Borg (Borg 是 Google 内部的容器管理工具,暂时未开源)。Borg master 询问 scheduler 应该由哪几台机器来运行 job。得到回应后,将请求发给指定的机器 Borglet,开始运行 job。如果job 失败,应该会被自动重新运行。


Google 使用 Borg name service (BNS)来定位服务器上的 task。格式是  /bns/<cluster>/<user>/<job name>/<task number>。


BNS 地址需要映射到 IP:port 地址,并且保证同步。


Lock service


640


这个 BNS 映射到 IP 的信息,存储在另一个内部服务 Chubby 中。Chubby 是一个分布式系统中的锁服务,它下面还提供一个可以用类似 API 方式操作的文件系统,并使用 Paxos 算法来实现各个服务器之间的异步一致 (asynchronous consensus)。这个映射信息就是在 Chubby 里面。


存储系统 storage


640


  • HDD + SSD:在存储系统的最底层,是机械硬盘和固态硬盘。

  • D:意思是 disk,用来管理 HDD + SSD。D 提供的服务是存储临时数据,主要是给运行中的 job 使用。

  • Colossus 是基于 google file system 开发的分布式文件系统,运行在 cluster 之内,支持永久保存数据,支持复制、加密等等。

  • Bigtable 是一个NoSQL 数据库。Bigtable 可以保存有序的数据。在 cluster 之间进行复制时,bigtable 保证 eventually consistent。

  • Spanner 是一个 NewSQL 数据库。旨在实现具有 NoSQL 一般可扩展性的关系型数据库。

通过 Borg, Google 将服务器集群实现的和单独一台电脑一样,可以运行 job 也可以存储数据。但是分布式系统会面临机器损坏的情况。举个例子,如果一个job 运行到一半,机器坏了,怎么办?


Monitoring


640


上面那个问题是通过监控的办法解决的。 Borgmon 是 Borg 的监控工具。图中, Borgmon 存在于很多层级。Borgmon 获取各个 task 的运行状态信息,然后最后向上汇总到 global borgmon。而 cluster borgmon 除了把信息汇总给 global borgmon,还发送给 google 的 time series database (时序数据库)以及 alert manager 警报系统。例如当某个 cluster 的错误率异常高的时候,会触发警报。


还有一个辅助工具 Prober ,负责给 task 所在服务器发送请求,并监控响应时间。这是从另一个角度观察服务器的健康状况。Prober 也将信息汇总给 borgmon。


Inter-task communication 任务之间的通讯


task 和其他 task 之间进行通讯使用 Stubby。Stubby 是一个 RPC(远程进程调用) 服务,基于 http,使用 protobuf 协议。或者可以简单的说,task 之间使用 protobuf 进行 RPC。


从代码到 production


640


Google 以他们使用 mono repo 出名。他们的代码管理工具叫做 Piper(类似于 git)。到2016年为止, Piepr 管理了10亿文件,20亿行代码,9百万个源码文件,总过大约 86 TB 的数据,3500万次 commit。


当提交代码时,工程师写一份文档 changelist,会有其他工程师使用 Rietveld 做 review,项目管理者最终同意发布。提交代码到 code repo 时,系统会自动运行一个presubmit check检测。比如静态代码分析等。 检测通过后,代码进入 repo。


代码提交成功后,Blaze (Google 的 build tool,它的开源版是 Bazel)将代码编译成二进制文件。Blaze 的使用,需要工程师指定 build 的 output 输出,dependencies 依赖等等。


另一个工具 Continuous testing,从 repo 获得最新代码后开始运行自动化测试。通过后,一个叫 Rapid 的工具会调用 Blaze 来生成 MPM (Midas Package Manager)package。MPM 给软件加上名字、版本号,以及签名以确保软件的 authenticity。最后 MPM package 被 Sisyphus 部署到 production。Sisyphus 是 google 的 deploy 工具,可以做 deploy 过程中很多复杂而又繁琐的工作。并且可以指定 deploy 的方式,比如是立即通过 canary 的方式 deploy,还是指定未来某个时刻 deploy。


总结


所以,假设说工程师开发一个功能发布到 Google 上,整个流程和期间用到的工具是:


  • Piper 做代码提交, Blaze 做 build

  • Rapid 编译成 MPM

  • 运行: Borg,间接使用 Chubby

  • 用户的请求:通过 edge, GFE, B4, GSLB, Jupiter 到达 google 里某台服务器

  • task 之间通讯:Protobuf,Stubby

  • Spanner 作为数据库,保存数据

  • Borgmon 和 Prober 做服务器监控

  • 未来发布新功能,使用 Continuous testing,Rapid,Sisyphuys

本文转载自【架构之路】
公众号内回复“1”带你进粉丝群640?wx_fmt=gif

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

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

相关文章

因在公司上不正经网站,我没过试用期…

本文转载自程序员石头&#xff0c;作者 石头哥 最近浏览到一个知乎问题&#xff1a;某运营同学在试用期期间因为在工作期间上了某个网站&#xff0c;导致试用期不过。 前两天还看到不少推文&#xff0c;大意是&#xff1a;看小电影前一定要注意网址是不是 HTTPS 的&#xff0c;…

点击“我不是机器人”后,网站到底怎么知道你真的是人?

本文转载自腾讯网&#xff0c;大部分人可能都被Google要求做过这样奇怪的保证&#xff1a; “我不是机器人”。 只要你经常使用一些国外的网站&#xff0c;它就会隔三差五地弹出这个对话框&#xff0c;要求你点击来“声明”自己不是机器人。 以前这种“证明自己是人”的环节里…

帮年轻人 “规划身后事”,这家网站获千万融资

本文转载自IT之家&#xff0c;2020 年 4 月的一天&#xff0c;24 岁的伊莎贝尔撰写了一条未来她将从坟墓中发来的推文。她并没有即将就要逝去&#xff0c;甚至也根本没有生病。 伊莎贝尔被一种新的互联网服务「种草」了。她在网上看到了一些帮助人们「规划身后事」的网站&…

底层小程序员 练手做一个网站不小心赚了几十亿

微信又改版了&#xff0c;为了方便第一时间看到我们的推送&#xff0c;请按照下列操作&#xff0c;设置“置顶”&#xff1a;点击上方蓝色字体“程序员之家”-点击右上角“…”-点击“设为星标”。可以啦&#xff0c;让我们继续相互陪伴。人们都说互联网是个神奇的领域&#xf…

8个程序员专用软件/网站,个个是神器,第一个最惊喜......

微信又改版了&#xff0c;为了方便第一时间看到我们的推送&#xff0c;请按照下列操作&#xff0c;设置“置顶”&#xff1a;点击上方蓝色字体“程序员之家”-点击右上角“…”-点击“设为星标”。可以啦&#xff0c;让我们继续相互陪伴。节省时间的方法有俩&#xff0c;一个是…

相亲网站男生都是一个人,单身程序员惊现神操作!!

微信又改版了&#xff0c;为了方便第一时间看到我们的推送&#xff0c;请按照下列操作&#xff0c;设置“置顶”&#xff1a;点击上方蓝色字体“程序员之家”-点击右上角“…”-点击“设为星标”。可以啦&#xff0c;让我们继续相互陪伴。话说&#xff0c;今年还有不到一个月就…

为网站引入今日诗词

今日诗词 API 是一个可以返回一句古诗词名句的接口。它可以通过图片和 JSON 格式调用。今日诗词 API 根据不同地点、时间、节日、季节、天气、景观、城市进行智能推荐。 官网&#xff1a;www.jinrishici.com <div id"poem_info"></div> <div id"…

搜免费电子书,怎么能少了这些网站!

链接&#xff1a;https://www.lifewire.com/download-free-books-3482754作为开发者多看点书还是应该的&#xff0c;要是想要看的书都能免费那就更好不过了&#xff0c;此前猿哥已经和大家分享过一些免费电子书&#xff08;下载/在线&#xff09;阅读网站&#xff1a;程序员专属…

Fastly道歉:软件漏洞导致全球大量网站宕机

本文转载自IT之家 北京时间 6 月 9 日下午消息&#xff0c;据报道&#xff0c;云服务提供商 Fastly 今日表示&#xff0c;导致昨日大量网站宕机的罪魁祸首是一个软件漏洞&#xff08;Bug&#xff09;&#xff0c;该漏洞由一家客户更改其设置后触发。 昨晚&#xff0c;全球大量…

黑客捣毁了个暗网杀手网站,却险些触发了世界各地的多起杀戮...

来源&#xff1a;https://mp.weixin.qq.com/s/qcQ4WDuBKy0ZbAn0G66zg几年前&#xff0c;伦敦的业余黑客Monteiro突然收到了一封邮件&#xff0c;邮件是一行粗体字&#xff1a;“自杀&#xff08;还是谋杀&#xff09;&#xff1f;”&#xff0c;邮件下面附了一个链接&#xff0…

Python爬取网站图片数据

Python爬取网站图片数据 找到需要爬取的网站地址 模拟网站http请求 根据调试模式获取的了解读取到真实的地址url&#xff0c;读取请求头数据和参数信息&#xff0c;模拟http请求调用 import requests from urllib.parse import urlencode # requests内置的状态码&#xff0c…

这个项目把100多个知名网站都克隆出来了!

本文转载自GitHub技术社区 今天要和大家推荐的这个开源项目牛逼了&#xff0c;把100多个热门网站都克隆出来了&#xff0c;还将源码通通开源&#xff0c;Airbnb&#xff0c;Amazon&#xff0c;Instagram&#xff0c;Netflix&#xff0c;Tiktok&#xff0c;Spotify&#xff0c;…

Python爬虫进阶之JS逆向某视频网站登录

很久没更新JS逆向方面的文章了,一个原因是因为最近爬虫这方面管的比较严,相信大家都看过很多违法的案例了,就不细说了。另一个原因是我换坑了,现在的工作内容基本上和爬虫不相关了。 不过大家请放心这方面的内容会持续慢慢…更新下去,当然还有web这方面的内容以及Python其…

Python爬虫进阶之某支付网站密码分析

目标网站 aHR0cHM6Ly9hdXRoLmFsaXBheS5jb20vbG9naW4vaW5kZXguaHRt 今日目标网站是我们常用的支付网站,感觉自己有点飘了~~ 这里只解密密码的加密方式,至于其他参数… 请求分析 先看请求,输入账号,密码后点击登录,记得提前浏览器打开 F12 这里注意输入错误的密码,方…

完成图书管理系统类图的绘制_智慧图书馆管理系统方案/APP/小程序/公众号/网站...

随着人们对图书需求的不断增加&#xff0c;以及图书馆数量的不断增加&#xff0c;传统的完全靠人工管理的图书馆已经难以适应时代发展的需求。传统的图书馆存在图书管理模式落后&#xff0c;找书困难&#xff0c;借还手续繁琐。图书资源有限&#xff0c;无法提高图书的流通率和…

wp网站想换个服务器怎么弄,wordpress服务器搬家和更换域名的几个步骤

问题解说其实wordpress换域名需要到数据库进行操作的&#xff0c;首先&#xff0c;你换域名也是有几种情况的&#xff1b;换空间换域名如果是上述问题&#xff0c;那么将FTP整站打包外&#xff0c;还需要将数据库里的所有数据表也打包&#xff0c;数据库是进phpmyadmin里打包的…

服务器 医疗网站,云服务器 医疗

云服务器 医疗 内容精选换一换云服务器组是对云服务器的一种逻辑划分&#xff0c;云服务器组中的弹性云服务器遵从同一策略。当前仅支持反亲和性&#xff0c;即同一云服务器组中的弹性云服务器分散地创建在不同的主机上&#xff0c;提高业务的可靠性。您可以使用云服务器组将业…

两行代码实现精简的网站访问量统计(不蒜子)

一、不蒜子简介 “静态网站建站现在有很多快速的技术和平台&#xff0c;但静态是优点也有缺点&#xff0c;由于是静态的&#xff0c;一些动态的内容如评论、计数等等模块就需要借助外来平台&#xff0c;评论有“多说”&#xff0c;计数有“不蒜”&#xff01;&#xff08;多说…

Chrome 插件下载网站+6个实用插件推荐

一、Chrome插件下载网站 1.https://crxdl.com/ 可以下载Chrome扩展插件CRX离线安装包 直接在搜索框输入想要下载的插件名或关键词即可搜索到相关插件&#xff0c;然后点击下载即可&#xff0c;该网站无广告&#xff0c;搜索速度快&#xff0c;下载速度快&#xff0c;全程操作丝…

基于大数据的网站日志分析系统

本文没有任何代码&#xff0c;只有各个模块工作的大体机制和整体流程。算是一个科普文吧&#xff0c;我也对原理一知半解。 基于大数据的网站日志分析系统1. 日志数据格式1.1 访问日志1.1.1 log_format1.1.2 access_log1.2 错误日志2. 数据采集模块2.1 Flume的运行机制3. 数据存…