原作者Jeff Atwood

Joel Spolsky

译者简介严睿

工程师、开源粉、深度阅读爱好者。目前就职于中盈优创,负责运营商网络管理项目技术管理,致力于高可用架构改进、DevOps团队建设。

架构概述

Stack Overflow 是一个著名的程序相关的技术问答社区,由Jeff Atwood 和 Joel Spolsky 这两个非常著名的 Blogger 在 2008 年创建,他们也是本文的原作者。

Stack Overflow目前全球排名第56名,日均PV为1.7亿(根据alexa.cn在2016年6月5日的数据)。其架构既有商业外包服务,也大量采用开源软件,可以全景式展现当代主流架构的风貌,Stack Overflow 可以分解为八个切面:互联网

负载均衡

web层

服务层

缓存

推送

搜索

数据库

其架构图如下所示:

(点击可看大图)

架构原则

Stack Overflow 架构中最重要的一个原则就是:Everything is redundant

即 一切都有冗余

两个数据中心:纽约和科罗拉多,冗余且持续备份。

其它所有关键组件都尽可能贯彻冗余原则。

物理架构4 台 Microsoft SQL Server 服务器(其中 2 台使用了新的硬件)

11 台 IIS Web 服务器(新的硬件)

2 台 Redis 服务器(新的硬件)

3 台标签引擎服务器(其中 2 台使用了新的硬件)

3 台 Elasticsearch 服务器(同上)

4 台 HAProxy 负载均衡服务器(添加了 2 台,用于支持 CloudFlare)

2 台网络设备(Nexus 5596 核心 + 2232TM Fabric Extender,升级到 10Gbps 带宽)

2 台 Fortinet 800C 防火墙(取代了 Cisco 5525-X ASAs)

2 台 Cisco ASR-1001 路由器(取代了 Cisco 3945 路由器)

2 台 Cisco ASR-1001-x 路由器

逻辑架构

(点击可看大图)

The Internets 互联网DNS服务:外包CloudFlare + 自建DNS

其实外包DNS服务应该已经可以满足服务,不过出于保险起见,还是有一套自建的DNS Server。

看来trust issues 中外一致啊。

Load Balancers 负载均衡HAProxy 1.5.15 on CentOS 7

支持TLS (SSL)流量。可关注HAProxy 1.7,它即将支持HTTP/2。

引入开源架构之后,就必须持续关注、跟进社区的发展动态。

吃着碗里的,看着锅里的,永远不能停。

Web Tier Web层IIS 8.5, ASP.Net MVC 5.2.3, and .Net 4.6.1

Service Tier 服务层IIS, ASP.Net MVC 5.2.3, .Net 4.6.1, and HTTP.SYS

Cache缓存Redis

L1级别:HTTP 缓存

L2级别:L1级别缓存失败之后,通过Redis获取数据

L1&L2都无法命中的情况下,会从数据库查询,并更新到缓存和Redis。

缓存更新:基于发布/订阅模型,利用这个机制来清除其他服务上的 L1 缓存,用来保持 web 服务器上的缓存一致性。

另外Redis实例的 CPU都很低,不到2%,这点很惊人。

(点击可看大图)

Push推送开源库:NetGrain

使用 websocket 向用户推送实时的更新内容,比如顶部栏中的通知、投票数、新导航数、新的答案和评论。在高峰时刻,大约有 50 万个并发的 websocket 连接,这可是一大堆浏览器。

一个有趣的事实:其中一些浏览器已经打开超过 18 个月了。Someone should go check if those developers are still alive!!

问题:临时端口、负载均衡上的文件句柄耗尽,都是非常有趣的问题,我们稍后会提到它们。

Search搜索Elasticsearch集群,每个ES集群都有3个Node

为什么不用Solr?

我们需要在整个网络中进行搜索(同时有多个索引),在我们进行决策的时候 Solr 还不支持这种场景。

还没有使用 2.x 版本的原因,是因为2.x版本中类型(types)有了很大的变化,这意味着想要升级的话我们得重新索引所有内容。

没有足够的时间来制定需求变更和迁移的计划。

Database数据库SQLServer

Our usage of SQL is pretty simple. Simple is fast.

数据库中只有一个存储过程,而且我打算把这个最后残留的存储过程也干掉,换成代码。

监控系统

Opserver:轻量级监控系统,基于 asp.net MVC 框架,可监控:Servers

SQL clusters/instances

Redis

Elastic search

exception logs

haproxy

