Stack Exchange Network представляет собой сеть из 46 сайтов вопросов-ответов на совершенно разные темы от программирования до кулинарии. Проект вырос из известной в узких кругах тусовки программистов Stack Overflow, об архитектуре которой я уже рассказывал чуть больше года назад. Проект активно развивается и уже появилось приличное количество новой информации, которой я и спешу с Вами поделиться.

 

 

Статистика

 

  • 95 миллионов просмотров страниц в месяц
  • 800 HTTP запросов в секунду
  • 180 DNS запросов в секунду
  • Загруженность интернет-канала в 55 Мбит/с
  • 16 миллионов уникальных пользователей в месяц

 

Технологии

 

Разработка

 

  • C# — основной язык программирования
  • Visual Studio 2010 Team Suite - IDE
  • Microsoft ASP.NET 4.0 — framework
  • ASP.NET MVC 3 - web Framework
  • Razor — генератор шаблонов
  • jQuery 1.4.2 — JavaScript framework
  • LINQ to SQL и немного чистого SQL — доступ к данным
  • Mercurial и Kiln — контроль версий исходного кода
  • Beyond Compare 3 — инструмент для сравнения

 

Программное обеспечение

 

  • WISC стек получен условно-бесплатно с помощью BizSpark
  • Windows Server2008 R2 x64 — основная операционная система
  • MS SQL Server 2008 R2 на Windows Server 2008 Enterprise Edition x64 — база данных
  • Ubuntu Server
  • CentOS
  • IIS 7.0 — веб-сервер
  • HAProxy — балансировка нагрузки
  • Redis — используется как распределенная система кэширования
  • CruiseControl.NET — сборки и автоматическая система развертывания кода
  • Lucene.NET — полнотекстный поиск
  • Bacula — резервное копирование
  • Nagios (с плагинами n2rrd и drraw) для мониторинга
  • Splunk — сбор и агрегация логов
  • SQL Monitor от Red Gate — мониторинг SQL Server
  • Bind - DNS
  • DotNetOpenId — реализация OpenID на .NET
  • WMD — текстовый редактор
  • Prettify — подсветка синтаксиса
  • MarkdownSharp — обработчик разметки Markdown на C#
  • Flot — построение графиков на JavaScript

 

Внешние сервисы

 

  • reCAPTCHA — защита от спама
  • Google Analytics — веб-аналитика
  • Kiln — Mercurial хостинг
  • Pingdom — внешний мониторинг и уведомления
  • CDN не используется, его роль выполняет sstatic.net, отдельный домен для статичных файлов SEN без cookie

 

Оборудование

 

Датацентры

 

  • 1 стойка в Peak Internet, штат Орегон (чат и обнаружение данных)
  • 2 стойки в Peer 1, Нью-Йорк (остальная часть SEN)

 

Серверы

 

  • 10 веб-серверов:
    • Dell R610
    • 1x Intel Xeon Processor E5640 @ 2.66 GHz
    • 16 GB RAM
    • Windows Server 2008 R2
    • IIS
  • 2 сервера баз данных:
    • Dell R710
    • 2x Intel Xeon Processor X5680 @ 3.33 GHz
    • 64 GB RAM
    • 8 жестких дисков
    • MS SQL Server 2008 R2
  • 2 виртуальных сервера для балансировки нагрузки:
    • 1x Intel Xeon Processor E5640 @ 2.66 GHz
    • 4 GB RAM
    • Ubuntu Server
    • HAProxy
  • 2 сервера для кэша:
    • Dell R610
    • 2x Intel Xeon Processor E5640 @ 2.66 GHz
    • 16 GB RAM
    • CentOS
    • Redis
  • 1 сервер для резервного копирования:
    • Dell R610
    • 1x Intel Xeon Processor E5640 @ 2.66 GHz
    • 32 GB RAM
    • Linux
    • Bacula
  • 1 сервер для мониторинга, управления и сбора логов:
    • Dell R610
    • 1x Intel Xeon Processor E5640 @ 2.66 GHz
    • 32 GB RAM
    • Linux
    • Nagios
  • 2 сервера для виртуализации:
    • Dell R610
    • 1x Intel Xeon Processor E5640 @ 2.66 GHz
    • 16 GB RAM
    • VMWare ESXi

 

