Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Ошибки проектирования
высоконагруженных проектов
и как их избежать
Максим Ехлаков
Десятки проблемных мест
Архитектура
• распределение логики, данные, ...
Клиент
• дизайн, UX, фреймворки, ...
Сервер
• среда исполнения, фреймворки, ...
СУБД
• структура, логика, транзакции, ...
Сотни проблемных мест
Интерфейсы
• протоколы, форматы данных, время, ...
Статистика
• сбор, хранение, анализ, ...
Тяжелый контент
• прием и отдача, сборка мусора ...
Бекап
• объекты, восстановление, ...
Архитектура
• распределение логики, данные, ...
Клиент
• дизайн, UX, фреймворки, ...
Сервер
• среда исполнения, фреймворки, ...
СУБД
• структура, логика, транзакции, ...
Тысячи проблемных мест
Масштабирование
• медленное, быстрое, ...
Мониторинг
• сбор, хранение, анализ, ...
Безопасность
• сертификаты, анализ уязвимостей, ...
Управление
• методология, целеполагание, ...
Интерфейсы
• протоколы, форматы данных, время, ...
Статистика
• сбор, хранение, анализ, ...
Тяжелый контент
• прием и отдача, сборка мусора ...
Бекап
• объекты, восстановление, ...
Архитектура
• распределение логики, данные, ...
Клиент
• дизайн, 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
Еще нет: MongoDB (2009), NodeJS (2009), Composer (2012), …
«Уральский портал»: архитектура
Web
Web
backend
DB
«Уральский портал»: архитектура
• Вертикальное масштабирование, IBM zSeries (AIX)
• Сервер приложений IBM Websphere (Java EE); Spring Framework
• СУБД Oracle
• Бекап на ленту
«Уральский портал»: результаты
• В пике несколько тысяч пользователей онлайн
• Самый популярный раздел портала — форум
• Сервис закрыт через ~два года после старта
«Уральский портал»
~2006–2009 гг.
ЦА — все абоненты интернета в уральском регионе (до 10 млн чел)
Цель — замыкание абонентского трафика
Суть — информационно-развлекательный портал
Ложная цель
Ложные цели
Очевидные цели
Бизнес-цели
Производительность
UX
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framework
• СУБД Oracle
• Бекап на ленту
Неправильно на старте
Масштабирование
Горизонтальное
Бонус: кластеризация
и распределение нагрузки by design
Вертикальное
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framework
• СУБД Oracle
• Бекап на ленту
Неправильно на старте
Среда исполнения
PHP
В 2017 г. — также JS, Go
Java EE
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framework
• СУБД Oracle
• Бекап на ленту
Неподходящая база
База данных
Денормализация
SQL, NoSQL, Key-value
Транзакционная RDBMS
Один проект — одна база
✗ ✓
«Уральский портал»: архитектура
• Вертикальное масштабирование
• Сервер приложений IBM Websphere (Java EE); Spring Framework
• СУБД Oracle
• Бекап на ленту
Негодный бекап
Бекап
Специализированные решенияСтандартные
низкоуровневые решения
✗ ✓
«Уральский портал»: технические проблемы
• Низкая надежность оборудования
• Медленное восстановление после аварий
• Отсутствие быстрого масштабирования
«Уральский портал»: технические проблемы
• Низкая надежность оборудования
• Медленное восстановление после аварий
• Отсутствие быстрого масштабирования
• Прицеп: медленный цикл разработки
«Уральский портал»: выводы
Корни зла
1. Ложные цели
a. Делаем ненужное
b. Идем не туда
Корни зла
1. Ложные цели
a. Делаем ненужное
b. Идем не туда
2. Инерция мышления
a. Знакомые инструменты
b. Знакомые паттерны
c. «Синдром утенка»
Корни зла
1. Ложные цели
a. Делаем ненужное
b. Идем не туда
2. Инерция мышления
a. Знакомые инструменты
b. Знакомые паттерны
c. «Синдром утенка»
3. Мода
Как избежать ошибок?
Как избежать ошибок?
• НЕ использовать готовые решения и подходы
Что делать, чтобы избежать ошибок
• НЕ использовать готовые решения и подходы
• НЕ использовать популярные решения
Что делать, чтобы избежать ошибок
• НЕ использовать готовые решения и подходы
• НЕ использовать популярные решения
• НЕ использовать очевидные решения
Что делать, чтобы избежать ошибок
• НЕ использовать готовые решения и подходы
• НЕ использовать популярные решения
• НЕ использовать очевидные решения
• т. е. ВСЕГДА анализировать принимаемые решения
Кейс: 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.name/phalcon/
OneTwoRent: СУБД
База подбирается под задачу, а не задача решается под базу
• Горячие данные MongoDB
• Медленные данные MySQL
• Исторические данные Clickhouse
OneTwoRent: СУБД
База подбирается под задачу, а не задача решается под базу
• Горячие данные MongoDB
• Медленные данные MySQL
• Исторические данные Clickhouse
Объем
данных
Частота
обращений
OneTwoRent: архитектура
• Сильно денормализованная схема данных
• Отложенная и предварительная обработка
• Многослойное кэширование
Спасибо за внимание!
Максим Ехлаков

More Related Content

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