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

关于 Dapper 无编译器校验查询与传统 ORM 的比拟。利用编译器有许多长处,但在运行时仍然会存在 fundamental disconnect 问题。同时更重要的是,由于生成 nasty SQL,凡是环境还需要去寻找原始代码,而 Query Hint 和 parameterization 节制等本领的缺乏更让查询优化变得巨大。

编码

流程

大部门措施员都是长途事情,本身选择编码所在

编译很是快

然后运行少量的测试

一旦编译乐成,代码即转移至开拓交付筹备处事器

通过成果开关埋没新成果

在沟通硬件上作为其他站点测试运行

然后转移至 Meta.stackoverflow 测试,天天有上千个措施员在利用,一个很好的测试情况

假如通过则上线,在更宽大的社区举办测试

大量利用静态类和要领,为了更简朴及更好的机能

编码进程很是简朴,因为巨大的部门被打包到库里,这些库被开源和维护。.Net 项目数量很低,因为利用了社区共享的部门代码。

开拓者同时利用 2 到 3 个显示器,多个屏幕可以显著提跨越产效率。

缓存

缓存一切

5 个品级的缓存

1 级是网络级缓存,缓存在欣赏器、CDN 以及署理处事器中。

2 级由 .Net 框架 HttpRuntime.Cache 完成,在每台处事器的内存中。

3 级 Redis,漫衍式内存键值存储,在多个支撑同一个站点的处事器上共享缓存项。

4 级 SQL Server Cache,整个数据库,所有数据都被放到内存中。

5 级 SSD。凡是只在 SQL Server 预热后才生效。

举个例子,每个辅佐页面都举办了缓存,会见一个页面的代码很是简朴:

利用了静态的要领和类。从 OOP 角度来看确实很糟,但长短常快并有利于简捷编码。

缓存由 Redis 和 Dapper 支撑,一个微型 ORM

为了办理垃圾收集问题,模板中 1 个类只利用 1 个副本,被成立和生存在缓存中。监测一切,包罗 GC 操。据统计显示,间接层增加 GC 压力到达了某个水平时会显著的低落机能。

CDN Hit 。鉴于查询字符串基于文件内容举办哈希,只在有新成立时才会被再次取出。天天 3000 万到 5000 万 Hit,带宽约莫为 300GB 到 600GB。

CDN 不是用来应对 CPU 或I/O负载,而是辅佐用户更快的得到谜底

陈设

天天 5 次陈设,不去成立过大的应用。主要因为

可以直接的监督机能

尽大概最小化成立,可以事情才是重点

产物成立后再通过强大的剧本拷贝到各个网页层,每个处事器的步调是:

通过 POST 通知 HAProxy 下架某台处事器

延迟 IIS 竣事现有请求(约莫 5 秒)

遏制网站(通过同一个 PSSession 竣事所有下游)

Robocopy 文件

开启网站

通过另一个 POST 做 HAProxy Re-enable

险些所有陈设都是通过 puppet 或 DSC,进级凡是只是大幅度调解 RAID 阵列并通过 PXE boot 安装,这样做很是快速。

协作

团队

SRE (System Reliability Engineering):5 人

Core Dev(Q&A site)6-7 人

Core Dev Mobile:6 人

Careers 团队专门认真 SO Careers 产物开拓:7 人

Devops 和开拓者团结的很是细密

团队间变革很大

大部门员工长途事情

办公室主要用于销售,Denver 和 London 除外

一切平等,些许方向纽约事情者,因为面劈面有助于事情交换,可是在线事情影响也并不大

比拟可以在同一个办公室办公,他们更方向热爱产物及有才能的工程师,他们可以很好的权衡利弊

很多人因为家庭而选择长途事情,纽约是不错,可是糊口并不宽松

办公室设立在曼哈顿,那是小我私家才的降生地。数据中心不能太偏,因为常常会涉及进级

打造一个强大团队,偏幸极客。早期的微软就聚积了大量极客,因此他们征服了整个世界

Stack Overflow 社区也是个雇用的所在,他们在那寻找热爱编码、乐于助人及热爱交换的人才。

体例预算

预算是项目标基本。钱只花在为新项目成立基本设施上,如此低操作率的 web server 照旧 3 年前数据中心成立时购入。

测试

快速迭代和遗弃

很多测试都是宣布步队完成的。开拓拥有一个同样的 SQL 处事器,而且运行在沟通的 Web 层,因此机能测试并不会糟糕。

很是少的测试。Stack Overflow 并没有举办太多的单位测试,因为他们利用了大量的静态代码,尚有一个很是活泼的社区。

基本设施改变。鉴于所有对象都有双份,所以每个旧设置都有备份,并利用了一个快速妨碍规复机制。好比,keepalived 可以在负载平衡器中快速回退。

比拟按期维护,他们更愿意依赖冗余系统。SQL 备份用一个专门的处事器举办测试,只为了可以重存储。打算做每两个月一次的全数据中心妨碍规复,可能利用完全只读的第二数据中心。

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

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