SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
Аверин Сергей, Badoo
Распространенные ошибки
применения баз данных
• Социальная сеть для знакомств с новыми людьми
• В Top-200 Alexa c 2007 года
• 180+ миллионов зарегистрированных пользователей
• 150+ тысяч новых пользователей в день
• 3+ миллиона фотографий загружаются ежедневно
• 2+ тысячи серверов
• 30+ тысяч запросов в секунду к бекендам
• MySQL, PHP, C(++), Linux, nginx, PHP-fpm, memcache
— это:
7 советов стартапам
1. Масштабирование
Масштабирование
• Стартап тратит кучу сил и времени на «готовность» к highload,
большому масштабированию
• Тратим большие ресурсы без быстрой отдачи
• Сложные вопросы не рассматриваются по причине того, что
мало опыта или проблемы еще не понятны
Масштабирование
• Стартап тратит кучу сил и времени на «готовность» к highload,
большому масштабированию
• Тратим большие ресурсы без быстрой отдачи
• Сложные вопросы не рассматриваются по причине того, что
мало опыта или проблемы еще не понятны
На самом деле, это предполагет, что ваши бизнес-метрики
тоже вырастут в десятки и сотни раз, а архитектура
сохранится
Масштабирование
Что имеем
Масштабирование
Что рассчитываем получить
Масштабирование
Способ масштабирования
Масштабирование
• «Серебряной пули» масштабирования нет
• Проблемы будут уникальными для вашего проекта
• Понадобится творческое решение
• И многое придется переделывать
Масштабирование
• Для стартапа главными ценностями являются быстрый старт и
дешевизна изменений
• Начните с простых, быстрых и несложных решений «по
рецепту»
• Клиенты → опыт → понимание, какая архитектура нужна
К. О. предупреждает: истиной для 100%
случаев не является
2. Отказоустойчивость
Отказоустойчивость
• При проектировании архитектуры проблемы нижних уровней во
внимание не принимаются
• Железо, человеческий фактор, внешние риски и т. д.
• Взаимосвязанность сбоев
• В рамках одного сервера на практике не бывает
Отказоустойчивость
Как это сделано в Баду, на примере пользовательских данных:
Выделенные БД-серверы
• проверенного вендора
• резервирование по питанию
• RAID 1+0
Отказоустойчивость
Как это сделано в Баду, на примере пользовательских данных:
Софт
• фаервол
• Percona Server
• разные права доступа
• chroot-окружение
Отказоустойчивость
Как это сделано в Баду, на примере пользовательских данных:
Архитектура
• запись в транзакции, на один сервер
• синхронизация с другим ДЦ через общую очередь
3. БД c запасом на вырост
БД c запасом на вырост
• Выбирается БД без большого запаса фич, которые могут
понадобиться в будущем
• Ни один стартап не становился огромным в один день
• Узкоспециализированные БД → теряется гибкость
• NoSQL → нет возможности делать сложные вещи худо-бедно,
но ценой малых затрат на кодирование
4. БД — хранилище событий
БД — хранилище событий
Использование БД как хранилища событий чаще всего
оправдано только ленью
Распространенные use case’ы:
• события, порожденные транзакциями
• события, которые должны надежно доставляться
• события, которые можно потерять
БД — хранилище событий
Cпециализированный движок — RabbitMQ, Kestrel, Scribe, и даже
Redis:
• скорость
• простота
• фичи
• масштабируемость
БД — хранилище событий
В Баду для некоторых задач используем Scribe:
• своя обертка с агрегацией данных, вставкой в БД
• меньше сетевых соединений
• передаем данные между ДЦ
• гибкие настройки
• при сбоях сохраняет данные локально
• очень быстрый
Старые песни о главном
5. Поиск
Поиск
• Либо быстро, просто, плохо
• Либо используем бесплатный движок —
Sphinx, Solr, Lucene/ElasticSearch
Поиск
99% случаев — быстро, просто, плохо:
SELECT `id`, `body` FROM `entries` WHERE `body` LIKE '%one
%'
Поиск
99% случаев — быстро, просто, плохо:
SELECT `id`, `body` FROM `entries` WHERE `body` LIKE '%one
%'
SELECT `id`, `body` FROM `entries` WHERE `body` RLIKE
'[[:<:]]one[[:>:]]'
http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-
sql
Поиск
99% случаев — быстро, просто, плохо:
Some people, when confronted with a problem, think
“I know, I’ll use regular expressions.”
Now they have two problems.
— Jamie Zawinsky
Поиск
99% случаев — быстро, просто, плохо:
• потом используем MySQL FULLTEXT Index
• для простых решений прекрасно работает обратный индекс
• Но с полноценным поиском по тексту проблема в том, что
просто плохо ищет =)
• а также: мало фич, медленно, хуже масштабируется
Поиск
99% случаев — быстро, просто, плохо:
• а для каких-то задач просто неприменимо
Тест Percona: индекс по всем статьям Википедии.
2,5 млн записей, 15 Гб текста на одном сервере
• Sphinx: 20 минут
• MySQL: админ уснул через 6 часов, так и не дождавшись
http://www.percona.com/files//presentations/opensql2008_sphinx.pdf
Поиск
Используйте специализированный софт:
• проще в разработке
• быстрее
• больше возможностей
• масштабируется
• а главное, лучше ищет
6. Сильная consistency
Сильная consistency
• Не всегда нужна в вебе
• Часто сложно достигаема
• Особенно, когда данные в один сервер не помещаются и надо
что-то придумывать
Сильная consistency
• Eventual consistency рулит
• Можно писать в базу выборочно или писать агрегированные
данные, не нагружая БД
• Денормализация может дать большой прирост
производительности
• Важно знать меру, и что мы теряем, а что получаем
Сильная consistency
Чтобы не получилось так:
SQL DB = ‘A consistent transactional datastore with schema guarantees
that uses relational algebra to access normalized tables.’
Сильная consistency
Чтобы не получилось так:
+ добавляем slave — репликация
Сильная consistency
Чтобы не получилось так:
+ добавляем slave — репликация
+ мемкеш
Сильная consistency
Чтобы не получилось так:
+ добавляем slave — репликация
+ мемкеш
+ добавляем еще slave’ов — репликация репликации
Сильная consistency
Чтобы не получилось так:
+ добавляем slave — репликация
+ мемкеш
+ добавляем еще slave’ов — репликация репликации
+ шардинг
Сильная consistency
Чтобы не получилось так:
+ добавляем slave — репликация
+ мемкеш
+ добавляем еще slave’ов — репликация репликации
+ шардинг
+ один столбец на таблицу, храним в нем сериализованный
объект
Сильная consistency
Чтобы не получилось так:
SQL DB = ‘A consistent transactional datastore with schema guarantees
that uses relational algebra to access normalized tables.’
Сильная consistency
Чтобы не получилось так:
SQL DB = ‘A consistent transactional datastore with schema guarantees
that uses relational algebra to access normalized tables.’
Много данных кривые руки
Сильная consistency
Чтобы не получилось так:
SQL DB = ‘A consistent transactional datastore with schema guarantees
that uses relational algebra to access normalized tables.’
‘A consistent transactional datastore with schema guarantees that uses
relational algebra to access normalized tables.’
= datastore with access to data, лучше и не скажешь
http://www.youtube.com/watch?v=zAbFRiyT3LU
Много данных кривые руки
7. Используйте хорошо
изученные инструменты
Используйте хорошо
изученные инструменты
• Неизвестность → опасность
• Выше скорость разработки
• Не поддавайтесь просто так на моду NoSQL
Используйте хорошо
изученные инструменты
“Психологическая” популярность NoSQL:
• marketing hype
• мало знаний в области SQL: ACID, CAP, 3 НФ, транзакции
• пытается сделать вид, что БД-специалист не нужен
Используйте хорошо
изученные инструменты
“Психологическая” популярность NoSQL:
Идеальная БД для программиста
• хранит объекты классов приложения (сериализация)
• работает быстро (чтобы можно было похвастаться друзьям)
• обо всем остальном заботится сама
Используйте хорошо
изученные инструменты
“Психологическая” популярность NoSQL:
Выбор БД
• техн. менеджмент спускает вопрос на тормозах, хотя это его
задача
• БД выбирает тот самый программист
• Выбираете NoSQL — понимайте, почему вы это делаете
К. О. предупреждает: так бывает далеко не
всегда
Используйте хорошо
изученные инструменты
NoSQL:
− запись в один поток
− memory-mapped files, IO scheduling не для БД
− один индекс на запрос
− не очень гибкий шардинг
− производительность тюнится только на уровне ОС
− нет атомарности на уровне одного запроса
− иногда скудный мониторинг, статистика
Используйте хорошо
изученные инструменты
NoSQL:
− зачастую приходится писать кучу довольно скучного кода на
уровне приложения
+ чаще всего быстрее SQL-баз
+ проще развертывать, особенно шардинг
+ нет схемы, ALTER TABLE забыто, как страшный сон
Используйте хорошо
изученные инструменты
SQL:
− медленнее
− сложнее
(−) много каверзных настроек
− в редких случаях непредсказуемо работает
(−) позволяет писать медленные/плохие запросы
Используйте хорошо
изученные инструменты
SQL:
+ более популярно, язык у всех на 80% совпадает
+ хорошо изучено, стабильно
+ оптимизировано хранение данных
+ куча рычагов оптимизации
+ constraint'ы, триггеры, хранимые процедуры
+ ACID
+ B-Tree, R-Tree, GIN, GIST, hash-индексы
Используйте хорошо
изученные инструменты
SQL:
(+) Join'ы, которые зло, но иногда выручают
+ очень навороченный оптимизатор запросов
+ параллельное исполнение (под)запросов
+ многоуровневое кеширование
+ статистика, мониторинг
+ можно писать сложные запросы, не перенося логику в код
приложения
EVERYBODY LIES
Выводов нет, думайте своей головой!
Вопросы?
Аверин Сергей
twitter.com/ryba_xek
s@averin.ru
averin.ru/slides/
We’re hiring!

