Обучающий курс
Вступительная статья

Меня зовут Олег Бунин и я организатор конференции разработчиков высоконагруженных систем HighLoad++. Одновременно с этим я являюсь руководителем команды, которая разрабатывала и консультировала многие крупные и посещаемые проекты Рунета.

Мы консультировали такие проекты, как Вконтакте, Sports.ru, Woman.ru, Imhonet, ИТАР-ТАСС, РИА Новости, Setup.ru, мы даже консультируем Правительство Москвы... Подробнее

HighLoad++ для начинающих

Чтобы рассказать, что такое highload, надо для начала определиться с термином. При попытке "разгадать" сам термин, начнем, естественно, с прямого перевода – это высокая нагрузка... Подробнее

Анатомия веб-сервиса

Я попытаюсь залезть в "потроха" и "кишки" бэкенда веб-сервиса и расскажу, как это внутреннее устройство влияет на эффективность сервиса, а также на продукт, его характеристики, и как бы мы могли этим воспользоваться, чтобы наше приложение выдерживало большую нагрузку или работало бы быстрее.

Какую часть я называю веб-сервисом, бэкендом, application-сервером? В классической архитектуре это то, что стоит за http rеverse proxy или load-балансировщиком, а с другой стороны у него находятся БД, memcashed и др. Вот только об этом бэкенде и будет идти речь... Подробнее

Общая логика масштабирования

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

Web, кэширование и memcached

Эта статья была написана на основе материалов одноименного доклада на конференции HighLoad++ (2008). Для начала, о названии статьи: в статье пойдет речь и о кэшировании в Web’е (в высоконагруженных Web-проектах), и о приме нении memcached для кэширования, и о других применениях memcached в Web проектах. То есть все три составляющие названия в различных комбинациях бу дут освещены в этой статье. Подробнее

Масштабируемая конфигурация nginx

Я буду говорить о масштабируемой конфигурации nginx, но это не о том, как обслужить с помощью nginx сотни тысяч одновременных соединений, потому что nginx для этого настраивать не надо. Нужно выставить адекватное число рабочих процессов или поставить его в режим "авто", поставить worker_connections в 100 000 соединений, после этого заниматься настройкой ядра – это гораздо более глобальная задача, чем просто настройка nginx. Подробнее

Асинхронная репликация без цензуры

Есть мастер, мастер неожиданно упал, но система продолжает работать. Клиенты мигрируют на вторую базу. Нужно делать резервные копии базы. Если делать резервные копии на основной базе, мы можем получить какие-то проблемы производительности, увеличение времени отклика. Это плохо. Поэтому достаточно распространенный пример асинхронной репликации – это снятие резервной копии со слэйва. Другой пример – это миграция тяжелых запросов с мастера на слэйв, с основной базы на вторую. Например, построение отчетов. Подробнее

Как устроена MySQL-репликация

Мой доклад предназначен для тех людей, которые знают слово "репликация", даже знают, что в MySQL она есть, и, возможно, один раз ее настроили, 15 минут потратили и забыли. Больше про нее они не знают ничего Подробнее

HighLoad++ — это блюдо, которое подают высоконагруженным

Пожалуй главным отличием конференции разработчиков высоконагруженных систем HighLoad++ от многих других является отсутствие скрытых целей. За нами не стоит ни одного лица или организации, которая бы навязывала правила игры или занималась хантингом на мероприятии Подробнее

Основы индексирования и возможности EXPLAIN в MySQL

Темой моего доклада является индексирование в MySQL и расширенные возможности EXPLAIN, т.е. нашей задачей будет ответить на вопросы: что мы можем выяснить с помощью EXPLAIN'а, на что следует обращать внимание? Подробнее

Производительность запросов в PostgreSQL – шаг за шагом

Для начала сразу пару слов о том, о чем пойдет речь. Во-первых, что такое оптимизация запросов? Люди редко формулируют и, бывает так, что часто недооценивают понимание того, что они делают. Можно пытаться ускорить какой-то конкретный запрос, но это не обязательно будет оптимизацией. Мы немного на эту тему потеоретизируем, потом поговорим о том, с какого конца к этому вопросу подходить, когда начинать оптимизировать, как это делать, и как понять, что какой-то запрос или набор запросов никак нельзя оптимизировать – такие случаи тоже бывают, и тогда нужно просто переделывать Подробнее

Масштабирование базы данных через шардирование и партиционирование

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

Sharding – patterns and antipatterns

Доклад родился из следующего разговора. Я, как всегда, пытался убедить Алексея больше использовать Tarantool, а он сказал, что там до сих пор нет шардинга и, вообще, неинтересно. Тогда мы стали рассуждать о том, почему нет. Я стал рассказывать, что тут нет одного универсального решения, автоматика полная за вас работает, а вы только кофе на работе пьете и все... Поэтому родился этот доклад – чтобы посмотреть на то, какой бывает шардинг, какие методы в каких системах используются, какие преимущества и недостатки, почему нельзя одной "серебряной пулей" все решить? Подробнее

Сага о кластере. Все, что вы хотели знать про горизонтальное масштабирование в Postgres‘е

Много профессиональных волшебников будут рассказывать о том, как это сейчас хорошо и здорово реализовано в PostgreSQL – ребята из Postgres Professional в рамках этого доклада расскажут про кластер все. Подробнее

