架构师的修炼机器学习小组网络与信息安全

Stack Overflow 架构透视:(2) 硬件

2016-07-17  本文已影响201人  RiboseYim

翻译作品,水平有限,如有错误,请留言指正。
详细请见原作者Nick Craver Blog (May 29,2016)链接

这是关于Stack Overflow架构的一系列文章中的第二篇。
前一篇:《 Stack Overflow: 架构》(2016版)
后一篇:《 Stack Overflow: 我们是如何做部署的》(2016版)

有人对硬件感兴趣吗?好吧,我感兴趣,这篇博客就是关于这个话题,所以,我赢了。如果你不关系硬件,那么可以走开并关闭浏览器了。还在这儿吗?真棒。
假如你的网页访问非常非常慢,在这种情况下,你应该考虑采购一些新的硬件。

我曾今反复重申过多次:性能是一个重要组件。
特别是当你的代码必须在最快的硬件上运行,硬件的关系则越为重大。正如任何其它的平台,Stack Overflow的架构是分层的。硬件对我们来说属于基础层,它有自己的屋子,在很多情况下,对我们来说,它的许多关键组件是不可控的。。。就像运行在别人的服务器。它也伴随着直接和间接的成本。但是,这些不是本篇文章的重点,这方面的对比将于稍后报告。目前来说,我希望能提供一份详细的,关于我们基础设施的清单,用于大家参考和比较。

服务器照片。有时是裸设备。
这个网页可以加载得更快,但是我不能自禁。(言归正传)
在这个系列报告中我将提供大量数字和规格说明。
当我说“我们的SQL Server CPU利用率接近5-10%,” 好吧,这非常棒。
但是,5-10% 的什么? 这时我们需要一个参考值。这份硬件清单可以回答这些问题,并且座位与其它平台比较的依据,利用率对比如何,容量对比如何,等等。

How We Do Hardware

免责声明:我不是一个人干的。

George Beech (@GABeech) 是我的主要搭档,盘点管控Stack使用的硬件。
我们小心地规范每一台服务器,以使它符合设计意图。 我们不会只管下订单、分派任务。在这个过程中我们也不会自己单独完成;你必须知道将来这些硬件需要运行什么东西,才能做出合适的选择。我们将和开发工程师或者其他的可靠性工程师一道,为运行在盒子上的应用选择最佳方案。我们也关注在整个系统中什么才是最好的。每一台服务器都不是孤岛。如何将它嵌入到总体的架构中去,确实需要好好考量。哪些服务可以全平台共享?数据中心?日志系统?管理更少的事情,或者至少做到更少的差异,这件事本身就具有内在的价值。

当我们盘点硬件的时候,我们列出了很多规则来帮助我们厘清哪些是需要提供的。
我还从没有真正写下这些心里面的检查表,简短来说:

现在,让我们来看看服务网站的都有哪些硬件,它们位于纽约 (New York)QTS 数据中心。实际上,它位于新泽西(New Jersey),但是让我们保持这个约定。为什么我们称之为NY数据中心?因为我们不想重命名所有以NY-开头的服务器。(What ?!…)我将记录在下面的清单上,丹佛的情况,在规格和冗余级别上略有差别。

Hide Pictures (in case you’re using this as a hardware reference list later)

Stack Overflow & Stack Exchange

纽约数据中心

全局选项

先说明一些全局配置,在下面每台服务器的介绍里就不重复了:

网络

原作者备注: 每个 FEX 到核心 拥有 80 Gbps 上联带宽 ,核心通过一个160 Gbps端口通道与它们连接。由于最近的一些工程,我们位于丹佛数据中心的硬件会更新一些。所有4 台路由器的型号是 ASR-1001-x 和 双核 Cisco Nexus 56128P,每个都拥有96 SFP+ 10Gbps 端口 和 8 QSFP+ 40Gbps 端口。这些节省下来的端口,可以用于未来扩展,我们可以为核心绑定4x 40Gbps链接,替代每个 16x10Gbps端口的方案,正如我们在纽约做的那样。

这些就是纽约的网络设备情况。

SO-Hardware-Network-NewYork-Fiber-Small.jpg
SO-Hardware-Network-NewYork-Fortinet-Small.jpg
SO-Hardware-Network-NewYork-Rack-Small.jpg

丹佛数据中心

这里需要提到的是Mark Henderson, 我们网站的可靠性工程师之一,专程到纽约数据中心为我的这份报告拿到了一些高分辨率的照片。

SO-Hardware-Network-Denver-Installed-Small.jpg
SO-Hardware-Network-Denver-Racked-Small.jpg
SO-Hardware-Network-Denver-Raw-Small.jpg
SQL Servers (Stack Overflow 集群)

SQL Servers (Stack Exchange 及其它业务集群)

SO-Hardware-SQL-Front-Small.jpg
SO-Hardware-SQL-Inside-Small.jpg
SO-Hardware-SQL-SSDs-Small.jpg
SO-Hardware-SQL-Top-Small.jpg
Web 服务器