Contenu connexe

Tendances

Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...HappyDev
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Ontico
 
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupАндрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupMail.ru Group
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Tanya Denisyuk
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностейAleksey Solntsev
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцMikhail Tabunov
 
High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)Pavel Alexeev
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comOntico
 
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Кирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практикеКирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практикеTanya Denisyuk
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминHOWWEDOIT
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchИлья Середа
 

Tendances (18)

Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupАндрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяцКак мы строили аналитическую платформу на несколько миллиардов событии в месяц
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
 
High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)High load++2016.highlights (dropbox+clickhouse)
High load++2016.highlights (dropbox+clickhouse)
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.com
 
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Кирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практикеКирилл Алешин, Ламбда Архитектура на практике
Кирилл Алешин, Ламбда Архитектура на практике
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearch
 

Similaire à Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения баз данных".

Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Tanya Denisyuk
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)Roman Dvornov
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, PerconaOntico
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...Alexey Zinoviev
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Ontico
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest
 

Similaire à Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения баз данных". (20)

Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
CodeFest 2012. Сапегин А. — Архитектура сайта Alawar.ru с учетом высоких нагр...
 

Plus de Badoo Development

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationBadoo Development
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUBadoo Development
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерBadoo Development
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, AvitoBadoo Development
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicBadoo Development
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentBadoo Development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityBadoo Development
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхBadoo Development
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноBadoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruBadoo Development
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooBadoo Development
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Badoo Development
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоадаBadoo Development
 

