- PVSM.RU - https://www.pvsm.ru -
Хотелось бы сказать, что Stack Overflow [1] — масштабный проект, но это не так. Я имею ввиду мы добились многого, но я не могу назвать наш проект “большим”, ещё рано. Давайте я приведу в пример некоторые цифры — с какой нагрузкой мы имеем дело сейчас. Срез статистики за 24 часа от 12 ноября 2013 года. Это обычный будний день. Отмечу, что здесь представлена информация только по нашим собственным вычислительным мощностям, без CDN.
Мне обязательно нужно будет написать пост о том, как мы эти цифры получаем, но данная статистика (кроме трафика) рассчитана только благодаря HTTP логам. Как получилось так много часов за день? Мы называем это магией. Большинство людей называют это “несколько серверов с многоядерными процессорами”, но мы всё списываем на магию. Stack Exchange работает на следующем оборудовании:
Как вся эта красота выглядит можно посмотреть на первой фотографии (выше).
Мы не просто занимаемся
Если мы на момент представим, что что-то произошло и вся избыточность инфраструктуры пропала, то весь Stack Exchange может работать на следующем оборудовании без потери в производительности:
Нам надо будет попробовать отключить часть серверов специально чтобы проверить на деле. :)
Ниже — средняя конфигурация оборудования:
Кажется, что 20Гбит/с — слишком много? Да, например SQL сервера в пик не загружают сеть больше, чем на 100-200 Мбит/с, но не забывайте про резервное копирование, перестроение топологии — это пожет понадобиться в любой момент и тогда сеть будет использована на полную. Такое количество памяти и SSD смогут загрузить этот канал полностью.
В даннй момент у нас примерно 2 ТБ данных в SQL (1.06/1.16 ТБ на первом кластере из 18 SSD и 0.889/1.45 ТБ на втором, состоящем из 4 SSD). Возможно, стоило бы задуматься об облаках, но сейчас мы используем SSD и время записи в базу равно буквально 0 миллисикундам. С базой данных в памяти и двумя уровнями кеша перед ней, Stack Overflow имеет соотношение чтения к записи 40 к 60. Да, всё верно, 60% времени работы базы данных она пишет.
На веб-серверах используются SSD диски на 320 ГБ в RAID1.
Сервера ElasticSearch тоже снабжаются SSD дисками на 300 ГБ. Это важно, так как там часто выполняется перезапись и индексация.
Мы так же не упомянули о SAN. Это DELL Equal Logic PS6110X [11] с 24 SAS 10K дисками и подключением 2х10 Гбит/с. Используется он как хранилище для виртуальных серверов VmWare как облако и не связан с самим сайтом. Если этот сервер упадёт, сайты некоторое время даже не будут знать об этом.
Что мы будем с этим делать? Мы хотим большей производительности — это очень важно для нас. 12-го ноября страница загружалась в среднем 28 миллисекунд. Мы стараемся поддерживать скорость загрузки не дольше 50 миллисекунд. Вот средняя статистика загрузки популярных страниц в этот день:
Мы мониторим скорость загрузки путём записи таймингов. Благодаря этому, мы можем составить очень наглядный график:
Очевидно, что все сервисы сейчас работают на низкой нагрузке. Веб-сервера потребляют в среднем 5-15% процессора, 15,5 ГБ ОЗУ, и 20-40 МБит/c полосы сети. Средняя загрузка процессора сервера базы данных — 5-10%, 365 ГБ ОЗУ и 100-200 МБит/с полосы сети. Благодаря этому мы можем полноценно развиваться и, что очень важно, мы страхуемся от падения на случай повышения нагрузки — ошибка в коде или любой другой сбой.
Вот скриншот из Opserver:
Главная причина того, что нагрузка настолько низкая, заключается в эффективности кода. Пусть пост и посвящен другому, но эффективный код — критическое место для мастабирования вашего железа в будущем. Все, что вы сделали, но не должны были делать, будет вам стоить дороже, чем если бы вы этого не сделали вовсе — аналогичное правило касается и неэффективного кода. Под стоимостью понимается следующее: энергопотребление, стоимость железа (потому что вам нужно больше серверов, или они должны быть мощнее), разработчики, занятые попытками осознать более сложный код (хотя, честно говоря, оптимизированный код не обязательно становится проще) и скорее всего медленный рендер страниц — что выражается в реакции пользователя, который не станет ждать загрузки еще одной страницы… а то и вовсе больше не зайдет к вам. Цена неэффективного кода может оказаться гораздо выше, чем вам кажется.
Итак, сегодня мы познакомились с тем, как работает Stack Overflow на нынешнем железе. В следующий раз мы узнаем о том, почему мы не спешим переезжать в облака.
Автор: kDas
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/it-infrastruktura/49103
Ссылки в тексте:
[1] Stack Overflow: http://stackoverflow.com
[2] Redis: http://redis.io/
[3] /questions/tagged/c++: http://stackoverflow.com/questions/tagged/c++
[4] ElasticSearch: http://www.elasticsearch.org/
[5] HAProxy: http://haproxy.1wt.eu/
[6] Nexus 5596: http://www.cisco.com/en/US/prod/collateral/switches/ps9441/ps9670/data_sheet_c78-618603.html
[7] Fabric Extenders: http://www.cisco.com/en/US/prod/collateral/switches/ps9441/ps10110/data_sheet_c78-507093.html
[8] Cisco 5525-X ASAs: http://www.cisco.com/en/US/prod/collateral/vpndevc/ps6032/ps6094/ps6120/data-sheet-c78-729807.html
[9] Cisco 3945: http://www.cisco.com/en/US/products/ps10541/
[10] хостингом: https://www.reg.ru/?rlink=reflink-717
[11] DELL Equal Logic PS6110X: http://www.dell.com/us/business/p/equallogic-ps6110x/pd
[12] Источник: http://habrahabr.ru/post/203406/
Нажмите здесь для печати.