Как создавался project1917 и как мы выдерживаем 1000 rps на...
TRANSCRIPT
![Page 1: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/1.jpg)
Как создавался Project1917 и как мы
выдерживаем 1000 RPS на одном
сервере
Спорышев Сергей. ITSumma
![Page 2: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/2.jpg)
Спорышев Сергей
![Page 3: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/3.jpg)
![Page 4: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/4.jpg)
Содержание
1. О проекте
2. Организация работы. Команда
3. Стек используемых технологий
4. База данных. Отношения между моделями
![Page 5: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/5.jpg)
Содержание
5. Администраторская / редакторская часть
6. Публичная часть
7. «Впрод»
8. Что из этого получилось и как жить дальше?
![Page 6: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/6.jpg)
О проекте
![Page 7: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/7.jpg)
« … лучшая социальная сеть в истории:
все пользователи давно умерли … »
![Page 8: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/8.jpg)
О проекте
‣ Познавательный проект, выполненный в формате социальной сети,
где активными пользователями являются реальные исторические
личности жившие в 1917 году
‣ Все посты основаны на реальных документах, письмах,
публицистических материалах
‣ Пользователи «нашего времени» имеют возможность
комментировать, «лайкать» и делиться материалами в других
социальных сетях
![Page 9: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/9.jpg)
Организация работы. Команда
![Page 10: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/10.jpg)
![Page 11: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/11.jpg)
Организация работы. Команда
‣ Конкретные день и время релиза, 0 % вероятности изменения срока
‣ Команда: менеджер проекта, 3 разработчика, 2 системных
администратора, 2 тестировщика
‣ Методология Scrum
![Page 12: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/12.jpg)
Организация работы. Команда
‣ Общение с заказчиком – только ПМ и ведущий разработчик
‣ Feature Branch
‣ No Rocket Science
![Page 13: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/13.jpg)
Стек используемых технологий
![Page 14: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/14.jpg)
![Page 15: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/15.jpg)
Стек используемых технологий
‣ PHP 7 + Nginx + Mysql
‣ Memcached, ffmpeg, image
magic
‣ Angular JS 1.5.8
‣ Gulp (Laravel elixir)
![Page 16: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/16.jpg)
База данных.
Отношения между моделями
![Page 17: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/17.jpg)
База данных.
Отношения между моделями
‣ No morph-by-many, has-many-through
‣ Некоторые отношения many-to-many – отдельная модель
‣ Методы-мутаторы
![Page 18: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/18.jpg)
База данных.
Отношения между моделями
‣ Транзакции, «мягкое удаление»
‣ Индексы
‣ Кэширование
![Page 19: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/19.jpg)
Администраторская / редакторская
часть
![Page 20: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/20.jpg)
Администраторская часть
‣ Пакет Repository, RESTFful API
‣ События (сброс/перегенерация кэша, синхронизация отношений)
‣ Очереди
‣ Постобработка входных данных
![Page 21: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/21.jpg)
Администраторская часть
‣ JS-навигация
‣ Resource, repository & cache
‣ Разделение на компоненты
![Page 22: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/22.jpg)
Администраторская часть
‣ Максимально быстрая работа
‣ Функциональность важнее внешнего вида
‣ Создание нового раздела – не больше дня
‣ Создание нового компонента – не больше часа
![Page 23: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/23.jpg)
![Page 24: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/24.jpg)
Публичная часть
![Page 25: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/25.jpg)
Публичная часть
‣ Поиск, фильтрация данных – репозитории
‣ Использование сервисов для определенных блоков сайта
‣ Singleton-объекты
‣ Минимизация пользовательского ввода
![Page 26: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/26.jpg)
Публичная часть
‣ Структурирование view-компонентов для многоразового
использования
‣ Всю статичную информацию выводим сразу
‣ API для уникальной и динамической информации
![Page 27: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/27.jpg)
Публичная часть
‣ БЭМ
‣ Минимизация и оптимизация angular, bindonce
‣ Динамическая подгрузка – html
‣ Localstorage, cookies
![Page 28: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/28.jpg)
Публичная часть
‣ Минификация и обфускация css/js
‣ Оптимизация и ресайзинг изображений средствами nginx
‣ Раздача статики с помощью CDN
![Page 29: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/29.jpg)
![Page 30: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/30.jpg)
ВПРОД
![Page 31: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/31.jpg)
![Page 32: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/32.jpg)
ВПРОД
‣ Кэширование на уровне nginx + «белый список» url’ов
‣ Резервное копирование
‣ Мониторинг важных показателей, алерты
![Page 33: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/33.jpg)
ВПРОД
‣ Нагрузочное тестирование – 700-900 RPS с выключенным кэшем,
1200-1400 RPS с включенным кэшем
‣ Резервный сервер – минимизация времени переключения
‣ Uptime – 99.93%
![Page 34: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/34.jpg)
Что из этого получилось и как жить
дальше?
![Page 35: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/35.jpg)
![Page 36: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/36.jpg)
Что из этого получилось и
как жить дальше?
‣ Предугадываем «хочу» и «хочу потом» клиента
‣ Яндекс Облако – плохо
‣ Последняя неделя – экстрим разработка 24/7
![Page 37: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/37.jpg)
Что из этого получилось и
как жить дальше?
‣ Первая неделя – стабильно 400 RPS
‣ Мощный социальный отклик
‣ Множество новых готовых компонентов
![Page 38: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/38.jpg)
![Page 39: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/39.jpg)
Что из этого получилось и
как жить дальше?
‣ Англоязычная версия сайта
‣ В случае роста нагрузки – апгрейд сервера (8 ядер – 24 ядра)
‣ При продолжении роста нагрузки – горизонтальное
масштабирование
![Page 40: Как создавался Project1917 и как мы выдерживаем 1000 RPS на одном сервере](https://reader034.vdocuments.net/reader034/viewer/2022051404/5a655ed67f8b9a23688b4669/html5/thumbnails/40.jpg)
Спорышев Сергей