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

Статистика

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

Технологии

Разработка

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

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

  • 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.

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

Спасибо за внимание! Для оперативного получения свежей информации о высоконагруженных интернет-проектах рекомендую подписаться на RSS.