看StackOverflow如何用25台处事器撑起5.6亿的月PV(5)

StackOverflow 是一个 IT 技能问答网站,用户可以在网站上提交和答复问题。当下的 StackOverflow 已拥有 400 万个用户,4000 万个答复,月 PV5.6 亿,世界排行第 54。然而值得存眷的是,支撑他们网站的全部处事器只有 25 台,而且都保持着很是低的资源利用率,这是一场高有效性、负载平衡、缓存、数据库、搜索及高效代码上的较劲。克日,High Scalability 首创人 Todd Hoff 按照 Marco Cecconi 的演讲视频“ The architecture of StackOverflow”以及 Nick Craver 的博文“ What it takes to run Stack Overflow”总结了 StackOverflow 的乐成原因。

料想之中,也是料想之外,Stack Overflow 仍然重度利用着微软的产物。他们认为既然微软的基本设施可以满意需求,又足够自制,那么没有什么来由去做基础上的改变。而在需要的处所,他们同样利用了 Linux。究其基础,一切都是为了机能。

另一个值得存眷的处所是,Stack Overflow 仍然利用着纵向扩展计策,没有利用云。他们利用了 384GB 的内存和 2TB 的 SSD 来支撑 SQL Servers,假如利用 AWS 的话,耗费可想而知。没有利用云的另一个原因是 Stack Overflow 认为云会必然水平上的低落机能,同时也会给优化和排查系统问题增加难度。另外,他们的架构也并不需要横向扩展。峰值期间是横向扩展的杀手级应用场景,然而他们有着富厚的系统调解履历去应对。该公司仍然僵持着 Jeff Atwood 的名言——硬件永远比措施员自制。

Marco Ceccon 曾提到,在谈及系统时,有一件工作必需首先弄大白——需要办理问题的范例。首先,从简片面着手,StackExchange 毕竟是用来做什么的——首先是一些主题,然后环绕这些主题成立社区,最后就形成了这个令人佩服的问答网站。

其次则是局限相关。StackExchange 在飞速增长,需要处理惩罚大量的数据传输,那么这些都是如何完成的,出格是只利用了 25 台处事器,下面一起追根揭底:

状态

StackExchange 拥有 110 个站点,以每个月 3 到 4 个的速度增长。

400 万用户

800 万问题

4000 万谜底

世界排名 54 位

每年增长 100%

月 PV 5.6 亿万

大大都事情日期间峰值为 2600 到 3000 请求每秒,作为一个编程相关网站,一般环境下事情日的请求城市高于周末

25 台处事器

SSD 中储存了 2TB 的 SQL 数据

每个 web server 都设置了 2 个 320G 的 SSD,利用 RAID 1

每个 ElasticSearch 主机都配备了 300GB 的机器硬盘,同时也利用了 SSD

Stack Overflow 的读写比是 40:60

DB Server 的平均 CPU 操作率是 10%

11 个 web server,利用 IIS

2 个负载平衡器,1 个活泼,利用 HAProxy

4 个活泼的数据库节点,利用 MS SQL

3 台实现了 tag engine 的应用措施处事器,所有搜索都通过 tag

3 台处事器通过 ElasticSearch 做搜索

2 台利用了 Redis 的处事器支撑漫衍式缓存和动静

2 台 Networks(Nexus 5596 + Fabric Extenders)

2 Cisco 5525-X ASAs 

2 Cisco 3945 Routers

主要处事 Stack Exchange API 的 2 个只读 SQL Servers

VM 用于陈设、域节制器、监控、运维数据库等场所

平台

ElasticSearch

Redis

HAProxy

MS SQL

Opserver

TeamCity

Jil——Fast .NET JSON Serializer,成立在 Sigil 之上

Dapper——微型的 ORM

UI

UI 拥有一个信息收件箱,用于新徽章得到、用户发送信息、重大事件产生时的信息收取,利用 WebSockets 实现,并通过 Redis 支撑。

搜索箱通过 ElasticSearch 实现,利用了一个 REST 接口。

因为用户提出问题的频率很高,因此很难显示最新问题,每秒城市有新的问题发生,从而这里需要开拓一个存眷用户行为模式的算法,只给用户显示感乐趣的问题。它利用了基于 Tag 的巨大查询,这也是开拓独立 Tag Engine 的原因。

处事器端模板用于生成页面。

处事器

25 台处事器并没有满载,CPU 利用率并不高,单计较 SO(Stack Overflow)只需要 5 台处事器。

数据库处事器资源操作率在 10% 阁下,除下执行备份时。

为什么会这么低?因为数据库处事器足足拥有 384GB 内存,同时 web server 的 CPU 操作率也只有 10%-15%。

纵向扩展还没有碰着瓶颈。凡是环境下,如此流量利用横向扩展约莫需要 100 到 300 台处事器。

简朴的系统。基于 .Net,只用了 9 个项目,其他系统大概需要 100 个。之所以利用这么少系统是为了追求极限的编译速度,这点需要从系统开始时就举办筹划,每台处事器的编译时间约莫是 10 秒。

11 万行代码,比拟流量来说很是少。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8291.html