Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

“КП” в интернете (Александр Ромашин, Вячеслав Малютин)

1,339 views

Published on

  • Be the first to comment

  • Be the first to like this

“КП” в интернете (Александр Ромашин, Вячеслав Малютин)

  1. 1. “ Комсомольская правда” в интернете: совмещение высокой нагрузки, высокой доступности и оперативной разработки Ромашин А., Малютин В. Октябрь, 2011 г.
  2. 2. Немного статистики <ul><li>8000 обновлений контента </li></ul><ul><li>6000 комментариев </li></ul><ul><li>в среднем 40 одновременно работающих пользователей </li></ul><ul><li>3 000 000 и 900 000 в обычные дни </li></ul><ul><li>4 500 000 и 1 200 000 при появлении важных событий </li></ul><ul><li>54 региональные версии сайта </li></ul>
  3. 3. Особенности движка <ul><li>отсутствие FK, представлений, хранимых процедур </li></ul><ul><li>N:M-связи через спец. таблицу </li></ul><ul><li>регионализация на низком уровне </li></ul><ul><li>простые SQL запросы = эффективность кеша MySQL </li></ul><ul><li>минимум описания полей для CMS </li></ul>
  4. 4. Редакторский интерфейс <ul><li>~ 100 объектов </li></ul><ul><li>Доступ на уровне объектов </li></ul><ul><li>Кастомизация статусов </li></ul>
  5. 5. Редакторский интерфейс <ul><li>Кастомизация фильтра, столбцов </li></ul><ul><li>Изменение приоритета </li></ul><ul><li>Групповые операции </li></ul>
  6. 6. Редакторский интерфейс <ul><li>CKEditor с расширениями copy/paste, коррекции ввода </li></ul><ul><li>Динамическая подгрузка </li></ul><ul><li>Загрузка мультимедиа </li></ul><ul><li>Активные пользователи </li></ul><ul><li>История изменений </li></ul>
  7. 7. Конфигурация <ul><li>Объектная часть + описание сброса кеша </li></ul><ul><li>Интерфейсная часть </li></ul><ul><li>Это один файл (не считая структуры БД и пары мелких сервисных конфигов ) </li></ul><ul><li>Автоматическое обновление структуры БД </li></ul>
  8. 8. Иерархия классов <ul><li>Enum и Set — перечисляемые типы </li></ul><ul><li>Загрузка по обращению (Ref) </li></ul><ul><li>Маскирование полей ( Parent, Image ) </li></ul><ul><li>Системное поле History </li></ul>
  9. 9. Элементы интерфейса <ul><li>Цепочка типов Ref->FParent (N:M) </li></ul><ul><li>Семейство списков Popup и расширения </li></ul><ul><li>Text и расширения с корректировкой данных </li></ul><ul><li>Grid — элемент ввода табличных данных </li></ul>
  10. 10. С чего все начиналось
  11. 11. Проблемы <ul><li>Рост объемов контента </li></ul><ul><li>Добавление новых страниц, проектов — рост числа запросов </li></ul><ul><li>Блокировки таблиц MyISAM </li></ul><ul><li>Весь CGI на фронтенде </li></ul>
  12. 12. <ul><li>переписана главная страница ( ~ 50% заходов на тот момент ) </li></ul><ul><li>настроена репликация </li></ul>
  13. 13. Данные объекта в memcached
  14. 14. Неэффективно. MySQL query cache!
  15. 15. <ul><li>Переход на RedHat </li></ul><ul><li>Убран memcached </li></ul><ul><li>Добавлен балансировщик и второй slave </li></ul>
  16. 16. MySQL <ul><li>проблемы с индексами MyISAM: 600К записей — обрушение индексных файлов. </li></ul><ul><li>обвалы репликации </li></ul><ul><ul><li>перевод мастера на InnoDB </li></ul></ul><ul><ul><li>разный max_heap_table_size на мастере и слейвах </li></ul></ul><ul><ul><li>попытка перехода на MySQL Cluster </li></ul></ul>
  17. 17. Балансировка нагрузки фронтов <ul><li>DNS прописан на виртуальный сетевой интерфейс </li></ul><ul><li>Фронты «следят» за доступностью основного IP-адреса </li></ul><ul><li>Filesync — дублирование статики по фронтам </li></ul>
  18. 18. <ul><li>Добавлен второй фронт Добавлен третий бекенд Переход на InnoDB </li></ul>
  19. 19. Блочный кеш <ul><li>memcached:2x(Core2 1.86ГГц,8Гб) </li></ul><ul><li>repcached </li></ul><ul><li>2048 макс, 100 будни, 700 пик соединений </li></ul><ul><li>Cache::Memcached::Fast </li></ul><ul><li>в основе — cache_self Mason </li></ul><ul><li>одно соединение на request </li></ul>
  20. 20. Блочный кеш. Алгоритм cache_self_ex()
  21. 21. Блочный кеш. «Магия» call_self()
  22. 22. Блочный кеш. Mason создает соединение на каждый вызов оригинального cache_self()!
  23. 23. Кеш nginx <ul><li>некешируемые зоны </li></ul><ul><li>не используйте memcached с nginx </li></ul><ul><li>увеличение времени кеширования при высоких нагрузках </li></ul>
  24. 24. Переход на fast cgi <ul><li>легкость, скорость, отсутствие кучи модулей </li></ul><ul><li>рост памяти процесса </li></ul><ul><li>управляемость </li></ul>
  25. 25. Если нет вопросов...
  26. 26. Структура отдела <ul><li>Аналитики. </li></ul><ul><li>Взаимодействие с внутренними заказчиками и аналитиками подрчдчиков, постановка ТЗ, приемка, контроль исполнения работ. </li></ul>
  27. 27. Структура отдела <ul><li>Внешние подрядчики. </li></ul><ul><li>Крупные долгосрочные проекты, которые имеют слабую интеграцию с платформой. </li></ul>
  28. 28. Структура отдела <ul><li>Разработчики. Развитие платформы и ключевых модулей, срочные задачи. </li></ul><ul><li>Разработчики-стажеры. Выполнение срочных задач, обучение в долгосрочных проектах. </li></ul>
  29. 29. Структура отдела <ul><li>Администрирование. </li></ul><ul><ul><li>Сторонняя организация. </li></ul></ul><ul><ul><li>Система тикетов. </li></ul></ul><ul><ul><li>Оповещения о проводимых работах. </li></ul></ul><ul><ul><li>Регламент обновления ПО </li></ul></ul><ul><ul><li>Zabbix, рассылка slow logs | Maatkit </li></ul></ul>
  30. 30. Проблемы <ul><li>Выход из строя оборудования </li></ul><ul><li>Скачок посещаемости, DDoS </li></ul><ul><li>Вирусы </li></ul><ul><li>Проблемы на канале интернет-провайдера </li></ul><ul><li>Рост количества проектов и их сложности </li></ul>
  31. 31. Решения <ul><li>Дублирование узлов, балансировка </li></ul><ul><li>Увеличение времени кеша на фронте </li></ul><ul><li>Регулярная смена паролей пользователей </li></ul><ul><li>BGP </li></ul><ul><li>Подпроекты, аналитики, подрядчики </li></ul>
  32. 32. Перспективы <ul><li>Создание региональных площадок, CDN </li></ul><ul><li>Перенос подсистем на отдельные сервера </li></ul><ul><li>Повышение качества кода, организация нагрузочного тестирования, приемка </li></ul><ul><li>Архитектура диспетчер — шина данных !new </li></ul>
  33. 33. <ul><li>Спасибо за внимание! </li></ul><ul><li>Вопросы? </li></ul>

×