Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Основные принципы устройства PostgreSQL, ключевые принципы правильного конфигурирования и подходы к оптимизации под высокие нагрузки — обо всем этом Илья поведает на специальном мастер-классе, посвященном "внутренностям" СУБД. Курс предназначен как для опытных профессионалов, так и для "молодых бойцов". Полученные в ходе прослушивания семинара знания пригодятся не только на практике. Они также призваны увеличить эффективность восприятия слушателями и, как следствие, полезность докладов, запланированных на второй день конференции.
Как база работает с памятью и файловой системой? Для чего предназначено версионирование? Что такое транзакции, как они устроены и почему полезны? Как строятся индексы и что происходит с запросом во время его выполнения? Что такое репликация и почему ее нельзя применять для backup/recovery? На все эти вопросы, и не только, ответит Илья.
Разобравшись с основами и "матчастью", мы перейдем к самому интересному: "тюнингу" базы в нагруженных системах, начиная с классического "Почему у меня тормозит запрос?" и заканчивая кручением "гаек" системных процессов "посгреса" под объемы данных и транзакционные нагрузки, соизмеримые с "big data".
Доклад "Remote Highload" c Highload++-2016
Созданием еще одной высоконагруженной системы сегодня уже сложно кого-то удивить. Как насчет высоконагруженной системы, которая была создана и эксплуатируется 100% удаленной командой, работающей в 5 часовых поясах?
В докладе пойдет речь о команде Virtustream (Dell Technologies), которая отвечает за Virtustream Storage Cloud.
Экзабайты данных, десятки тысяч серверов, сотни гигабит в секунду, сотни тысяч и миллионы запросов в секунду, 20 датацентров по всему миру и, при этом, команда разработчиков из 15 человек, это возможно?
В докладе мы поговорим о разных аспектах - от культуры разработки и процесса найма до контейнерной платформы запуска микросервисов и выбора языка программирования.
Почему не работает Scrum, и плохо работает парное программирование? Как Mesos, Marathon, Consul и Calico делают возможным выкладывание нового сервиса за 5 минут? Почему каждый разработчик должен иметь доступ в production?
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Ontico
Проблема мониторинга целостности технологических процессов на индустриальных объектах связана с обработкой большого объема показаний различных датчиков (температура, давление, управляющие сигналы и т.д.). Каждый из таких сенсоров порождает временной ряд, который может быть использован как для потоковой обработки, так и для проведения исторического анализа и расследования инцидентов. Здесь возникает задача хранения показаний за некоторый период времени. При этом потоки данных могут достигать десятков тысяч показаний в секунду, а период хранения достигать нескольких месяцев или даже лет. При таких условиях необходимо предельно аккуратно выбирать СУБД для хранения временных рядов, которая правильно впишется в нефункциональные требования.
В качестве конкурсантов выступят: OpenTSDB, InfluxDB, MongoDB, PostgreSQL и еще несколько "чёрных лошадок".
В докладе будет рассмотрен многокритериальный подход к выбору с учетом таких показателей как:
* зависимость пропускной способности на запись от различных параметров;
* время исполнения запроса на чтение;
* степень сжатия данных;
* пропускная способность при нагрузочном тестировании.
В докладе предлагается не только привести получившиеся числа, но и обсудить почему они получились именно такими.
Екатерина Войденко "Горизонтальное масштабирование MySQL"Yandex
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Я.Субботник в Санкт-Петербурге
О докладе:
Мы попытаемся понять, что делать, если наша база стала слишком большой. Немного поговорим про архитектурные моменты. Рассмотрим некоторые схемы шардирования, обсудим партиционирование и для чего оно нужно, а также затронем балансировку нагрузки.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
RTB и его проблематика должны быть знакомы участникам конференции — мало кто сегодня не слышал об этом способе получить много krps с жесткими ограничениями на время генерации ответа.
Вот и компания Qmobi решила поучаствовать в этой гонке и отхватить свой кусок пирога под названием “рынок мобильной рекламы”.
Анализ имеющихся вариантов показал, что Go должен прекрасно подойти для этой задачи. О том, на основании каких соображений мы сделали такой вывод, и какие из этих соображений прошли проверку практикой, а какие — нет, будет рассказано в докладе.
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Ontico
В докладе я расскажу о следующем:
+ почему тема доклада не оговорка, а абсолютно реальная вещь;
+ что можно извлечь из результатов теста помимо «да/нет»;
+ в каких случаях «количество» = «качество»;
+ когда «один в поле не воин»;
+ немного о том, зачем тестировщику нужна матстатистика;
+ как избежать случайностей в результатах;
+ «буря в стакане» или масштабируем highload в docker/openvz;
+ почему фиксация запросов в тестах приводит к фиксации сервиса на продакшене;
+ а также всё вышеперечисленное на примерах наших проектов.
Доклад "Remote Highload" c Highload++-2016
Созданием еще одной высоконагруженной системы сегодня уже сложно кого-то удивить. Как насчет высоконагруженной системы, которая была создана и эксплуатируется 100% удаленной командой, работающей в 5 часовых поясах?
В докладе пойдет речь о команде Virtustream (Dell Technologies), которая отвечает за Virtustream Storage Cloud.
Экзабайты данных, десятки тысяч серверов, сотни гигабит в секунду, сотни тысяч и миллионы запросов в секунду, 20 датацентров по всему миру и, при этом, команда разработчиков из 15 человек, это возможно?
В докладе мы поговорим о разных аспектах - от культуры разработки и процесса найма до контейнерной платформы запуска микросервисов и выбора языка программирования.
Почему не работает Scrum, и плохо работает парное программирование? Как Mesos, Marathon, Consul и Calico делают возможным выкладывание нового сервиса за 5 минут? Почему каждый разработчик должен иметь доступ в production?
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Ontico
Проблема мониторинга целостности технологических процессов на индустриальных объектах связана с обработкой большого объема показаний различных датчиков (температура, давление, управляющие сигналы и т.д.). Каждый из таких сенсоров порождает временной ряд, который может быть использован как для потоковой обработки, так и для проведения исторического анализа и расследования инцидентов. Здесь возникает задача хранения показаний за некоторый период времени. При этом потоки данных могут достигать десятков тысяч показаний в секунду, а период хранения достигать нескольких месяцев или даже лет. При таких условиях необходимо предельно аккуратно выбирать СУБД для хранения временных рядов, которая правильно впишется в нефункциональные требования.
В качестве конкурсантов выступят: OpenTSDB, InfluxDB, MongoDB, PostgreSQL и еще несколько "чёрных лошадок".
В докладе будет рассмотрен многокритериальный подход к выбору с учетом таких показателей как:
* зависимость пропускной способности на запись от различных параметров;
* время исполнения запроса на чтение;
* степень сжатия данных;
* пропускная способность при нагрузочном тестировании.
В докладе предлагается не только привести получившиеся числа, но и обсудить почему они получились именно такими.
Екатерина Войденко "Горизонтальное масштабирование MySQL"Yandex
Екатерина Войденко "Горизонтальное масштабирование MySQL"
Я.Субботник в Санкт-Петербурге
О докладе:
Мы попытаемся понять, что делать, если наша база стала слишком большой. Немного поговорим про архитектурные моменты. Рассмотрим некоторые схемы шардирования, обсудим партиционирование и для чего оно нужно, а также затронем балансировку нагрузки.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
RTB и его проблематика должны быть знакомы участникам конференции — мало кто сегодня не слышал об этом способе получить много krps с жесткими ограничениями на время генерации ответа.
Вот и компания Qmobi решила поучаствовать в этой гонке и отхватить свой кусок пирога под названием “рынок мобильной рекламы”.
Анализ имеющихся вариантов показал, что Go должен прекрасно подойти для этой задачи. О том, на основании каких соображений мы сделали такой вывод, и какие из этих соображений прошли проверку практикой, а какие — нет, будет рассказано в докладе.
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Ontico
В докладе я расскажу о следующем:
+ почему тема доклада не оговорка, а абсолютно реальная вещь;
+ что можно извлечь из результатов теста помимо «да/нет»;
+ в каких случаях «количество» = «качество»;
+ когда «один в поле не воин»;
+ немного о том, зачем тестировщику нужна матстатистика;
+ как избежать случайностей в результатах;
+ «буря в стакане» или масштабируем highload в docker/openvz;
+ почему фиксация запросов в тестах приводит к фиксации сервиса на продакшене;
+ а также всё вышеперечисленное на примерах наших проектов.
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
Highload, высокие нагрузки — популярный и дорогой buzzword, ради него проводятся огромные конференции, разработчики указывают его в резюме, претендуя на большие деньги, а работодатели в вакансиях, обещая более интересную работу.
В докладе я показываю, что современная производительность серверов позволяет не думать о нагрузке для 95% "highload" проектов, знания из конференций не нужны в реальной жизни. Для разработки почти любого, даже очень крупного сайта достаточно PHP+MySQL, здравого смысла и совсем-совсем базовых правил, не обсуждающихся даже на Highload Junior.
План выступления.
1. Ликбез о производительности. RPS, latency — что это значит, как считается, к каким числам надо стремиться? Из чего складывается время отклика? База данных, фронтенд, верстка или мобильное приложение.
2. Замеры достижимой производительности теплого LAMP-ового сервера. Бенчмарк без индексов в базе.
Бенчмарк с индексами в базе. Сравнение с требуемыми цифрами.
3. Перечисление возможных детских ошибок, которые могут испортить эти результаты в жизни. Все эти ошибки объясняются не в академии Highload или институте Highload Junior, а в школе.
Примеры ошибок:
- выгрузка всей базы, а не нужных 20 элементов;
- паразитный вызов тяжелой страницы;
- плохой хостинг;
- чужие тормозные элементы;
- неадекватный объём html/js-кода.
4. Отсутствие детских ошибок позволяет эффективно программировать 90% крупных сайтов, 3-4 приема превратят 90% в 95%.
- nginx;
- репликация;
- кэширование и предрасчет.
Этому, кстати, тоже почти не учат на highload junior, но этому я вас уже научил.
5. Примеры продуктов, в которых на самом деле нужен highload?
- Очень-очень-очень много хитов, дешевле highload, чем новое железо.
- Очень много очен�
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
NodeJS — достаточно молодой фреймворк, и пока не каждый решается использовать его в продакшене, а тем более в highload.
В течение последнего года мы разрабатывали проект DMP (Data Management Platform), используя NodeJS для прототипирования. На данный момент проект в большей степени все еще остался на JS и без труда справляется с текущими нагрузками в 10 000 запросов в секунду.
В докладе я расскажу, почему остановились именно на NodeJS и совсем не жалеем об этом.
К сожалению, никакое дело не обходится без граблей и костылей. Я расскажу обо всех встретившихся проблемах и уделю особое внимание проблемам со спагетти-кодом, утечками и нехваткой памяти. Как мы убили немало времени, тщетно ища источник проблем, и какие правила мы составили для себя на будущее, чтобы не повторить своих ошибок.
Расскажу немного о применении микросервисов для решения проблемы спагетти-кода.
И, как итог, опишу ряд рекомендаций, которые помогут избежать большой траты времени при использовании NodeJS.
Банки.ру — проект с 10-летней историей. В разные времена мы испытывали разные нагрузки. Портал перестраивался под новые требования как логически, так и технологически, что-то мы меняли в авральном режиме, что-то — эволюционным путём. Сейчас в среднем в день у нас примерно 2КК просмотра страниц, т.е. мы уже не маленькие, но ещё и не совсем большие.
Я хочу поговорить об оптимизации, её своевременности, и о субоптимизации, о том, что далеко не всегда лучшие практики разработки нагруженных систем идут на пользу бизнесу.
Посмотрим примеры и поищем ответы на вопросы:
1) Настолько ли ваш highload — highload?
2) Считать ли хабрэффект поводом для внедрения высоких технологий?
3) "Костыль" или "высокотехнологичное решение" — что выбрать? Плюсы и минусы.
4) Как выбрать момент для начала новой эры? Есть ли критерии, когда имеет смысл начинать оптимизировать ваше приложение и внедрять крутые штуки "по-взрослому".
5) Как можно использовать "список Бунина" для достижения очень неплохих показателей, и все ли пункты реально нужны вам?
6) Как работать с тех. долгом, чтобы он не зарастал мхом?
В заключение я расскажу про несколько примеров из жизни banki.ru в части замены технологических решений в области высоких нагрузок, и что из этого вышло.
P.S. Мнение докладчика может не совпадать с вашим, но это его опыт:)
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Демоны в большом проекте – проблемы и их решения (Redis, RabbitMQ, Skytools, Node.JS, HBase)", Александр Чистяков (ведущий разработчик Cezurity)
Аннотация
Когда команда разработчиков собирается написать новый сервис, у нее, как правило, отсутствует свободное время, но есть необходимый энтузиазм. Из-за нехватки времени многие архитектурные решения приходится принимать, руководствуясь общими соображениями, так как провести всесторонние тесты имеющихся на рынке средств в краткие сроки невозможно. Мы, специалисты компании Cezurity, начали свой проект не вчера, и уже накопили некоторый опыт использования технологий, появившихся сравнительно недавно - таких как Skytools, Node.JS, RabbitMQ и Redis. О том, какие возникли проблемы при внедрении этих средств, и какие их ограничения пришлось преодолевать и учитывать - мой доклад. Кроме того, я расскажу о новом направлении в нашей деятельности - внедрении HBase для хранения большого объема данных.
Биография
Докладчик - узкий специалист широкого профиля, относит себя к виду, называемому в современной англоязычной литературе термином "DevOps". Любит принимать участие в создании сложных систем и постоянно это делает. Никогда не работал в Яндексе, компенсировав это работой в Mail.Ru и некоторых других местах.
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 6 июня, 15:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2466.html
В этом докладе я хочу рассказать историю, с которой, скорее всего, сталкивался каждый.
История - путь проекта от стадии разработки до выкатывания его в продакшн, начала эксплуатации.
...
Ваши тесты работают медленно? Вы устали от нестабильности? Вынуждены делать много лишних действий на UI? WebDriver API не айс? На помощь спешит JS! Поговорим о том, как с помощью JS решаются проблемы при тестировании UI.
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 5 июня, 15:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2632.html
Наиболее типичные ошибки, которые совершаются при создании высоконагруженных продуктов: выбор используемых языков, фреймворков, СУБД и других инструментов. Каковы причины совершения этих ошибок, и как их избежать.
Во время проектирования и разработки высоконагруженных программных продуктов существует большой соблазн применить классические подходы. Однако не все они будут полезны, а какие-то даже вредны. При этом цена каждой такой ошибки всегда будет очень большой.
На примере нескольких реальных проектов мы поговорим об ошибках проектирования, разработки и управления, о том, почему они возникли, и о решениях, которые позволили (или не позволили) преодолеть их.
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...Ontico
1. Взаимодействие с командой сопровождения через чаты — преимущества и проблемы.
1.1. ChatOps — о чем это?
1.2. Преимущества взаимодействия и постановки задач через чаты.
1.3. Проблемы хаотичности взаимодействия.
2. Интеграция процессов технической поддержки в ChatOps.
2.1. Постановка задач.
2.2. Мониторинг.
2.3. Оперативное реагирование.
3. Наш опыт доработки Telegram для интеграции с системами постановки задач, мониторингом и мониторингом самого взаимодействия.
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Ontico
* Поговорим о рисках, подстерегающих как стартапы, так и устоявшиеся компании, отсортировав их по степени важности.
* Рассмотрим особенности cloud vs bare metal в контексте безопасности.
* Подискутируем о технических методах обеспечения безопасности, постараемся внедрить безопасность не в ущерб хайлоаду.
* Будут примеры как из моей практики, так и показательные из общемировой.
RTB и его проблематика должны быть знакомы участникам конференции - мало кто сегодня не слышал об этом способе получить много krps с жесткими ограничениями на время генерации ответа.
Вот и компания Qmobi решила поучаствовать в этой гонке и отхватить свой кусок пирога под названием “рынок мобильной рекламы”.
При первом подходе к снаряду задача выглядит довольно простой: вот запрос с критериями, вот база данных с ответами - выбирай по индексу и отвечай.
На самом деле все несколько сложнее. Начать с того, что некоторые критерии отбора - негативные. Затем мы имеем дело с выборкой по десятку индексов, каждый из которых обладает низкой cardinality. И, наконец, мы имеем дело с большими объемами: около 10М строк в исходных данных, около 10К строк в финальной выборке. Ах, нет, еще финальная выборка должна быть отсортирована по приоритету! И надо не забыть про атомарные блокировку и списание средств...
От идеи прототипа на perl пришлось отказаться еще на этапе постановки задачи :)
Итак, мы имеем задачу с интенсивным IO, высокой нагрузкой, высокими скоростями, сложными структурами данных и эвристическими алгоритмами.
Анализ имеющихся вариантов показал, что Go должен прекрасно подойти для этой задачи. О том, на основании каких соображений мы сделали такой вывод, и какие из этих соображений прошли проверку практикой, а какие - нет, будет рассказано в докладе.
Также в докладе будет рассказано о том, как сортировка была заменена случайной выборкой, и чем пришлось заплатить за то, чтобы эта замена оказалась равноценной.
Будет показано, почему мы наплевательски отнеслись к гипотетической потере 20% возможностей поучаствовать в аукционе, и почему реальный процент потерь много ниже.
Будет раскрыта роль СУБД MySQL в этом проекте, со всем блеском высокой производительности и нищетой отказоустойчивости.
Вопросы геотаргетинга, использования PostGIS и кэширования результатов поиска региона по координатам будут затронуты вскользь, как неоднократно обсуждавшиеся на этой и подобных конференциях.
А вот анатомия производительности приложения на Go будет рассмотрена подробнейшим образом - с графиками и числами.
Также подробно будут рассмотрены наши победы и поражения в борьбе со статис
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
Когда в зоне ответственности находятся несколько "похожих" по реализации и/или функционалу технических решений (сайтов, систем, проектов), волей-неволей возникает желание их унифицировать. Плюсы от такого подхода очевидны: это и экономия ресурсов разработки/тестирования/администрирования, и удобство поддержки, и полноценное общее владение кодом для всей команды разработки. Очевидно, что подобная реформа потребует значительных ресурсов и времени, но мы верим, что это "один раз", и принимаемся отстраивать сложную архитектурную конструкцию, призванную удовлетворить требования всех "объединяемых" продуктов.
Если эти продукты не подвержены изменениям, то рано или поздно все закончится хорошо, и у нас получится чудо-фреймворк. Но обычно все совсем не так. Пока мы прорабатываем классы и строим безупречные схемы взаимосвязей, мир меняется: меняются требования к продукту, новые вызовы рынка и видение менеджмента влекут за собой постоянные изменения функционала. То что было сделано вчера уже не соответствует тому, что хотят сегодня.
Это похоже на возведение песочного замка у самой кромки прибоя. В результате трудный путь превращается в изнуряющее топтание на месте, а имеющееся техническое наследие потихоньку ветшает, разрастается казуальным кодом и забирает все больше сил на поддержку.
Но проблема даже не в этом. Основная проблема в том, что мы видим причину неудач в ошибках проектирования или в несговорчивости менеджмента, не желающего пойти на уступки относительно реализации того или иного функционала. Все проще: я убежден, что ошибка была допущена при выборе пути! Но я не призываю смириться и "тащить" на себе кучу сто раз продублированного кода. Истина, как всегда, где-то посередине.
Мы не будем больше собирать все проекты в один кластер, мы попробуем построить конгломерат!
* оценим перспективы унификации и рассмотрим альтернативы;
* рассмотрим типовые препятствия, и откуда они берутся;
* поговорим о сути изменений, и какие они бывают;
* познакомимся с реальностью на основе моего личного опыта;
* обсудим, что есть "похожесть" проектов и что с этим делать.
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
Highload, высокие нагрузки — популярный и дорогой buzzword, ради него проводятся огромные конференции, разработчики указывают его в резюме, претендуя на большие деньги, а работодатели в вакансиях, обещая более интересную работу.
В докладе я показываю, что современная производительность серверов позволяет не думать о нагрузке для 95% "highload" проектов, знания из конференций не нужны в реальной жизни. Для разработки почти любого, даже очень крупного сайта достаточно PHP+MySQL, здравого смысла и совсем-совсем базовых правил, не обсуждающихся даже на Highload Junior.
План выступления.
1. Ликбез о производительности. RPS, latency — что это значит, как считается, к каким числам надо стремиться? Из чего складывается время отклика? База данных, фронтенд, верстка или мобильное приложение.
2. Замеры достижимой производительности теплого LAMP-ового сервера. Бенчмарк без индексов в базе.
Бенчмарк с индексами в базе. Сравнение с требуемыми цифрами.
3. Перечисление возможных детских ошибок, которые могут испортить эти результаты в жизни. Все эти ошибки объясняются не в академии Highload или институте Highload Junior, а в школе.
Примеры ошибок:
- выгрузка всей базы, а не нужных 20 элементов;
- паразитный вызов тяжелой страницы;
- плохой хостинг;
- чужие тормозные элементы;
- неадекватный объём html/js-кода.
4. Отсутствие детских ошибок позволяет эффективно программировать 90% крупных сайтов, 3-4 приема превратят 90% в 95%.
- nginx;
- репликация;
- кэширование и предрасчет.
Этому, кстати, тоже почти не учат на highload junior, но этому я вас уже научил.
5. Примеры продуктов, в которых на самом деле нужен highload?
- Очень-очень-очень много хитов, дешевле highload, чем новое железо.
- Очень много очен�
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
NodeJS — достаточно молодой фреймворк, и пока не каждый решается использовать его в продакшене, а тем более в highload.
В течение последнего года мы разрабатывали проект DMP (Data Management Platform), используя NodeJS для прототипирования. На данный момент проект в большей степени все еще остался на JS и без труда справляется с текущими нагрузками в 10 000 запросов в секунду.
В докладе я расскажу, почему остановились именно на NodeJS и совсем не жалеем об этом.
К сожалению, никакое дело не обходится без граблей и костылей. Я расскажу обо всех встретившихся проблемах и уделю особое внимание проблемам со спагетти-кодом, утечками и нехваткой памяти. Как мы убили немало времени, тщетно ища источник проблем, и какие правила мы составили для себя на будущее, чтобы не повторить своих ошибок.
Расскажу немного о применении микросервисов для решения проблемы спагетти-кода.
И, как итог, опишу ряд рекомендаций, которые помогут избежать большой траты времени при использовании NodeJS.
Банки.ру — проект с 10-летней историей. В разные времена мы испытывали разные нагрузки. Портал перестраивался под новые требования как логически, так и технологически, что-то мы меняли в авральном режиме, что-то — эволюционным путём. Сейчас в среднем в день у нас примерно 2КК просмотра страниц, т.е. мы уже не маленькие, но ещё и не совсем большие.
Я хочу поговорить об оптимизации, её своевременности, и о субоптимизации, о том, что далеко не всегда лучшие практики разработки нагруженных систем идут на пользу бизнесу.
Посмотрим примеры и поищем ответы на вопросы:
1) Настолько ли ваш highload — highload?
2) Считать ли хабрэффект поводом для внедрения высоких технологий?
3) "Костыль" или "высокотехнологичное решение" — что выбрать? Плюсы и минусы.
4) Как выбрать момент для начала новой эры? Есть ли критерии, когда имеет смысл начинать оптимизировать ваше приложение и внедрять крутые штуки "по-взрослому".
5) Как можно использовать "список Бунина" для достижения очень неплохих показателей, и все ли пункты реально нужны вам?
6) Как работать с тех. долгом, чтобы он не зарастал мхом?
В заключение я расскажу про несколько примеров из жизни banki.ru в части замены технологических решений в области высоких нагрузок, и что из этого вышло.
P.S. Мнение докладчика может не совпадать с вашим, но это его опыт:)
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Демоны в большом проекте – проблемы и их решения (Redis, RabbitMQ, Skytools, Node.JS, HBase)", Александр Чистяков (ведущий разработчик Cezurity)
Аннотация
Когда команда разработчиков собирается написать новый сервис, у нее, как правило, отсутствует свободное время, но есть необходимый энтузиазм. Из-за нехватки времени многие архитектурные решения приходится принимать, руководствуясь общими соображениями, так как провести всесторонние тесты имеющихся на рынке средств в краткие сроки невозможно. Мы, специалисты компании Cezurity, начали свой проект не вчера, и уже накопили некоторый опыт использования технологий, появившихся сравнительно недавно - таких как Skytools, Node.JS, RabbitMQ и Redis. О том, какие возникли проблемы при внедрении этих средств, и какие их ограничения пришлось преодолевать и учитывать - мой доклад. Кроме того, я расскажу о новом направлении в нашей деятельности - внедрении HBase для хранения большого объема данных.
Биография
Докладчик - узкий специалист широкого профиля, относит себя к виду, называемому в современной англоязычной литературе термином "DevOps". Любит принимать участие в создании сложных систем и постоянно это делает. Никогда не работал в Яндексе, компенсировав это работой в Mail.Ru и некоторых других местах.
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 6 июня, 15:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2466.html
В этом докладе я хочу рассказать историю, с которой, скорее всего, сталкивался каждый.
История - путь проекта от стадии разработки до выкатывания его в продакшн, начала эксплуатации.
...
Ваши тесты работают медленно? Вы устали от нестабильности? Вынуждены делать много лишних действий на UI? WebDriver API не айс? На помощь спешит JS! Поговорим о том, как с помощью JS решаются проблемы при тестировании UI.
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ontico
РИТ++ 2017, HighLoad Junior
Зал Сингапур, 5 июня, 15:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2632.html
Наиболее типичные ошибки, которые совершаются при создании высоконагруженных продуктов: выбор используемых языков, фреймворков, СУБД и других инструментов. Каковы причины совершения этих ошибок, и как их избежать.
Во время проектирования и разработки высоконагруженных программных продуктов существует большой соблазн применить классические подходы. Однако не все они будут полезны, а какие-то даже вредны. При этом цена каждой такой ошибки всегда будет очень большой.
На примере нескольких реальных проектов мы поговорим об ошибках проектирования, разработки и управления, о том, почему они возникли, и о решениях, которые позволили (или не позволили) преодолеть их.
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...Ontico
1. Взаимодействие с командой сопровождения через чаты — преимущества и проблемы.
1.1. ChatOps — о чем это?
1.2. Преимущества взаимодействия и постановки задач через чаты.
1.3. Проблемы хаотичности взаимодействия.
2. Интеграция процессов технической поддержки в ChatOps.
2.1. Постановка задач.
2.2. Мониторинг.
2.3. Оперативное реагирование.
3. Наш опыт доработки Telegram для интеграции с системами постановки задач, мониторингом и мониторингом самого взаимодействия.
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Ontico
* Поговорим о рисках, подстерегающих как стартапы, так и устоявшиеся компании, отсортировав их по степени важности.
* Рассмотрим особенности cloud vs bare metal в контексте безопасности.
* Подискутируем о технических методах обеспечения безопасности, постараемся внедрить безопасность не в ущерб хайлоаду.
* Будут примеры как из моей практики, так и показательные из общемировой.
RTB и его проблематика должны быть знакомы участникам конференции - мало кто сегодня не слышал об этом способе получить много krps с жесткими ограничениями на время генерации ответа.
Вот и компания Qmobi решила поучаствовать в этой гонке и отхватить свой кусок пирога под названием “рынок мобильной рекламы”.
При первом подходе к снаряду задача выглядит довольно простой: вот запрос с критериями, вот база данных с ответами - выбирай по индексу и отвечай.
На самом деле все несколько сложнее. Начать с того, что некоторые критерии отбора - негативные. Затем мы имеем дело с выборкой по десятку индексов, каждый из которых обладает низкой cardinality. И, наконец, мы имеем дело с большими объемами: около 10М строк в исходных данных, около 10К строк в финальной выборке. Ах, нет, еще финальная выборка должна быть отсортирована по приоритету! И надо не забыть про атомарные блокировку и списание средств...
От идеи прототипа на perl пришлось отказаться еще на этапе постановки задачи :)
Итак, мы имеем задачу с интенсивным IO, высокой нагрузкой, высокими скоростями, сложными структурами данных и эвристическими алгоритмами.
Анализ имеющихся вариантов показал, что Go должен прекрасно подойти для этой задачи. О том, на основании каких соображений мы сделали такой вывод, и какие из этих соображений прошли проверку практикой, а какие - нет, будет рассказано в докладе.
Также в докладе будет рассказано о том, как сортировка была заменена случайной выборкой, и чем пришлось заплатить за то, чтобы эта замена оказалась равноценной.
Будет показано, почему мы наплевательски отнеслись к гипотетической потере 20% возможностей поучаствовать в аукционе, и почему реальный процент потерь много ниже.
Будет раскрыта роль СУБД MySQL в этом проекте, со всем блеском высокой производительности и нищетой отказоустойчивости.
Вопросы геотаргетинга, использования PostGIS и кэширования результатов поиска региона по координатам будут затронуты вскользь, как неоднократно обсуждавшиеся на этой и подобных конференциях.
А вот анатомия производительности приложения на Go будет рассмотрена подробнейшим образом - с графиками и числами.
Также подробно будут рассмотрены наши победы и поражения в борьбе со статис
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
Когда в зоне ответственности находятся несколько "похожих" по реализации и/или функционалу технических решений (сайтов, систем, проектов), волей-неволей возникает желание их унифицировать. Плюсы от такого подхода очевидны: это и экономия ресурсов разработки/тестирования/администрирования, и удобство поддержки, и полноценное общее владение кодом для всей команды разработки. Очевидно, что подобная реформа потребует значительных ресурсов и времени, но мы верим, что это "один раз", и принимаемся отстраивать сложную архитектурную конструкцию, призванную удовлетворить требования всех "объединяемых" продуктов.
Если эти продукты не подвержены изменениям, то рано или поздно все закончится хорошо, и у нас получится чудо-фреймворк. Но обычно все совсем не так. Пока мы прорабатываем классы и строим безупречные схемы взаимосвязей, мир меняется: меняются требования к продукту, новые вызовы рынка и видение менеджмента влекут за собой постоянные изменения функционала. То что было сделано вчера уже не соответствует тому, что хотят сегодня.
Это похоже на возведение песочного замка у самой кромки прибоя. В результате трудный путь превращается в изнуряющее топтание на месте, а имеющееся техническое наследие потихоньку ветшает, разрастается казуальным кодом и забирает все больше сил на поддержку.
Но проблема даже не в этом. Основная проблема в том, что мы видим причину неудач в ошибках проектирования или в несговорчивости менеджмента, не желающего пойти на уступки относительно реализации того или иного функционала. Все проще: я убежден, что ошибка была допущена при выборе пути! Но я не призываю смириться и "тащить" на себе кучу сто раз продублированного кода. Истина, как всегда, где-то посередине.
Мы не будем больше собирать все проекты в один кластер, мы попробуем построить конгломерат!
* оценим перспективы унификации и рассмотрим альтернативы;
* рассмотрим типовые препятствия, и откуда они берутся;
* поговорим о сути изменений, и какие они бывают;
* познакомимся с реальностью на основе моего личного опыта;
* обсудим, что есть "похожесть" проектов и что с этим делать.
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексе...Ontico
Нет единого мнения о том, как должен себя вести хорошо дрессированный кластер, какие номера он должен показывать и что будет делать в случае катастрофы. Надежда обнаружить серебряную пулю в поиске лучших практик толкает разработчиков кластерных решений перебирать один стек за другим, менять компоненты в расчете на то, что искомая комбинация обнаружится сама собой.
Наблюдая в разной степени успешный опыт коллег, мы почти сразу остановили свой выбор на стеке от ClusterLabs, который удовлетворяет всем минимальным требованиям синхронной хореографии прямо из коробки. Обучить же наш кластер PostgreSQL простейшим танцевальным движениям оказалось не самой легкой задачей. Нас выручили идея управлять голосами кворума и математическая модель суверенной демократии.
В докладе я покажу, как именно математическая модель суверенной демократии помогла построить живучий и масштабируемый кластер PostgreSQL.
Повышение производительности приложения за счет эффективного разделения чтения и записи данных. Репликация, которая нас устроила
Презентация подготовлена по материалам прошедшего 12 сентября витебского митапа: http://meetup.gorodvitebsk.by/
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Ontico
Популярность постгреса в мире и России растет, с каждым новым релизом появляется все новая и новая функциональность, постгрес становится реальной угрозой монополии Оракл, уже подвинул Монго на поле свободных NoSQL СУБД, однако мировое сообщество ждет решения для горизонтального масштабирования. Создание постгресового кластера является крайне трудной задачей, так как постгрес является базой данных, ориентированной на целостность данных, а используемый алгоритм обеспечения конкурентности транзакций ставит серьезные челленджи перед разработчиками алгоритмов распределенных транзакций.
Оказывается, уже целых пять групп работает над этой задачей, и мы расскажем про их подходы, трудности, в том числе, и политические. Отдельно остановимся на российском опыте и нашем вкладе в решение этой задачи.
NoSQL - неспроста ли это ЖЖЖ / Даниил Подольский (inCaller.org)Ontico
NoSQL — это слово громко "жужжит".
К сожалению, оно при этом ничего не означает. Это не продукт, не технология, и даже не концепция. Это даже не подход к проектированию. Это, скорее, декларация отказа от некоторых паттернов проектирования, господствовавших в разработке клиент-серверных систем долгие годы.
На этом доклад можно было бы и закончить. Если бы мы не знали достоверно, что на свете есть люди, которые умудряются извлекать прибыль, используя NoSQL в своих проектах. Ну или сокращать убытки, по крайней мере.
Попробуем еще раз.
NoSQL — это именно декларация отказа от некоторых паттернов.
- От чего именно придется отказаться? Упомянутые паттерны так живучи совсем не случайно.
- Как это ударит по проекту? Не сомневайтесь, оно ударит, в этом мире нет ни серебряных пуль, ни бесплатного сыра.
- Какими свойствами должен обладать проект, чтобы внедрение NoSQL СУБД принесло ему пользу? Избегать NoSQL — это не трусость, это осторожность.
- Каковы сильные стороны NoSQL СУБД, и в чем профит? Выбор NoSQL — это всегда выбор в пользу меньшего зла.
- Как выбрать NoSQL СУБД под свою задачу? На http://nosql-database.org/ есть список LIST OF NOSQL DATABASES [currently >225], и даже просто прочесть его — тяжелая работа.
- Почему реальный выбор NoSQL СУБД — это выбор между Aerospike и Cassandra? Да, это провокационный вопрос, но на него есть not-so-provocative ответ.
- С какими проблемами сталкиваются разработчики и администраторы при эксплуатации "тяжелой" NoSQL базы? К сожалению, большая часть этих проблем создается именно присутствием NoSQL.
- Что можно делать с NoSQL СУБД и чего нельзя? На какие параметры производительности и отказоустойчивости можно рассчитывать? В чем особенности выбора "железа" для NoSQL?
- И �
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
Веб-сайт нужно делать так, чтобы о перипетиях его разработки и поддержки бессонными ночами через пару лет можно было рассказать на конференции Highload++, а тамошнюю аудиторию сложно удивить велосипедом с треугольными каменными колесами. Большинство разработчиков свято следуют этому принципу то ли в силу природной любознательности и трудолюбия, то ли по причине отсутствия конференции LowLoad--.
Примерно такие мысли приходят в голову практически любому специалисту по хранилищам данных, когда он видит успешный веб-проект, испытывающий стандартные проблемы с базой данных.
В этом докладе я расскажу о 10-ти очень распространенных ошибках проектирования и эксплуатации хранилища в веб-проекте — от преждевременного шардирования базы и непродуманной системы архивации ненужных данных до особенностей работы всеми любимых фреймворков. Про каждую из них я расскажу подробно и поделюсь рецептами, как такие ошибки исправлять.
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analyticsmason_s
In this talk we introduce Postgres-XL for scaling out PostgreSQL. We cover its architecture, how tables are distributed, and include a sample configuration for a small local test cluster. Finally, we discuss the differences to PostgreSQL and discuss Postgres-XL community building
OpenSource SQL Databases Enter Millions Queries per Second EraSveta Smirnova
Доклад прочитан на Highload++ 8 ноября 2016 года совместно с Фёдором Сигаевым и Анастасией Распопиной. Подготовка слайдов совместно с Александром Коротковым.
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
Широко распространено мнение, что SQL СУБД обречены быть медлительными и неповоротливыми, поскольку несут груз совместимости с предыдущими версиями. Это расхожее мнение широко эксплуатируется маркетингом NoSQL СУБД. Однако, это не всегда действительно так.
Разработка в Open Source сообществе позволяет продукту развиваться достаточно гибко, чтобы отвечать требованиям времени. В MySQL и PostgreSQL – самых популярных Open Source СУБД – недавно были проведены оптимизации для работы на больших серверах, что позволило им выполнять более миллиона SQL-запросов в секунду на одном экземпляре БД.
В данном докладе будут рассмотрены конкретные оптимизации, которые позволили добиться таких результатов, которые раньше могли бы показаться фантастическими. И можно сказать, что Open Source СУБД вошли в эру миллионов запросов в секунду.
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Yandex
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Я.Субботник в Санкт-Петербурге
О докладе:
Данные на UGC-сервисах очень быстро меняются, и у каждого пользователя они свои. Выборка этих данных – дорогостоящая операция, поскольку может определяться множеством параметров и сложными условиями. Что и как мы можем кешировать в этой непростой ситуации?
My talk on Hadoop stack operations engineering at OSPConAlex Chistyakov
My talk on Hadoop stack operations engineering at OSPCon Nov 2015 (http://www.ospcon.ru/event/prakticheskaya-konferentsiya-tekhnologii-bolshikh-dannykh_130.html)
Человеческий фактор в разработке, или ORM на noSql через JPA.Pavel Veinik
Зачем переводить работающий проект с RDBMS на noSql? Как это сделать, и как это нельзя делать? Что важнее для успеха пректа - технологическое преимущество или доверительные отношения в команде? Какова роль процесса в успехе проекта и что бывает, когда каждый член команды действует в соответствии со своими локальными интересами.
Зачем переводить работающий проект с RDBMS на noSql? Как это сделать, и как это нельзя делать? Что важнее для успешного пректа - технологическое преимущество или доверительные отношения в команде? Какова роль процесса в успехе проекта и что бывает, когда каждый член команды действует в соответствии со своими локальными интересами.
Highload++2013: TopGun - архитектура терабитной платформы DPILeonid Yuriev
Презентация с конференции HighLoad-2013 об архитектуре новой DPI платформы Петер-Сервис.
http://www.highload.ru/2013/abstracts/1178.html
Представлен обзор архитектуры многоцелевой DPI-платформы, на основе которой могут строиться как "шпионские" приложения класса СОРМ/PRISM, так и коммерческие системы PCEF/TDF (Traffic Shaping), безопасного Интернета (интеллектуальная фильтрация содержимого), таргетирования рекламы и т. д. К особенностям рассматриваемого решения можно отнести мультитерабитное масштабирование, способ балансировки, обработку "роем" (Swarm Intelligence) и аварийного восстановления (failover) посредством репликации конечных автоматов.
Roadmap:
- offtopic: кому и зачем нужен DPI?
- offtopic: законность и морально-этические вопросы.
- на какую "луну" нужно сесть, что мы хотим сделать?
- распределение трафика за счет использования коммутаторов и MAC rewrite.
- роевой интеллект (Swarm Intellegence) для управления балансировкой и обработкой данных.
- репликация конечных автоматов (виртуальных микромашин).
- распределенное "Табло" как оперативное хранилище с элементами key-value и eventual consistency, lockfree в shared memory.
- транспортный фасад, унифицирующий DPDK, netmap, Infiniband (RDMA), 0mq и zerocopy и lockfree обмен через shared memory.
История небольшого успеха с PostgreSQL – Владимир БородинYandex
В докладе речь пойдёт о том, как в Яндекс.Почту для хранения метаданных сборщиков внедрили PostgreSQL. Владимир расскажет, зачем и почему это сделали и каким образом решили масштабироваться. А также о репликации и средствах обеспечения отказоустойчивости, о возникших проблемах и способах их решения.
Similar to PG Day'14 Russia, PostgreSQL: архитектура, настройка и оптимизация, Илья Космодемьянский (20)
PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Haganderpgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
PostgreSQL supports several options for securing communications when deployed outside of the typical webserver/database combination, or in a high security environments. This talk will go into some details about the features that make this possible. The main areas discussed are:
Securing the PostgreSQL infrastructure and runtime environment.
Securing the channel between client and server using SSL, including an overview of the threats and how to secure against them.
Securing the login process with methods including LDAP, Kerberos or SSL certificates.
PG Day'14 Russia, Работа со слабо-структурированными данными в PostgreSQL, Ол...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
<сарказм> MongoDB правит бал в мире слабо-структурированных данных. Привлеченные в MongoDB инвестиции часто затмевают разум (особенно начинающих и доверчивых) разработчиков, которые с радостью бросаются в океан возможностей, предоставляемых NoSQL (это же круто!). Энтузиазм затихает после осознания того факта, что бесплатно ничего не бывает и надо писать своими руками то, что десятилетиями хорошо работает в традиционных реляционных базах данных, которые прекрасно справляются с нагрузками и данными 99% проектов, и ваш проект не входит в оставшийся один процент. </сарказм>
Мир баз данных за последние годы существенно изменился. Всеместное проникновение Интернет-технологий привело к необходимости работы с большим количеством разнородных данных в реальном времени, к чему традиционные реляционные СУБД оказались не готовы. Принято считать, что слабая масштабируемость и излишняя “жесткость” модели данных реляционных СУБД и являются основными причинами появляния и роста популярности NoSQL баз данных (далее, NoSQL).
В докладе мы остановимся на концептуальных предпосылках появления NoSQL и их классификации. Одним из “жупелов” NoSQL является поддержка типа данных JSON, который реализует документо-ориентированную модель данных. Документо-ориентированная модель данных является более гибкой и позволяет менять схему данных “на лету”, что сделать очень трудно в реляционных СУБД, особенно в системах, работающих под большой нагрузкой. Несмотря на успех NoSQL (активно распиаренный использованием в некоторых популярных Интернет-проектах), многие пользователи не готовы приносить в жертву целостность данных в угоду масштабируемости, но хотят иметь гибкость схемы данных в проверенных и надежных реляционных СУБД.
Нами была предложена и реализована поддержка документо-ориентированной модели в PostgreSQL (версия 9.4). Уже более 10 лет в PostgreSQL существует возможность работать со schema-less данными, используя наш модуль расширения hstore. Hstore предлагает хранилище вида "ключ-значение" с сохранением всех реляционных возможностей, что сделало его самым используемым
PG Day'14 Russia, Социальная сеть, которая просто работает, Владислав Ковальpgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Социальная сеть является классическим примером продукта, создаваемого людьми, движет которыми желание использовать как можно больше новомодных технологий. О последствиях, естественно, никто не задумывается. К счастью, в нужный момент было принято решение отказаться от части подобных новшеств и использовать старый-добрый PostgreSQL для создания сервиса.
Казалось бы, нет ничего хуже, чем реляционная база, для разработки социальной сети? Всем ведь хорошо известно, что типичная стратегия расширения подобного продукта заключается в горизонтальном “шардинге”, денормализации, многоуровневых слоях кеширования и прочих вещах, с которым реляционная СУБД не очень дружит.
Тем не менее, в Rubuki.com мы решили пойти наперекор трендам и сделать такую социальную сеть, где используется Rails без ORM, бизнес-логика живет в базе данных, и пользователи каждый день получают корректно отсортированную по дате появления событий новостную ленту (привет, Facebook!).
На примере реализации таких компонентов как полнотекстовый поиск, рекомендательный сервис и сервис премирования, я расскажу о нюансах разработки сети, успехах и проблемах, с которыми мы столкнулись.
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
С момента старта проекта на PostgreSQL были возложены серьёзные задачи. Это во многом предопределило успешное развитие всего продукта. Вокруг СУБД выстроены основные компоненты архитектуры, при этом сами базы берут на себя львиную долю обработки пользовательских запросов. Набор фич и расширений, легендарная надёжность PostgreSQL, наличие встроенной репликации, средств резервирования и архивирования — весь потенциал нашел своё воплощение, а наличие открытого профессионального комьюнити не оставляет шансов к неэффективной реализации.
В докладе будет дан обзор развития подсистем, сосредоточенных вокруг PostgreSQL, представлены параметры и режимы функционирования. Будут описаны успешные решения в рамках отдельного PostgreSQL-кластера и при распределенной обработке данных, приведены текущие вызовы, связанные с продолжающимся активным ростом проекта.
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
PG Day'14 Russia, PostgreSQL System Architecture, Heikki Linnakangaspgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Software architecture means a high-level view of the components of the system and their relationships. Understanding how various components work together is crucial if you want to start hacking on PostgreSQL, but also for understanding performance characteristics and run-time behavior of production systems.
Software architecture is not a single diagram, but consists of multiple views of the same system.
Process view: describing the processes at runtime and how they communicate.
Data flow: how a query passes through various parts of the system, and how the results flow back.
Data structures: how the Heap and Indexes are organized.
Source code: what's in the PostgreSQL source treem, and many more.
In this presentation, I will give an overview of the most important views necessary to understand how PostgreSQL works.
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротковpgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Регулярные выражения — мощный и широко применяемый инструмент для обработки текстовых данных. При поиске по регулярному выражению в большом наборе строк, становится актуальным вопрос о применении индекса. В то же время, использование индексов для поиска по регулярному выражению — нетривиальная задача.
Существует два основных подхода к выполнению поиска по регулярным выражениям с помощью индекса: "FREE indexing engine" [1], основанный на выделении из регулярного выражения непрерывных фрагментов текста, а также метод, разработанный для Google Code Search [2], осуществляющий рекурсивный анализ составных частей регулярного выражения, с целью выявления его атрибутов. В целом же, оба этих подхода используют обратные индексы на основе k-грам (подстрок исходной строки длины k) и различаются методом извлечения k-грам из регулярного выражения для последующего поиска по индексу.
Данный доклад представляет новый метод извлечений k-грам из регулярного выражения, основанный не на анализе исходного регулярного выражения, а на преобразовании соответствующего конечного автомата. Предлагаемый подход позволяет осуществить более полное извлечение k-грам из регулярного выражения, что подтверждается примерами. Данный подход был реализован в модуле pg_trgm СУБД PostgreSQL 9.3 [3].
PG Day'14 Russia, GIN — Stronger than ever in 9.4 and further, Александр Коро...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Доклад посвящен улучшениям в GIN-индексах в PostgreSQL 9.4 и далее, которые выводят GIN на новый уровень производительности и расширяемости. Наиболее важные улучшения:
Сжатие постинг-листов. Индексы становятся в среднем в 2 раза компактнее. При это не требуется никаких изменений со стороны opclass'ов. pg_upgrade поддерживается, индексы сжимаются "на лету".
Алгоритм быстрого сканирования GIN-индексов позволяет пропускать части больших постинг-деревьев при сканировании. Этот алгоритм кардинально улучшает скорость поиска для hstore и jsonb операторов, а также случай "частое_слово & редкое_слово" для полнотекстового поиска.
Хранение дополнительной информации в постинг-листах. Содержимое этой дополнительной информации зависит от конкретной разновидности GIN-индекса (определяется opclass'ом). Дополнительная информация может быть полезна при самых разных видах поиска: поиск по фразам, поиск по похожести массивов, обратный полнотекстовый поиск (поиск тех tsquery, которые подходят под tsvector), обратный поиск по регулярным выражением (поиск регулярных выражений, подходящих под строку), поиск по строковой "похожести" с использованием позиционных n-грам.
Ранжирование по индексу. Это улучшение позволяет возвращать результаты из индекса таким образом, как это определяет opclass. Наиболее важное применение — возвращение результатов полнотекстового поиска в порядке релевантности, кардинально снижающее загрузку IO. Но есть также и другие применения, такие как возврат массивов или строк в порядке их "похожести".
В докладе представлены результаты "бенчмарков" полнотектового поиска, использующие реальные наборы данных (6М и 15М документов) и реальные поисковые запросы, которые демонстрируют, что улучшенный полнотекстовый поиск PostgreSQL (со всеми накладными расходами ACID) может превосходить по скорости Sphinx.
PG Day'14 Russia, Нетрадиционный PostgreSQL: хранение бинарных данных в БД, А...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Наша небольшая компания занимается консалтингом, а, значит, мы постоянно сталкиваемся с той стороной проектов, о которой обычно не рассказывают на конференциях. Решения, внедряемые в типичном проекте, можно условно разделить на "красивые, но неработоспособные", "плохие", "очень плохие" и "удивительные". То решение, о котором пойдет речь в этом докладе, придумали не мы, и, когда авторы впервые представили его широкой общественности пару лет назад на конференции HighLoad, оно многими было воспринято как "удивительное". Тем не менее, решение работает и поныне, к чему мы приложили руку, поэтому у нас есть о чем рассказать. Да, наш девиз — "от удивительного к плохому!" :)
Речь пойдет о хранении большого количества статического пользовательского контента в PostgreSQL базе — согласитесь, не самая распространенная идея :) Традиционно считается, что СУБД не предназначены для подобных вариантов использования. Тем не менее, свойства СУБД, такие как поддержка транзакций и репликации, очень хорошо помогают для решения этого класса задач. После того как удивление проходит, и оказывается, что решение уже внедрено и работает, через некоторое время возникают новые вызовы — как сделать так, чтобы оно продолжало работать под возрастающей нагрузкой? Оптимизация производительности существующей и работающей 24x7 в продакшн базы — увлекательное действие, чем-то похожее на расследование преступления или на серию "Доктора Хауса". Если вы любите детективы и реляционные базы данных — приходите на мой доклад, и я постараюсь сделать так, чтобы вы не заснули!
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Как известно, PostgreSQL является постреляционной базой данных, что, помимо всего прочего, означает широкое использование массивов как для хранения, так и поиска данных. PostgreSQL обладает достаточно мощными и универсальными средствами оперирования массивами. Многие средства ориентированы на работу с многомерными массивами и, зачастую, избыточно сложны для работы с наиболее часто встречающимися одномерными массивами.
Многие пользователи PostgreSQL успешно используют модуль intarray в своей работе. Модуль предоставляет богатый набор функций и операторов для работы с одномерными целочисленными массивами. Пришло время обобщить этот набор на произвольные типы (текст, 64-битные числа, геометрические точки и т.д.) и добавить некоторые другие методы. Модуль anyarray объединен с модулем smlar, предоставлящим способы определения похожести массивов.
12. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Как этого добиться?
Очередность выполнения:
• -100 рублей потом -200
• Или наоборот
• Есть подозрение, что последовательно выполнять медленно и неэффективно
18. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA ACID
• • • Atomicity - восстановимость и изолированность
Consistency - те самые арифметические правила и здравый смысл
Isolation - независимость друг от друга
Durability - мы считаем диск надежным хранилищем
20. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Транзакция
• • •• Переводит блок данных из одного консистентного состояния в другое
• Делает это атомарно
• Среди прочего, это означает что транзакции восстановимы и изолированны
22. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA
Как оно работает?
Например в PostgreSQL (ну почти)
Есть две проблемы чтобы заработало
• Конкурентный доступ к данным - для этого нужна сериализация
• Внезапно все может упасть - нужен какой-то умный алгоритм
25. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Легко заметить
• Транзакции состоят из более мелких действий (списать со счета A, внести на
счет B и т.п.)
• Наверное среди этих элементарных действий проще найти не влияющие друг
на друга
26. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Легко заметить
• Транзакции состоят из более мелких действий (списать со счета A, внести на
счет B и т.п.)
• Наверное среди этих элементарных действий проще найти не влияющие друг
на друга - значит можно попробовать распараллелить
28. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Дано две транзакции
x и y
- ресурсы (блоки данных)
T1 T2
read(x) write(x)
write(y) write(y)
История
r1(x)w2(y)w1(y)w2(y)
Семантика Эрбранта
32. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Две истории для двух транзакций
T1 T2
r1(x) w2(x)
w1(y) w2(y)
r1(x) w2(x)w1(y) w2(y)
r1(x) w2(x)w1(y) w2(y)
Интуитивно понятно: стрелочки в одну сторону - хорошо
37. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Понятно как решать задачу, но
• Искать циклы в графе затруднительно
• Еще затруднительней - под OLTP нагрузкой
• Надо искать более хитрые подходы
38. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Понятно как решать задачу, но
• Искать циклы в графе затруднительно
• Еще затруднительней - под OLTP нагрузкой
• Надо искать более хитрые подходы Например блокировки
41. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Гранулярность блокировок
• Можно заблокировать все и сразу - перед началом любых действий
заблокировать все что нужно
• Непонятно чем это лучше чем просто последовательное выполнение
• К этому в конце концов приходят различные NoSQL
42. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Гранулярность блокировок
• Можно заблокировать все и сразу - перед началом любых действий
заблокировать все что нужно
• Непонятно чем это лучше чем просто последовательное выполнение
• К этому в конце концов приходят различные NoSQL
• А ничем не лучше
48. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Что плохо в 2PL
• Дедлоки
• Медленно - никто не хочет ждать блокировки
• Зато обеспечена сериализация В любой нормальной базе 2PL основное
средство обеспечения сериализации
• ∗На самом деле бывают истории, которые 2PL разрулить не может в принципе
52. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA MVCC - теория
s = r1(x)w1(x)r2(x)w2(y)r1(y)w1(z)c1c2
• Если предыдущая версия y не доступна первой транзакции на чтение,
историю сериализовать нельзя
61. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Пример
tt=# INSERT into test(id) values(5);
INSERT 0 1
tt=# select *,xmin,xmax from test;
id | xmin | xmax
----+------+------
5 | 1266 | 0
(5 rows)
tt=# select txid_current();
txid_current
--------------
1267
(1 row)
62. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Пример (продолжение)
tt=# begin;
BEGIN
tt=# UPDATE test set id=5 where id=4;
UPDATE 1
В другой сессии:
tt=# select *,xmin,xmax from test;
id | xmin | xmax
----+------+------
4 | 1264 | 1270
(3 rows)
63. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Ссылки по теме
• Weikum, Vossen Transactional Information Systems: Theory, Algorithms, and the
Practice of Concurrency Control and Recovery
• http://momjian.us/main/writings/pgsql/mvcc.pdf - Примеры и специфика
PostgreSQL
68. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Для чего писать лог
• Если упадем, "грязные"страницы из памяти будут потеряны
• Дампить сразу на диск в датафайл может быть затруднительно
• Будем писать их в лог
75. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Процессы
[pg@tr ~]$ ps ax | grep post
2199 ?? Ss 17:05.79 postgres: writer process (postgres)
2200 ?? Ss 6:29.36 postgres: wal writer process (postgres)
2201 ?? Ss 2:56.25 postgres: autovacuum launcher process (postgres)
2202 ?? Ss 12:49.19 postgres: stats collector process (postgres)
14046 ?? Ss 0:18.53 postgres: user mydb 127.0.0.1(48543) (postgres)
17252 ?? Is 0:11.93 postgres: user mydb 127.0.0.1(48800) (postgres)
26361 ?? Ss 0:01.20 postgres: user mydb 127.0.0.1(49512) (postgres)
1590 v0- S 17:47.29 /home/pg/pg_bin/bin/postgres -D /db/postgres/db01/data
76. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Структура файлов на диске
$PG_HOME/PG_VERSION
$PG_HOME/base
$PG_HOME/global
$PG_HOME/pg_clog
$PG_HOME/pg_hba.conf
$PG_HOME/pg_ident.conf
$PG_HOME/pg_multixact
$PG_HOME/pg_notify
$PG_HOME/pg_serial
$PG_HOME/pg_stat_tmp
$PG_HOME/pg_subtrans
$PG_HOME/pg_tblspc
$PG_HOME/pg_twophase
$PG_HOME/pg_xlog -> /db/postgres/db01/db_wal
$PG_HOME/postgresql.conf
77. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA OIDs
pg@pglect01:~> ls pg_lecture/base/
1 12489 12497 16385
tt=> SELECT datname,oid FROM pg_database WHERE datname=’postgres’;
datname | oid
----------+-------
postgres | 12497
(1 row)
tt=> SELECT datname,oid FROM pg_database WHERE datname=’tt’;
datname | oid
---------+-------
tt | 16385
(1 row)
79. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Теперь посмотрим на память
(с помощью расширения pg_buffercache)
tt=# select reldatabase,relfilenode,relblocknumber,
isdirty,usagecount from pg_buffercache WHERE
relfilenode=16388;
reldatabase | relfilenode | relblocknumber | isdirty | usagecount
-------------+-------------+----------------+---------+------------
16385 | 16388 | 0 | t | 1
tt=# CHECKPOINT ;
CHECKPOINT
tt=# select reldatabase,relfilenode,relblocknumber,isdirty,usagecount from pg_buffercache
WHERE relfilenode=16388;
reldatabase | relfilenode | relblocknumber | isdirty | usagecount
-------------+-------------+----------------+---------+------------
16385 | 16388 | 0 | f | 1
81. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Память в PostgreSQL
postgres=# select name, setting, context from pg_settings where name ~ ’(shared_b|work_mem)’;
name | setting | context
----------------------+---------+------------
maintenance_work_mem | 16384 | user
shared_buffers | 16384 | postmaster
work_mem | 1024 | user
(3 rows)
82. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Память в PostgreSQL
postgres=# select name, setting, context from pg_settings where name ~ ’(shared_b|work_mem)’;
name | setting | context
----------------------+---------+------------
maintenance_work_mem | 16384 | user
shared_buffers | 16384 | postmaster
work_mem | 1024 | user
(3 rows)
97. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Оптимизация записи WAL - дайте поработать bgwriter’у
postgres=# select name, setting, context, max_val, min_val from pg_settings where name ~ ’bgwr’;
name | setting | context | max_val | min_val
-------------------------+---------+---------+---------+---------
bgwriter_delay | 200 | sighup | 10000 | 10
bgwriter_lru_maxpages | 100 | sighup | 1000 | 0
bgwriter_lru_multiplier | 2 | sighup | 10 | 0
(3 rows)
98. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA
Выбираем сервер - 2
Диски
• "Честный"RAID
• Если нужна производительность - BBU
• 2.5” SAS
• не все SSD одинаково полезны (intel dc 3700 vs desktop class)
• Дисковый массив хорошо, но нужно уметь настраивать
99. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Что делать, если плохие диски
• Покупать хорошие (я серьезно)
• synchronous_commit → off (но надо представлять себе риски)
• больше воркеров автовакуума
100. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Что нельзя делать, если плохие диски
postgres=# show commit_delay;
commit_delay
--------------
0
(1 row)
postgres=# show commit_siblings;
commit_siblings
-----------------
5
(1 row)
101. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Резервное копирование
• Дамп != backup
• backup - некая специальная копия, с которой можно восстановиться на
момент последней удачно завершившейся перед аварией транзакции
• На практике дампы лучше все равно снимать (помимо backup’а)
• Единственный способ валидировать backup - восстановиться с него
• DBA может не знать SQL (это плохо, но что делать), знать backup/recovery -
обязан
• Конфиги! (лучше вообще в забэкапленом git’е)
103. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Как работает backup
• SELECT pg_start_backup( label , true);
• rsync и магия
• SELECT pg_stop_backup();
• Эффективно pg_basebackup делает то же самое
106. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Репликация
• HotStandby и все остальное
• Насчет всего остального лучше 100500 раз подумать
• Репликация путем пересылки WAL есть суть постоянное восстановление из
backup’а на другом сервере
• Почему репликация это плохо
• Почему Master-Master/Active-Active это очень плохо
• Настройки
107. PGDAY’14
RUSSIA
PGDAY’14
RUSSIA Проблемы с master-master чаще связаны с неправильными ожидания
• Правильная постановка задачи
• Master-Master vs HotStandby для отказоустойчивости