360SDN.COM

Stack Overflow网站:30台服务器支撑日均1.7亿PV ?

来源:Jeff & Joel  2016-09-25 15:22:01    评论:0点击:

来自: 高效运维
原作者
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

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权