Что особенного в СУБД для данных в оперативной памяти

Я бы хотел начать с ответа на вопрос про бенчмаркетинг. На самом деле, там особо конфигурить-то нечего. Мы не сильно большие эксперты по Redis и Memcached, но там есть пара ручек. У Redis нужно включить компактификацию данных – это серьезно влияет на его производительность, т.е. у него есть определенный способ хранить маленькие сеты, списки и т.д. Это надо включить. Мы, безусловно, это включаем, т.к. если не включать, то там все становится еще хуже, потому что просто очень много памяти жрется. Подробнее

Осваиваем Tarantool 1.6

Меня зовут Евгений. Я работаю в подразделении сбербанка Digital Ventures – это небольшое подразделение, которое занимается внедрением инновационных продуктов и решений. Т.е. мы делаем IT-прототипы на стыке новых технологий.

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

Строим сервисы на базе Nginx и Tarantool

Мы будем говорить, как строить сервисы на базе Nginx и Tarantool – это первая часть этого доклада, я вас познакомлю чуть больше с Upstream-модулем. Во второй части Андрей, мой коллега, расскажет о том, как в Tarantool реализован шардинг. И третья часть – мы вам покажем отчет, о том какой RPS, какой лейтенси и какие показатели мы смогли со всего этого снять на реальных данных. Подробнее

Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженном проекте

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

Принципы и приёмы обработки очередей

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

101 способ приготовления RabbitMQ и немного о pipeline архитектуре

В данном докладе я хочу поговорить о пересечении RabbitMQ и Pipeline архитектуры, и о том, как оно связанно с работой нашей компании. Подробнее

Очереди и блокировки. Теория и практика

Мой доклад будет про вещь, без которой не обходится ни один HighLoad проект — про сервера очередей, и если успею, то расскажу про блокировки. Я расскажу про то, где и как используются очереди, зачем это все нужно, расскажу чуть-чуть про протоколы. Подробнее

Как устроен поиск

Обзорный доклад про базовое внутреннее устройство любого современного поискового движка. Про сжатые списки документов и позиций, как затем с ними работает поиск совпадающих документов (и разные операторы), как устроено ранжирование найденных документов, как бывают устроены и работают с фильтрацией и агрегацией дополнительные (нетекстовые) атрибуты документов. По возможности, упоминание всех известных вариантов реализаций (как, вообще, можно, как сделано в Sphinx, как в Lucene). Подробнее

Бинарные (файловые) хранилища страшная сказка с мрачным концом

Доклад мой называется «Бинарные, они же файловые, хранилища», но, на самом деле, мы имеем дело со страшной сказкой. На RootConf’е я рассказывал о том, как решается проблема хранения большого количества файлов на одном из проектов, который мы обслуживаем, но (и это тезис моего доклада) в 2015-ом году не существует не то что хорошей, а хотя бы приемлемой системы хранения файлов. Подробнее

Опыт построения и эксплуатации большого файлового хранилища

Рассказ о том, что каждый инженер должен сделать в своей жизни после того, как он родил ребенка, посадил дерево и построил дом – это сделать свое файловое хранилище. Подробнее

Горизонтальное масштабирование. Что, зачем, когда и как

Что такое масштабирование, вообще? Это возможность увеличить производительность проекта за минимальное время путем добавления ресурсов.

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

Кэширование данных в web приложениях. Использование memcached

Я немного расскажу вам про кэширование. Кэширование, в общем-то, не сильно интересно, берешь и кэшируешь, поэтому я еще расскажу про memcached, довольно интимные подробности. Подробнее

Использование memcached и Redis в высоконагруженных проектах

Я буду рассказывать вам об инструментах высоконагруженных проектов, кэшировании, в частности, о memcached, Redis-е и о сервисе очередей RabbitMQ или в простонародье "кролике". Подробнее

Как мы сделали ровную балансировку нагрузки на фронтенд-кластере

В докладе (а теперь уже в статье) Юрий расскажет о том, как Badoo добились идеально ровной балансировки нагрузки по кластеру из 200+ серверов, реализовали автоматический подбор весов и получили разброс CPU usage в 2,5% в пике трафика. Это позволило сэкономить около 40-50 серверов и улучшить время отклика мобильного сайта в пике нагрузки. Подробнее

NoSQL – коротко о главном

Кому будет полезен этот доклад? Это обзорный доклад с претензией на структурированность. Если вы что-то где-то когда-то слышали про NoSQL, то через 40 минут вы будете знать гораздо больше, вы будете легче ориентироваться в терминах и более уверенно выбирать базы данных для своего проекта. Поговорим также про типичные примеры применения и как не надо применять NoSQL базы данных. Подробнее

Как выбрать In-memory NoSQL базу данных с умом. Тестируем производительность

Доклад у меня по базам данных In-Memory NoSQL. Кто знает, что такое In-Memory NoSQL база данных? Поднимите руки, пожалуйста... Как вам не стыдно? Зал по базам данных, и только половина знает, что это такое. Подробнее

За счет чего Tarantool такой оптимальный

Доклад будет посвящен Tarantool. Я всегда рассказывал про use case, про что-то такое, что видит пользователь. Сегодня буду больше рассказывать про внутренности. Подробнее