Сетевое оборудование

 

  • 2 маршрутизатора на Linux
  • 5 свитчей  Dell PowerConnect

 

Прочее

 

  • Rovio — маленький робот, позволяющий удаленным разработчиком посетить офис «виртуально»

 

Команда

 

  • 14 разработчиков
  • 2 системных администратора

 

Что нового?

 

  • HAProxy стал использоваться вместо Windows NLB так как HAProxy является быстрым, нересурсоемким, бесплатным решением, которое работает. Полностью прозрачен для серверов, легче обслуживать по сравнению со старым решением, располагается на виртуальных машинах.
  • CDN не используется, так как даже «недорогие» решения обходятся в очень приличную сумму по сравнению с тем трафиком, который входит в тарифный план хостинг-провайдера. Самое дешевой решение CDN от Amazon обошлось бы как минимум на тысячу долларов в месяц дороже при текущем уровне использования трафика.
  • Резервное копирование на диски для быстрого восстановления и на кассеты для «истории».
  • Полнотекстный поиск в SQL Server плохо интегрируется, нестабилен и обладает низким качеством результатов, так что они перешли на Lucene.
  • Все сайты в SEN теперь работают на общей платформе: используется общее оборудование и программное обеспечение.
  • Проект разделен на разные сайты для разных ниш, чтобы полностью изолировать группы аудитории, специализирующиеся в каждой конкретной области.
  • Используется агрессивное кэширование, большинство страниц кэшируются в виде HTML для анонимных пользователей средствами IIS.
  • Используется три уровня кэширования: локальный, относящийся к каждому сайту и глобальный.
  • Локальный кэш доступен только для каждой пары сайт/сервер:
    • Используется для уменьшения сетевых задержек, по сути просто через HttpRuntime.Cache.
    • Содержит такие вещи как пользовательские сессии, будущие обновления счетчиков просмотров страниц.
    • Располагается полностью в оперативной памяти веб-сервера.
  • Кэш сайта доступен для каждого сервера, обрабатывающий запрос к конкретному сайту:
    • Большинство кэшируемых данных располагаются здесь.
    • Располагается в Redis.
    • Redis настолько быстр, что большую часть времени доступа к кэшу занимает передача данных по сети.
    • Данные сжимаются перед отправкой в Redis, так как большинство данных являются строками и у них есть масса свободных вычислительных ресурсов.
    • Использование процессорных ресурсов на серверах с Redis стремится к нулю.
  • Глобальный кэш является общим для всех серверов и сайтов:
    • Личные сообщения, квоты по API и несколько других по-настоящему глобальных вещей располагаются здесь.
    • Также используется Redis.
  • Большинство данных в кэше удаляются через заданный период времени (обычно в районе нескольких минут) и практически никогда явно не удаляются.
  • Когда требуется инвалидация кэша на уровне готовых страниц, используется система подписки внутри Redis для отправки сообщений в соответствующую часть системы кэширования.
  • Для системы ввода-вывода они выбрали Intel X25 SSD в RAID10. RAID решил многие вопросы с надежностью, а SSD показывают отличную производительностью по сравнению с FusionIO при существенно более низкой цене.
  • Стоимость лицензий используемых продуктов Microsoft составила бы 242 тысячи долларов. Но так как они используют программу BizSpark, им не пришлось платить большую часть этой суммы.
  • Сетевые карты от Broadcom заменяются на сетевые карты от Intel на основных production серверах. Это решило большинство проблем с потерями соединений, пакетов и таблицами ARP.

 

Источники информации

 

Вверх