多台服务器支撑一个web项目,Stack Overflow网站:30台服务器支撑日均1.7亿PV ?相关推荐

  1. jq写的项目如何部署到静态服务器_如何在阿里云服务器上部署一个Web项目

    准备工作: 1:你得有云服务器! 2:你的云服务器上的tomcat必须正常运行! 如何在云服务器上发布一个Web项目? 1:需要制作好一个Web项目: 2:在本地电脑上tomcat上部署后运行正常: ...

  2. 从零搭建Linux服务器以及部署Web项目指南

    在Web项目开发中,服务器搭建是非常重要的,同时部署web项目也是经常需要进行的事情,下面对一系列流程工作进行阐述. 1.搭建服务器 可以购买或者自行搭建 首先需要一台服务器,在服务器中安装好Cent ...

  3. web服务器获取项目路径问题,读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...

    1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...

  4. idea maven创建java项目_新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)...

    之前都没试过用maven来管理过项目,但是手动找包导包确实不方便,于是今天用2016版的IDEA进行了maven的初尝试. 打开IDEA,创建新项目: 然后选择Maven,以及选择自己电脑的jdk: ...

  5. Servlet之第一个web项目

    所谓Servlet就是完成浏览器和服务器之间的交互,浏览器发出请求,服务器做出响应,二者既然能进行信息的交流,那么他们就一定有一种规范,那这个规范就是HTTP协议,有了这种协议,那么不管你是什么浏览器 ...

  6. JavaWeb开发之如何创建一个web项目

    首先,打开Myeclipse,看到左上角File->New->Web Project 出现如下界面: 在Project Name处输入项目的名字:Myfirstdemo 这样就建成了第一个 ...

  7. 在Linux上部署第一个web项目

    如何在Linux上部署第一个web项目(未更新完) 一.向服务器中的数据库添加数据(本篇以Mysql为例) 1.通过SQLyog将项目的数据库中的所有数据表导出为sql文件 2.为服务器上的数据库授权 ...

  8. Tomcat服务器部署+Web项目搭建

    Tomcat服务器部署+Web项目搭建 1.Tomcat服务器 1 . Tomcat下载     2 . Tomcat启动与关闭     3 . 配置端口号2.IDEA搭建Web项目 1 . web项 ...

  9. 如何创建一个Web项目

    文章目录 一.创建Web项目 1. 新建Maven工程 2. 在pom.xml中,添加servlet依赖 3. 创建web.xml文件 4. 通过tomcat配置启动项 5. 在webapp下创建ht ...

最新文章

  1. Leetcode: Maximal Rectangle
  2. SIGPIPE导致cronttab和shell脚本等工作异常
  3. 大脑如何编码视觉信息?动态电极到图像(DETI) 映射技术也许有助于我们揭示其原理...
  4. [鸟哥的Linux私房菜] X Window 与 纯文本模式的切换
  5. stm32 sdio acmd41 无响应。一直是返回0x3f。解决方法是清除crc错误中断
  6. android NDK 编译hellojni 例子文件
  7. java 短链跳转原理_给你代码:短链接生成原理
  8. webapi+ajax跨域问题及cookie设置
  9. 您属于哪个版本的程序员[转]
  10. Oracle12c:安装后新建用户及其默认表空间,并创建表测试
  11. java ee各类组件_在Java EE组件中使用骆驼路线
  12. SQL SERVER 表分区
  13. 内蒙古师范大学计算机科学技术学院,内蒙古师范大学计算机科学技术硕士生导师——李成城...
  14. mysql除法运算保留小数的用法
  15. C++实现简单的二叉树
  16. 每日一课(10/75)CPU资源和存储器 之 专用寄存器的作用
  17. BZOJ4407 :于神之怒加强版
  18. 什么是地面站空间分集技术?以及卫星通信中的Ka-波段介绍
  19. MyBatis拦截器实现原理
  20. 学术论文撰写(逻辑清晰,浅显易懂,套用模板)

热门文章

  1. 2012域文件服务器高级共享,server 2012文件共享服务器、域控服务器搭建 server2012共享文件夹权限设置的方法...
  2. 【操作系统架构原理】资源管理技术与进程的抽象设计思想
  3. 如何对数据库版本进行管理
  4. 无线视频、音频传输模块的驱动编程(RC5808)
  5. 便携式计算机推销洽谈方案,惠普电脑推销洽谈方案
  6. 山东大学软件学院编译原理2023期末考题
  7. 初识Android自定义控件之旋转罗盘的制作
  8. 萤火学堂视频:硬件设计-PCB原理图简要讲解
  9. 向量空间模型(VSM)的余弦定理公式(cos)
  10. 若依下载zip包(图片和表格)