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.

Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (ITSumma)

167 views

Published on

РИТ++ 2017, HighLoad Junior
Зал Сингапур, 6 июня, 13:00

Тезисы:
http://junior.highload.ru/2017/abstracts/2732.html

В докладе я поделюсь нашим опытом разработки Project1917 - исторического проекта в реальном времени в формате социальной сети. Каждый web-программист мечтает написать свой фреймворк, CMS или соцсеть, и современный стек технологий дает настолько широкий выбор инструментов, что очень легко построить переусложненное архитектурное решение. ...

Published in: Engineering
  • Be the first to comment

Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (ITSumma)

  1. 1. Как сделать сложное простым. История создания Проект1917 Сергей Спорышев ITSumma
  2. 2. Спорышев Сергей Руководитель отдела разработки высоконагруженных проектов, ITSumma
  3. 3. 300 миллионов уникальных посетителей в сутки на поддерживаемых сайтах:
  4. 4. Каждый программист хочет написать свою социальную сеть (игру) за 2 дня
  5. 5. 28 июня 2016
  6. 6. « … лучшая социальная сеть в истории: все пользователи давно умерли … »
  7. 7. Проект1917 • Познавательный проект, выполненный в формате социальной сети
  8. 8. Проект1917 • Познавательный проект, выполненный в формате социальной сети • Все посты основаны на реальных документах, письмах, публицистических материалах
  9. 9. Проект1917 • Познавательный проект, выполненный в формате социальной сети • Все посты основаны на реальных документах, письмах, публицистических материалах • Пользователи имеют возможность комментировать, «лайкать» и делиться материалами в других социальных сетях
  10. 10. Проект1917 Конкретные дата и время релиза: 14 ноября 2016 15:00
  11. 11. 28 июня 7 августа Начало заполнения контентом. Верстка
  12. 12. 28 июня 7 августа Доработки админки. Привязка данных Сентябрь
  13. 13. 28 июня 7 августа Работа с пользователями. Шеры, лайки, комментарии Октябрь Сентябрь
  14. 14. 28 июня 7 августа Нагрузочное тестирование Октябрь Сентябрь 7 ноября
  15. 15. 28 июня 7 августа Запуск проекта Октябрь Сентябрь 14 ноября 7 ноября
  16. 16. 28 июня Push-уведомления 14 ноября 20 ноября
  17. 17. 28 июня Локализация 14 ноября 20 ноября Декабрь
  18. 18. Принцип работы Команда
  19. 19. Принцип работы. Команда
  20. 20. Принцип работы. Команда • No rocket science
  21. 21. Принцип работы. Команда • No rocket science
  22. 22. Принцип работы. Команда • No rocket science • «Я хочу все переписать»
  23. 23. Принцип работы. Команда • No rocket science • «Я хочу все переписать» •ПМ, 3 программиста, 2 системных администратора, 2 тестировщика
  24. 24. Стэк
  25. 25. Стэк
  26. 26. Стэк • Nginx + php-fpm
  27. 27. Стэк • Nginx + php-fpm • Mysql 5.7
  28. 28. Стэк • Nginx + php-fpm • Mysql 5.7 • Laravel (php7)
  29. 29. Стэк • Nginx + php-fpm • Mysql 5.7 • Laravel (php7) • Angular 1.5
  30. 30. Стэк • Nginx + php-fpm • Mysql 5.7 • Laravel (php7) • Angular 1.5 • Imagemagic
  31. 31. Стэк • Nginx + php-fpm • Mysql 5.7 • Laravel (php7) • Angular 1.5 • Imagemagic • FFMpeg
  32. 32. Стэк • Nginx + php-fpm • Mysql 5.7 • Laravel (php7) • Angular 1.5 • Imagemagic • FFMpeg • Memcached
  33. 33. Стэк • Nginx + php-fpm • Mysql 5.7 • Laravel (php7) • Angular 1.5 • Imagemagic • FFMpeg • Memcached • Gulp + own tasks
  34. 34. 28 июня 7 августа Админка
  35. 35. Админка •L5-repository (RESTful API)
  36. 36. Админка •L5-repository (RESTful API) •SPA + ngResource
  37. 37. Админка •L5-repository (RESTful API) •SPA + ngResource •JS-cache
  38. 38. Админка •Angular-компоненты
  39. 39. Админка •Angular-компоненты •Разделение разделов/наборов изменений
  40. 40. Админка •Angular-компоненты •Разделение разделов/наборов изменений •Новый компонент – в среднем час
  41. 41. Админка •Angular-компоненты •Разделение разделов/наборов изменений •Новый компонент – в среднем час •Новый раздел – в среднем день
  42. 42. 28 июня 7 августа Сентябрь Фронт
  43. 43. Фронт •Поиск, фильтрация данных – l5-repository
  44. 44. Фронт •Поиск, фильтрация данных – l5-repository •Использование сервисов для определенных блоков сайта
  45. 45. Фронт •Поиск, фильтрация данных – l5-repository •Использование сервисов для определенных блоков сайта •Singleton-объекты
  46. 46. Фронт •Поиск, фильтрация данных – l5-repository •Использование сервисов для определенных блоков сайта •Singleton-объекты •Структурирование view-компонентов для многоразового использования
  47. 47. Фронт • Всю статичную информацию выводим сразу (nginx-cache)
  48. 48. Фронт • Всю статичную информацию выводим сразу (nginx-cache) • API для уникальной и динамической информации
  49. 49. Фронт • Всю статичную информацию выводим сразу (nginx-cache) • API для уникальной и динамической информации • Динамическая подгрузка – html (+ кэш)
  50. 50. Фронт • Всю статичную информацию выводим сразу (nginx-cache) • API для уникальной и динамической информации • Динамическая подгрузка – html (+ кэш) • Минимизация использования и/или оптимизация angular, bindonce
  51. 51. Фронт • Всю статичную информацию выводим сразу (nginx-cache) • API для уникальной и динамической информации • Динамическая подгрузка – html (+ кэш) • Минимизация использования и/или оптимизация angular, bindonce • Оптимизация и ресайзинг изображений средствами nginx (+ CDN)
  52. 52. 28 июня 7 августа Октябрь Сентябрь Лайки, шеры, комментарии
  53. 53. Лайки, шеры, комментарии •Many-to-many
  54. 54. Лайки, шеры, комментарии •Many-to-many •Pivot = отдельная сущность
  55. 55. Лайки, шеры, комментарии •Many-to-many •Pivot = отдельная сущность •No morph-by-many, has-many-through
  56. 56. Лайки, шеры, комментарии •Many-to-many •Pivot = отдельная сущность •No morph-by-many, has-many-through •Методы-мутаторы
  57. 57. Лайки, шеры, комментарии •Localstorage (cookie)
  58. 58. Лайки, шеры, комментарии •Localstorage (cookie) •No cache for /api/user
  59. 59. Лайки, шеры, комментарии •Localstorage (cookie) •No cache for /api/user •Если понадобится – Laravel event-channels + node.js
  60. 60. Лайки, шеры, комментарии •Страницы-заглушки
  61. 61. Лайки, шеры, комментарии •Страницы-заглушки •Nginx-редиректы для ботов
  62. 62. Лайки, шеры, комментарии •Страницы-заглушки •Nginx-редиректы для ботов •Генератор изображений
  63. 63. Лайки, шеры, комментарии •Страницы-заглушки •Nginx-редиректы для ботов •Генератор изображений •Свой механизм подсчета
  64. 64. 28 июня 7 августа Октябрь Сентябрь 14 ноября 7 ноября Ничто не предвещало беды…
  65. 65. PUSH-уведомления
  66. 66. PUSH-уведомления Цена ошибки – домен и база подписчиков
  67. 67. PS Во время создания этих двух скриншотов ни один домен не пострадал
  68. 68. PUSH-уведомления •Firebase
  69. 69. PUSH-уведомления •Firebase •Cookie, uuid – перепривязка токенов
  70. 70. PUSH-уведомления •Firebase •Cookie, uuid – перепривязка токенов •Смотрим в документацию
  71. 71. PUSH-уведомления •Firebase •Cookie, uuid – перепривязка токенов •Смотрим в документацию •Laravel-FCM
  72. 72. 28 июня 7 августа Октябрь Сентябрь 14 ноября 7 ноября УСПЕЛИ!
  73. 73. 28 июня 14 ноября Декабрь Локализация (за 2 дня)
  74. 74. Локализация за 2 дня •$_SERVER[‘locale’] (.ru / .com)
  75. 75. Локализация за 2 дня •$_SERVER[‘locale’] (.ru / .com) •«Зеркала» сущностей + умное копирование
  76. 76. Локализация за 2 дня •$_SERVER[‘locale’] (.ru / .com) •«Зеркала» сущностей + умное копирование •Встроенные механизмы локализации Laravel
  77. 77. Живем дальше • Specials, games, tests
  78. 78. Живем дальше • Specials, games, tests • До сих пор хочешь переписать – энергию в мирных целях
  79. 79. Выводы Сложное сделать простым – легко, простое сделать сложным – еще легче
  80. 80. Выводы Революция не всегда приводит к хорошему
  81. 81. Выводы Учитесь на СВОИХ ошибках
  82. 82. Выводы Не гонитесь за модой
  83. 83. Выводы Не создавайте себе выдуманных проблем
  84. 84. Спорышев Сергей • https://www.itsumma.ru/ • ssporyshev@itsumma.ru • https://telegram.me/sergei_sporyshev • http://uptime.community/ru/index

×