Stack Overflow架构透视: Everything i

作者: RiboseYim | 来源:发表于2016-03-20 18:45 被阅读816次

    Stack Overflow 架构解析,其架构既有商业外包服务,也大量采用开源软件,可以全景式展现当代主流架构的风貌。

    原作者:《Stack Overflow: The Architecture - 2016 Edition》

    Stack Overflow 由 Jeff Atwood 和 Joel Spolsky 这两个非常著名的 Blogger 在 2008 年创建。

    As of April 2014, Stack Overflow has over 4,000,000 registered users[19]and more than 10,000,000 questions,[20]with 10,000,000 questions celebrated[21]in late August 2015. Based on the type oftagsassigned to questions, the top eight most discussed topics on the site are:Java,JavaScript,C#,PHP,Android,jQuery,PythonandHTML。——wiki

    总体架构

    Stack Overflow 可以分解为八个切面:互联网、负载均衡、web层、服务层、缓存、推送、搜索、数据库。

    First Rule: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

    数据库CPU very low

    相关文章

      网友评论

      • 97c1b6049197:多谢翻译分享,很喜欢这方面的内容

      本文标题:Stack Overflow架构透视: Everything i

      本文链接:https://www.haomeiwen.com/subject/ivqklttx.html