Мы начал днем в воскресенье, 11 июля, через час попал под хабраэффект .
Собственно, наши магические заклинания и числа под катом.
Что будет сказано:
- Некоторые технические трудности
- Читатель RSS/Atom, цифры
- Хабраэффект, цифры
- Грабли
- Монгодб, nodejs, Redis
По состоянию на среду - 3 дня с начала
3,050 пользователи ~200 онлайн-пользователи, которые читают в среднем 5 постов в секунду 22,340 потоки (из которых 18 546 – внешние RSS/атомные каналы) ~25 каналы в секунду обновляются фоновыми серверами 811,614 новости (в том числе созданные пользователями) 727 импортировано в общей сложности 47 032 фида (не включая дубликаты) 207 обработанный отзыв пользователяЗапуск
Основные технические аспекты я описал ранее в еще одна статья .С тех пор что-то изменилось; В «зоопарк» добавлены redis и capistrano. Основная сложность — пустая база данных.
Необходимо было выдержать неопределенное количество импортов OPML с неопределенным количеством фидов и самое главное за ограниченный период времени.
Предсказать нагрузку оказалось нереальной задачей, поэтому мы просто стиснули зубы и смотрели, как она растет. Л.
А.
и размер очередей на наших серверах.
На данный момент самое сложное для системы — поддерживать в актуальном состоянии более 18 тысяч внешних источников.
А также вести индивидуальный учет прочитанных записей для каждого пользователя.
Все остальное — мелочи жизни.
Хабраэффект, цифры
График регистраций/импорт OPML/общее количество фидовНа этом графике показано количество импортов с шагом в 10 минут. Дальше идет рост пользователей и общего количества каналов в системе.
Большую часть мы вытащили в первый же день.
При последующем импорте использовались существующие фиды.
Другие номера
Монгодб: Всего объектов: 1 028 554 Общий размер: 3,17 ГБ (из них 2,76 ГБ — контент из каналов) Размер индекса: 465 МБ Потребление процессора: ~2% Кушает ОЗУ: 3,2 ГБ Время Mongo для комплексного рендеринга средней страницы (без кэширования): 0,3 сек.Засоры практически не ощущаются.
Узлы:
Потребление памяти: ~20 МБ
Процессор вообще не ест.
Грабли
Слабые сервера.Изначально мы начали с двух физических серверов и 12 виртуальных машин openvz. Идея проста: нагрузка растет — покупаем новое оборудование, переносим готовые образы — это очень удобно.
Первая ошибка — веб-экземпляр (nginx, php-fpm) на более слабом сервере.
Почти сразу - ЛА 40, после чего просто перестал реагировать на ssh. Перенос на более мощный сервер занял полчаса.
Репликация MongoDB под нагрузкой.
Слейв монго, который находился на более слабом сервере, не успел прочитать оплог (для синхронизации), что привело к потере статической версии (которая на тот момент хранилась в монго).
Впоследствии некоторые пользователи увидели очень красивый ивент без стилей и картинок.
Мы переместили статическую версию в Redis. Системные и пользовательские очереди на одном сервере.
Чем больше каналов в системе, тем больше ресурсов необходимо для их постоянного обновления (для поддержания актуальности).
Через полчаса работы сервиса очередь была полностью забита фоновыми обновлениями и вытеснила запросы пользователей в виде импорта или отдельных добавлений внешних фидов.
На тот момент в очереди было в среднем от 5 до 15 тысяч задач.
В самое загруженное время, пока к нам завозили новые сервера, мы подключали к очереди свои ноутбуки — это помогало :) Тем временем пользователи с импортом возмущались.
На данный момент у нас есть четыре фоновых сервера.
Три из них предназначены для фонового обновления, один — для пользовательских очередей.
Сейчас обработка более 18 тысяч фидов никак не влияет на скорость работы интерфейса и действий пользователя, таких как импорт. После установки новых серверов нам пришлось серьезно их напрягать, чтобы быстрее очистить накопившуюся очередь.
В этот момент скорость достигла 100 потоков/секунду.
Теперь 25 в секунду достаточно для поддержания всей базы.
Zend_Date. Оказалось, что его вызовы заняли 70% всего времени отрисовки шаблонов.
Я в шоке.
Кроме того, были полностью исключены частичный и заполнитель Zend_View.
Приятные моменты
Монгодб Показал очень хорошие цифры.Индексы работают как часы.
Удобное администрирование, масштабирование и самое главное миграция.
nodejs Очень острый.
Удобное и быстрое развитие.
Идеальная сборка мусора и отказоустойчивость.
Учитывая, что на нем работает весь фон (подробнее читайте в предыдущая статья ), я могу назвать nodejs самым приятным, с чем я столкнулся за всю свою разработку.
Единственное, интерфейс работы с mongodb не очень удобен.
Редис удобен.
Redis На нем: кэш, очереди, блокировки.
Супер быстро и очень удобно.
Также его PubSub используется для связи между серверами.
Идеально подходит для объектов в реальном времени.
В php мы используем редис , Особая благодарность Шумков для поддержки.
капистрано Я очень рекомендую это всем.
Развертывание на 10 инстансов превращается из рутинной ручной работы в приятное созерцание разноцветной консоли, которая все делает за вас.
Заббикс По сравнению с нагиосом для меня он оказался удобнее.
Очень легко добавлять определенные триггеры и получать на их основе красивые графики в реальном времени.
В целом
Для себя мы еще раз поняли, что решительные действия могут привести к ошибкам, но именно ошибки позволяют делать выводы.И, сделав выводы, избежать не только прошлых, но и многих новых потенциальных ошибок, а значит двигаться вперед и развиваться.
Мы поняли, что в первую очередь именно пользователи, а не консультанты-аналитики, могут помочь сервису стать по-настоящему полезным и нужным людям.
Мы благодарны всем, кто прислал отзывы, а также всем пользователям первой бета-версии eventr.com. Мы продолжаем работать над повышением надежности и удобства сервиса.
Спасибо.
Теги: #eventr #deploy #habraeffect #habraeffect #rss #atom #mongodb #node.js #redis #php #занимаюсь пиаром
-
Обзор Asus Eeepc
19 Oct, 24 -
Сделай Сам. Городская Рождественская Елка
19 Oct, 24 -
Ad И Его Слабость К Каналу Связи
19 Oct, 24 -
Оживление Ретро Spectrum Zx С Помощью Ubuntu
19 Oct, 24