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.
Ошибки проектирования
высоконагруженных проектов
и как их избежать
Максим Ехлаков
Десятки проблемных мест
Архитектура
• распределение логики, данные, ...
Клиент
• дизайн, UX, фреймворки, ...
Сервер
• сред...
Сотни проблемных мест
Интерфейсы
• протоколы, форматы данных, время, ...
Статистика
• сбор, хранение, анализ, ...
Тяжелый ...
Тысячи проблемных мест
Масштабирование
• медленное, быстрое, ...
Мониторинг
• сбор, хранение, анализ, ...
Безопасность
• с...
Ошибки проектирования
Источник https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20100036670.pdf
Роль личности
Проектирование
Разработка
Кейс: «Уральский портал»
~2006–2009 гг.
ЦА — все абоненты интернета в уральском регионе (до 10 млн чел).
Цель — замыкание ...
Контекст 2006–2007
• Java EE 5
• Spring 2.0
• PHP 5.2
• Symphony, Codeigniter, Zend Framework (первые версии)
• MySQL 5.0
...
«Уральский портал»: архитектура
Web
Web
backend
DB
«Уральский портал»: архитектура
• Вертикальное масштабирование, IBM zSeries (AIX)
• Сервер приложений IBM Websphere (Java ...
«Уральский портал»: результаты
• В пике несколько тысяч пользователей онлайн
• Самый популярный раздел портала — форум
• С...
«Уральский портал»
~2006–2009 гг.
ЦА — все абоненты интернета в уральском регионе (до 10 млн чел)
Цель — замыкание абонент...
Ложные цели
Очевидные цели
Бизнес-цели
Производительность
UX
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framewo...
Масштабирование
Горизонтальное
Бонус: кластеризация
и распределение нагрузки by design
Вертикальное
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framewo...
Среда исполнения
PHP
В 2017 г. — также JS, Go
Java EE
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framewo...
База данных
Денормализация
SQL, NoSQL, Key-value
Транзакционная RDBMS
Один проект — одна база
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framewo...
Бекап
Специализированные решенияСтандартные
низкоуровневые решения
✗ ✓
«Уральский портал»: технические проблемы
• Низкая надежность оборудования
• Медленное восстановление после аварий
• Отсутс...
«Уральский портал»: технические проблемы
• Низкая надежность оборудования
• Медленное восстановление после аварий
• Отсутс...
«Уральский портал»: выводы
Корни зла
1. Ложные цели
a. Делаем ненужное
b. Идем не туда
Корни зла
1. Ложные цели
a. Делаем ненужное
b. Идем не туда
2. Инерция мышления
a. Знакомые инструменты
b. Знакомые паттер...
Корни зла
1. Ложные цели
a. Делаем ненужное
b. Идем не туда
2. Инерция мышления
a. Знакомые инструменты
b. Знакомые паттер...
Как избежать ошибок?
Как избежать ошибок?
• НЕ использовать готовые решения и подходы
Что делать, чтобы избежать ошибок
• НЕ использовать готовые решения и подходы
• НЕ использовать популярные решения
Что делать, чтобы избежать ошибок
• НЕ использовать готовые решения и подходы
• НЕ использовать популярные решения
• НЕ ис...
Что делать, чтобы избежать ошибок
• НЕ использовать готовые решения и подходы
• НЕ использовать популярные решения
• НЕ ис...
Кейс: OneTwoRent.com
Агрегатор объявлений об аренде всего
ЦА — весь мир (на старте — Россия и СНГ)
Релиз 12.07.2017
OneTwoRent: техническая цель
• Время отклика сервера < 50 мс
• UX: три клика
OneTwoRent: архитектура
Mobile
Web
Web
backend
CDN
Mobile API Core Fast DB
Cache Slow DB
Large DB
OneTwoRent: архитектура
Микросервисная
• PHP+Phalcon бекенд веб-версии
• NodeJS бекенд мобильного приложения
• Go отдельны...
Почему Phalcon?
Источники - https://www.slideshare.net/oleksandrtorosh/phalcon-v2-1-27168312
http://thinking.bohdanvorona....
OneTwoRent: СУБД
База подбирается под задачу, а не задача решается под базу
• Горячие данные MongoDB
• Медленные данные My...
OneTwoRent: СУБД
База подбирается под задачу, а не задача решается под базу
• Горячие данные MongoDB
• Медленные данные My...
OneTwoRent: архитектура
• Сильно денормализованная схема данных
• Отложенная и предварительная обработка
• Многослойное кэ...
Спасибо за внимание!
Максим Ехлаков
Upcoming SlideShare
Loading in …5
×

Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)