Plus de Badoo Development (20)

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel Automation
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RU
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.Браузер
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 

Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения баз данных".

  • 1. Аверин Сергей, Badoo Распространенные ошибки применения баз данных
  • 2. • Социальная сеть для знакомств с новыми людьми • В Top-200 Alexa c 2007 года • 180+ миллионов зарегистрированных пользователей • 150+ тысяч новых пользователей в день • 3+ миллиона фотографий загружаются ежедневно • 2+ тысячи серверов • 30+ тысяч запросов в секунду к бекендам • MySQL, PHP, C(++), Linux, nginx, PHP-fpm, memcache — это:
  • 5. Масштабирование • Стартап тратит кучу сил и времени на «готовность» к highload, большому масштабированию • Тратим большие ресурсы без быстрой отдачи • Сложные вопросы не рассматриваются по причине того, что мало опыта или проблемы еще не понятны
  • 6. Масштабирование • Стартап тратит кучу сил и времени на «готовность» к highload, большому масштабированию • Тратим большие ресурсы без быстрой отдачи • Сложные вопросы не рассматриваются по причине того, что мало опыта или проблемы еще не понятны На самом деле, это предполагет, что ваши бизнес-метрики тоже вырастут в десятки и сотни раз, а архитектура сохранится
  • 10. Масштабирование • «Серебряной пули» масштабирования нет • Проблемы будут уникальными для вашего проекта • Понадобится творческое решение • И многое придется переделывать
  • 11. Масштабирование • Для стартапа главными ценностями являются быстрый старт и дешевизна изменений • Начните с простых, быстрых и несложных решений «по рецепту» • Клиенты → опыт → понимание, какая архитектура нужна К. О. предупреждает: истиной для 100% случаев не является
  • 13. Отказоустойчивость • При проектировании архитектуры проблемы нижних уровней во внимание не принимаются • Железо, человеческий фактор, внешние риски и т. д. • Взаимосвязанность сбоев • В рамках одного сервера на практике не бывает
  • 14. Отказоустойчивость Как это сделано в Баду, на примере пользовательских данных: Выделенные БД-серверы • проверенного вендора • резервирование по питанию • RAID 1+0
  • 15. Отказоустойчивость Как это сделано в Баду, на примере пользовательских данных: Софт • фаервол • Percona Server • разные права доступа • chroot-окружение
  • 16. Отказоустойчивость Как это сделано в Баду, на примере пользовательских данных: Архитектура • запись в транзакции, на один сервер • синхронизация с другим ДЦ через общую очередь
  • 17. 3. БД c запасом на вырост
  • 18. БД c запасом на вырост • Выбирается БД без большого запаса фич, которые могут понадобиться в будущем • Ни один стартап не становился огромным в один день • Узкоспециализированные БД → теряется гибкость • NoSQL → нет возможности делать сложные вещи худо-бедно, но ценой малых затрат на кодирование
  • 19. 4. БД — хранилище событий
  • 20. БД — хранилище событий Использование БД как хранилища событий чаще всего оправдано только ленью Распространенные use case’ы: • события, порожденные транзакциями • события, которые должны надежно доставляться • события, которые можно потерять
  • 21. БД — хранилище событий Cпециализированный движок — RabbitMQ, Kestrel, Scribe, и даже Redis: • скорость • простота • фичи • масштабируемость
  • 22. БД — хранилище событий В Баду для некоторых задач используем Scribe: • своя обертка с агрегацией данных, вставкой в БД • меньше сетевых соединений • передаем данные между ДЦ • гибкие настройки • при сбоях сохраняет данные локально • очень быстрый
  • 23. Старые песни о главном
  • 25. Поиск • Либо быстро, просто, плохо • Либо используем бесплатный движок — Sphinx, Solr, Lucene/ElasticSearch
  • 26. Поиск 99% случаев — быстро, просто, плохо: SELECT `id`, `body` FROM `entries` WHERE `body` LIKE '%one %'
  • 27. Поиск 99% случаев — быстро, просто, плохо: SELECT `id`, `body` FROM `entries` WHERE `body` LIKE '%one %' SELECT `id`, `body` FROM `entries` WHERE `body` RLIKE '[[:<:]]one[[:>:]]' http://www.slideshare.net/billkarwin/practical-full-text-search-with-my- sql
  • 28. Поиск 99% случаев — быстро, просто, плохо: Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. — Jamie Zawinsky
  • 29. Поиск 99% случаев — быстро, просто, плохо: • потом используем MySQL FULLTEXT Index • для простых решений прекрасно работает обратный индекс • Но с полноценным поиском по тексту проблема в том, что просто плохо ищет =) • а также: мало фич, медленно, хуже масштабируется
  • 30. Поиск 99% случаев — быстро, просто, плохо: • а для каких-то задач просто неприменимо Тест Percona: индекс по всем статьям Википедии. 2,5 млн записей, 15 Гб текста на одном сервере • Sphinx: 20 минут • MySQL: админ уснул через 6 часов, так и не дождавшись http://www.percona.com/files//presentations/opensql2008_sphinx.pdf
  • 31. Поиск Используйте специализированный софт: • проще в разработке • быстрее • больше возможностей • масштабируется • а главное, лучше ищет
  • 33. Сильная consistency • Не всегда нужна в вебе • Часто сложно достигаема • Особенно, когда данные в один сервер не помещаются и надо что-то придумывать
  • 34. Сильная consistency • Eventual consistency рулит • Можно писать в базу выборочно или писать агрегированные данные, не нагружая БД • Денормализация может дать большой прирост производительности • Важно знать меру, и что мы теряем, а что получаем
  • 35. Сильная consistency Чтобы не получилось так: SQL DB = ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’
  • 36. Сильная consistency Чтобы не получилось так: + добавляем slave — репликация
  • 37. Сильная consistency Чтобы не получилось так: + добавляем slave — репликация + мемкеш
  • 38. Сильная consistency Чтобы не получилось так: + добавляем slave — репликация + мемкеш + добавляем еще slave’ов — репликация репликации
  • 39. Сильная consistency Чтобы не получилось так: + добавляем slave — репликация + мемкеш + добавляем еще slave’ов — репликация репликации + шардинг
  • 40. Сильная consistency Чтобы не получилось так: + добавляем slave — репликация + мемкеш + добавляем еще slave’ов — репликация репликации + шардинг + один столбец на таблицу, храним в нем сериализованный объект
  • 41. Сильная consistency Чтобы не получилось так: SQL DB = ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’
  • 42. Сильная consistency Чтобы не получилось так: SQL DB = ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’ Много данных кривые руки
  • 43. Сильная consistency Чтобы не получилось так: SQL DB = ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’ ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’ = datastore with access to data, лучше и не скажешь http://www.youtube.com/watch?v=zAbFRiyT3LU Много данных кривые руки
  • 45. Используйте хорошо изученные инструменты • Неизвестность → опасность • Выше скорость разработки • Не поддавайтесь просто так на моду NoSQL
  • 46. Используйте хорошо изученные инструменты “Психологическая” популярность NoSQL: • marketing hype • мало знаний в области SQL: ACID, CAP, 3 НФ, транзакции • пытается сделать вид, что БД-специалист не нужен
  • 47. Используйте хорошо изученные инструменты “Психологическая” популярность NoSQL: Идеальная БД для программиста • хранит объекты классов приложения (сериализация) • работает быстро (чтобы можно было похвастаться друзьям) • обо всем остальном заботится сама
  • 48. Используйте хорошо изученные инструменты “Психологическая” популярность NoSQL: Выбор БД • техн. менеджмент спускает вопрос на тормозах, хотя это его задача • БД выбирает тот самый программист • Выбираете NoSQL — понимайте, почему вы это делаете К. О. предупреждает: так бывает далеко не всегда
  • 49. Используйте хорошо изученные инструменты NoSQL: − запись в один поток − memory-mapped files, IO scheduling не для БД − один индекс на запрос − не очень гибкий шардинг − производительность тюнится только на уровне ОС − нет атомарности на уровне одного запроса − иногда скудный мониторинг, статистика
  • 50. Используйте хорошо изученные инструменты NoSQL: − зачастую приходится писать кучу довольно скучного кода на уровне приложения + чаще всего быстрее SQL-баз + проще развертывать, особенно шардинг + нет схемы, ALTER TABLE забыто, как страшный сон
  • 51. Используйте хорошо изученные инструменты SQL: − медленнее − сложнее (−) много каверзных настроек − в редких случаях непредсказуемо работает (−) позволяет писать медленные/плохие запросы
  • 52. Используйте хорошо изученные инструменты SQL: + более популярно, язык у всех на 80% совпадает + хорошо изучено, стабильно + оптимизировано хранение данных + куча рычагов оптимизации + constraint'ы, триггеры, хранимые процедуры + ACID + B-Tree, R-Tree, GIN, GIST, hash-индексы
  • 53. Используйте хорошо изученные инструменты SQL: (+) Join'ы, которые зло, но иногда выручают + очень навороченный оптимизатор запросов + параллельное исполнение (под)запросов + многоуровневое кеширование + статистика, мониторинг + можно писать сложные запросы, не перенося логику в код приложения
  • 54. EVERYBODY LIES Выводов нет, думайте своей головой!