40
Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере Спорышев Сергей. ITSumma

Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

  • Upload
    itsumma

  • View
    80

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Как создавался Project1917 и как мы

выдерживаем 1000 RPS на одном

сервере

Спорышев Сергей. ITSumma

Page 2: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Спорышев Сергей

Page 3: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 4: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Содержание

1. О проекте

2. Организация работы. Команда

3. Стек используемых технологий

4. База данных. Отношения между моделями

Page 5: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Содержание

5. Администраторская / редакторская часть

6. Публичная часть

7. «Впрод»

8. Что из этого получилось и как жить дальше?

Page 6: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

О проекте

Page 7: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

« … лучшая социальная сеть в истории:

все пользователи давно умерли … »

Page 8: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

О проекте

‣ Познавательный проект, выполненный в формате социальной сети,

где активными пользователями являются реальные исторические

личности жившие в 1917 году

‣ Все посты основаны на реальных документах, письмах,

публицистических материалах

‣ Пользователи «нашего времени» имеют возможность

комментировать, «лайкать» и делиться материалами в других

социальных сетях

Page 9: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Организация работы. Команда

Page 10: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 11: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Организация работы. Команда

‣ Конкретные день и время релиза, 0 % вероятности изменения срока

‣ Команда: менеджер проекта, 3 разработчика, 2 системных

администратора, 2 тестировщика

‣ Методология Scrum

Page 12: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Организация работы. Команда

‣ Общение с заказчиком – только ПМ и ведущий разработчик

‣ Feature Branch

‣ No Rocket Science

Page 13: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Стек используемых технологий

Page 14: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 15: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Стек используемых технологий

‣ PHP 7 + Nginx + Mysql

‣ Memcached, ffmpeg, image

magic

‣ Angular JS 1.5.8

‣ Gulp (Laravel elixir)

Page 16: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

База данных.

Отношения между моделями

Page 17: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

База данных.

Отношения между моделями

‣ No morph-by-many, has-many-through

‣ Некоторые отношения many-to-many – отдельная модель

‣ Методы-мутаторы

Page 18: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

База данных.

Отношения между моделями

‣ Транзакции, «мягкое удаление»

‣ Индексы

‣ Кэширование

Page 19: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Администраторская / редакторская

часть

Page 20: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Администраторская часть

‣ Пакет Repository, RESTFful API

‣ События (сброс/перегенерация кэша, синхронизация отношений)

‣ Очереди

‣ Постобработка входных данных

Page 21: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Администраторская часть

‣ JS-навигация

‣ Resource, repository & cache

‣ Разделение на компоненты

Page 22: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Администраторская часть

‣ Максимально быстрая работа

‣ Функциональность важнее внешнего вида

‣ Создание нового раздела – не больше дня

‣ Создание нового компонента – не больше часа

Page 23: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 24: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Публичная часть

Page 25: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Публичная часть

‣ Поиск, фильтрация данных – репозитории

‣ Использование сервисов для определенных блоков сайта

‣ Singleton-объекты

‣ Минимизация пользовательского ввода

Page 26: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Публичная часть

‣ Структурирование view-компонентов для многоразового

использования

‣ Всю статичную информацию выводим сразу

‣ API для уникальной и динамической информации

Page 27: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Публичная часть

‣ БЭМ

‣ Минимизация и оптимизация angular, bindonce

‣ Динамическая подгрузка – html

‣ Localstorage, cookies

Page 28: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Публичная часть

‣ Минификация и обфускация css/js

‣ Оптимизация и ресайзинг изображений средствами nginx

‣ Раздача статики с помощью CDN

Page 29: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 30: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

ВПРОД

Page 31: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 32: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

ВПРОД

‣ Кэширование на уровне nginx + «белый список» url’ов

‣ Резервное копирование

‣ Мониторинг важных показателей, алерты

Page 33: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

ВПРОД

‣ Нагрузочное тестирование – 700-900 RPS с выключенным кэшем,

1200-1400 RPS с включенным кэшем

‣ Резервный сервер – минимизация времени переключения

‣ Uptime – 99.93%

Page 34: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Что из этого получилось и как жить

дальше?

Page 35: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 36: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Что из этого получилось и

как жить дальше?

‣ Предугадываем «хочу» и «хочу потом» клиента

‣ Яндекс Облако – плохо

‣ Последняя неделя – экстрим разработка 24/7

Page 37: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Что из этого получилось и

как жить дальше?

‣ Первая неделя – стабильно 400 RPS

‣ Мощный социальный отклик

‣ Множество новых готовых компонентов

Page 38: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере
Page 39: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Что из этого получилось и

как жить дальше?

‣ Англоязычная версия сайта

‣ В случае роста нагрузки – апгрейд сервера (8 ядер – 24 ядра)

‣ При продолжении роста нагрузки – горизонтальное

масштабирование

Page 40: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере

Спорышев Сергей