462 views

Published on

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

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


Наиболее типичные ошибки, которые совершаются при создании высоконагруженных продуктов: выбор используемых языков, фреймворков, СУБД и других инструментов. Каковы причины совершения этих ошибок, и как их избежать.

Во время проектирования и разработки высоконагруженных программных продуктов существует большой соблазн применить классические подходы. Однако не все они будут полезны, а какие-то даже вредны. При этом цена каждой такой ошибки всегда будет очень большой.

На примере нескольких реальных проектов мы поговорим об ошибках проектирования, разработки и управления, о том, почему они возникли, и о решениях, которые позволили (или не позволили) преодолеть их.

Published in: Engineering
  • Be the first to comment

Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)

  1. 1. Ошибки проектирования высоконагруженных проектов и как их избежать Максим Ехлаков
  2. 2. Десятки проблемных мест Архитектура • распределение логики, данные, ... Клиент • дизайн, UX, фреймворки, ... Сервер • среда исполнения, фреймворки, ... СУБД • структура, логика, транзакции, ...
  3. 3. Сотни проблемных мест Интерфейсы • протоколы, форматы данных, время, ... Статистика • сбор, хранение, анализ, ... Тяжелый контент • прием и отдача, сборка мусора ... Бекап • объекты, восстановление, ... Архитектура • распределение логики, данные, ... Клиент • дизайн, UX, фреймворки, ... Сервер • среда исполнения, фреймворки, ... СУБД • структура, логика, транзакции, ...
  4. 4. Тысячи проблемных мест Масштабирование • медленное, быстрое, ... Мониторинг • сбор, хранение, анализ, ... Безопасность • сертификаты, анализ уязвимостей, ... Управление • методология, целеполагание, ... Интерфейсы • протоколы, форматы данных, время, ... Статистика • сбор, хранение, анализ, ... Тяжелый контент • прием и отдача, сборка мусора ... Бекап • объекты, восстановление, ... Архитектура • распределение логики, данные, ... Клиент • дизайн, UX, фреймворки, ... Сервер • среда исполнения, фреймворки, ... СУБД • структура, логика, транзакции, ...
  5. 5. Ошибки проектирования Источник https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20100036670.pdf
  6. 6. Роль личности Проектирование Разработка
  7. 7. Кейс: «Уральский портал» ~2006–2009 гг. ЦА — все абоненты интернета в уральском регионе (до 10 млн чел). Цель — замыкание абонентского трафика Суть — информационно-развлекательный портал
  8. 8. Контекст 2006–2007 • Java EE 5 • Spring 2.0 • PHP 5.2 • Symphony, Codeigniter, Zend Framework (первые версии) • MySQL 5.0 Еще нет: MongoDB (2009), NodeJS (2009), Composer (2012), …
  9. 9. «Уральский портал»: архитектура Web Web backend DB
  10. 10. «Уральский портал»: архитектура • Вертикальное масштабирование, IBM zSeries (AIX) • Сервер приложений IBM Websphere (Java EE); Spring Framework • СУБД Oracle • Бекап на ленту
  11. 11. «Уральский портал»: результаты • В пике несколько тысяч пользователей онлайн • Самый популярный раздел портала — форум • Сервис закрыт через ~два года после старта
  12. 12. «Уральский портал» ~2006–2009 гг. ЦА — все абоненты интернета в уральском регионе (до 10 млн чел) Цель — замыкание абонентского трафика Суть — информационно-развлекательный портал Ложная цель
  13. 13. Ложные цели Очевидные цели Бизнес-цели Производительность UX ✗ ✓
  14. 14. «Уральский портал»: архитектура • Вертикальное масштабирование • Сервер приложений IBM Websphere (Java EE); Spring Framework • СУБД Oracle • Бекап на ленту Неправильно на старте
  15. 15. Масштабирование Горизонтальное Бонус: кластеризация и распределение нагрузки by design Вертикальное ✗ ✓
  16. 16. «Уральский портал»: архитектура • Вертикальное масштабирование • Сервер приложений IBM Websphere (Java EE); Spring Framework • СУБД Oracle • Бекап на ленту Неправильно на старте
  17. 17. Среда исполнения PHP В 2017 г. — также JS, Go Java EE ✗ ✓
  18. 18. «Уральский портал»: архитектура • Вертикальное масштабирование • Сервер приложений IBM Websphere (Java EE); Spring Framework • СУБД Oracle • Бекап на ленту Неподходящая база
  19. 19. База данных Денормализация SQL, NoSQL, Key-value Транзакционная RDBMS Один проект — одна база ✗ ✓
  20. 20. «Уральский портал»: архитектура • Вертикальное масштабирование • Сервер приложений IBM Websphere (Java EE); Spring Framework • СУБД Oracle • Бекап на ленту Негодный бекап
  21. 21. Бекап Специализированные решенияСтандартные низкоуровневые решения ✗ ✓
  22. 22. «Уральский портал»: технические проблемы • Низкая надежность оборудования • Медленное восстановление после аварий • Отсутствие быстрого масштабирования
  23. 23. «Уральский портал»: технические проблемы • Низкая надежность оборудования • Медленное восстановление после аварий • Отсутствие быстрого масштабирования • Прицеп: медленный цикл разработки
  24. 24. «Уральский портал»: выводы
  25. 25. Корни зла 1. Ложные цели a. Делаем ненужное b. Идем не туда
  26. 26. Корни зла 1. Ложные цели a. Делаем ненужное b. Идем не туда 2. Инерция мышления a. Знакомые инструменты b. Знакомые паттерны c. «Синдром утенка»
  27. 27. Корни зла 1. Ложные цели a. Делаем ненужное b. Идем не туда 2. Инерция мышления a. Знакомые инструменты b. Знакомые паттерны c. «Синдром утенка» 3. Мода
  28. 28. Как избежать ошибок?
  29. 29. Как избежать ошибок? • НЕ использовать готовые решения и подходы
  30. 30. Что делать, чтобы избежать ошибок • НЕ использовать готовые решения и подходы • НЕ использовать популярные решения
  31. 31. Что делать, чтобы избежать ошибок • НЕ использовать готовые решения и подходы • НЕ использовать популярные решения • НЕ использовать очевидные решения
  32. 32. Что делать, чтобы избежать ошибок • НЕ использовать готовые решения и подходы • НЕ использовать популярные решения • НЕ использовать очевидные решения • т. е. ВСЕГДА анализировать принимаемые решения
  33. 33. Кейс: OneTwoRent.com Агрегатор объявлений об аренде всего ЦА — весь мир (на старте — Россия и СНГ) Релиз 12.07.2017
  34. 34. OneTwoRent: техническая цель • Время отклика сервера < 50 мс • UX: три клика
  35. 35. OneTwoRent: архитектура Mobile Web Web backend CDN Mobile API Core Fast DB Cache Slow DB Large DB
  36. 36. OneTwoRent: архитектура Микросервисная • PHP+Phalcon бекенд веб-версии • NodeJS бекенд мобильного приложения • Go отдельные сильно изолированные сервисы
  37. 37. Почему Phalcon? Источники - https://www.slideshare.net/oleksandrtorosh/phalcon-v2-1-27168312 http://thinking.bohdanvorona.name/phalcon/
  38. 38. OneTwoRent: СУБД База подбирается под задачу, а не задача решается под базу • Горячие данные MongoDB • Медленные данные MySQL • Исторические данные Clickhouse
  39. 39. OneTwoRent: СУБД База подбирается под задачу, а не задача решается под базу • Горячие данные MongoDB • Медленные данные MySQL • Исторические данные Clickhouse Объем данных Частота обращений
  40. 40. OneTwoRent: архитектура • Сильно денормализованная схема данных • Отложенная и предварительная обработка • Многослойное кэширование
  41. 41. Спасибо за внимание! Максим Ехлаков

×