应用服务器 (Workers)

SO-Hardware-Web-Tier-Back-Small.jpg
SO-Hardware-Web-Tier-Front-Small.jpg
SO-Hardware-Web-Tier-Front2-Small.jpg
SO-Hardware-Web-Tier-Unboxed-Small.jpg

原作者备注: NY-SERVICE03 目前仍然是一台 R620, 但是现在并没有足够老到以至于需要更换。它会在今年晚些时候升级。

Redis 服务器 (缓存)

Elasticsearch 服务器 (检索)

HAProxy 服务器 (负载均衡器)

原作者备注: 这些服务器是不同时期采购的,因此规格上略有差异。并且,2台CloudFlare负载均衡器因为安装了memcached,拥有更多内存(我们现在已经不运行该组件)。这些服务,redis, 检索,和负载均衡器在stack都是基于1U 服务器。
这是纽约的情况:

SO-Hardware-Redis-Inside-Small.jpg
SO-Hardware-Service-Inside-Small.jpg
SO-Hardware-Service-Rear-Small.jpg
SO-Hardware-Service-Redis-Search-Front-Small.jpg

其它

我们还有一些其他的服务器并不直接或间接服务于网站的流量。
它们负责处理一些相关业务(例如,域名控制器,少量用于应用验证,跑在虚拟机上),或者一些次要的采购用于监控,日志存储,备份等等。既然已经表示未来会做一系列的报告,我把一切有趣的“后台”服务器也列出来。使我可以将更多的服务器拿出来和你分享,有人不喜欢的吗?

VM 服务器 (VMWare, 当前)

SO-Hardware-VMs-Blades-Small.jpg
SO-Hardware-VMs-Blades2-Small.jpg
SO-Hardware-VMs-Front-Small.jpg
SO-Hardware-VMs-Rear-Small.jpg

在一些场景下,还有几台重要的服务器不是虚拟机。这些系统后台任务,帮助我们通过日志追踪排查问题,存储大量的数据等等。

机器学习服务器 (Providence)
这些服务器99%的时间是空闲的,但是每晚承担了大量的处理工作:刷新Providence。它们也可以通过内部数据中心的方式,用来测试基于海量数据的新算法。

译者注:Providence,应为项目代号。Providence通过分析流量日志,给网站的访问用户打标签 (类似“web开发者” 或者 “使用Java技术栈”) 。详细可以查阅《providence-machine-learning-at-stack-exchange》

机器学习服务器-Redis (Still Providence)
这是一个为 Providence服务的redis数据集。它们通常是一台主用,一台备用,还有一个实例是用于测试,如最新版的ML算法。当它不用做Q&A站点时,这些数据会服务于职位招聘的边栏广告。

日志服务器(各种日志)
我们的 Logstash 集群 (使用 Elasticsearch 存储) ,数据来源于,任何地方。
我们曾计划将HTTP日志复制一份到这些服务器,但是由于影响性能的问题而没有实现。尽管如此,我们还是将所有的网络设备日志,syslog,Windows和Linux系统日志存在这里,所以我们能够建立建立一个网络的全局视图,或者快速地排查问题。当告警发生的时候,它也被用作Bosun的一个数据源。这个集群总计使用的存储是 6x12x4 = 288 TB。

** SQL Server-HTTP日志 **
在这些服务器,我们将访问负载均衡器的单独HTTP请求,存储到SQL数据库(来源于HAProxy syslog)。我们只记录少数高级别的请求,类似URL,查询,UserAgent,SQL执行时间,Redis,等等。在这里的数据,每天将进入一个集群的Columnstore 索引。我们借助这些数据排查用户的问题,发现僵尸网络,等等。

** SQL Server - 开发 **
我们喜欢尽可能多地模拟生产环境,类似SQL匹配,额,至少是它过去常常发生的那样。们一直以来这购买升级生产处理器。我们会将升级这些服务器,采用2U 解决方案,在今年晚些升级Stack Overflow 集群的时候一起做。

这些就是实际服务我们网站的硬件,或者说大家普遍感兴趣的部分。
我们当然还有其它服务器,用于后台任务,例如日志记录,监控,备份,等等。
如果你对于我们其它系统还有特别感兴趣的地方,请尽管留言提问,我很高兴回答。

这是一周多以前在纽约数据中心的全景:

SO-Hardware-Racks-Small.jpg
SO-Hardware-Racks2-Small.jpg

接下来?
我做的这一系列工作是希望能让社区了解到最多情况。
通过Trello board, 它让部署看起来像是下一个最有趣的话题。预计下一次将让大家了解代码是如何从开发者的机器到生产环境,以及这个过程中解决的所有问题。它将覆盖数据库迁移,滚动构建,CI 组件,我们如何建立开发环境,所有要素如何共享信息等。

上一篇 下一篇

猜你喜欢

热点阅读