Доклады

Показать только принятые доклады

Обзор текущего состояния языка

Что дженерки нам готовят

Много раз при обсуждении преимуществ и прелестей Go как языка разработки мне приходилось слышать что-то типа «у вас ДАЖЕ нет дженериков» или «вот завезут дженерики, тогда и поговорим». Так вот - дженерики завезли, попробовать можно уже сейчас, а доступно для всех будет в 2022. Сообщество окончательно определилось как именно всё будет реализовано, и что мы получим в результате. Для этого доклада я внимательно изучил все черновики авторов и посмотрел как дженерики реализованы в других языках. Например, в Python. Я расскажу о том, как какие идеи лежат в основе и как мы можем использовать дженерики, чтобы писать читаемый код. И не использовать там, где это не нужно.

Программный комитет ещё не принял решения по этому докладу

Go для высоконагруженных систем

Как обеспечить гарантию доставки сообщений в развивающихся системах ?

В своем докладе на примере реальных сервисов я покажу, какие проблемы могут возникнуть при обмене данными по сети. Рассмотрим, какие есть для этого способы решения и почему среди всех вариантов мы выбрали паттерн Outboxer и написали его реализацию в виде библиотеки для go.

Программный комитет ещё не принял решения по этому докладу

Система real-time управления предложениями туроператоров

Расскажем о том, как с помощью несложного технологического решения полностью поменять опыт пользователя, от улучшения актуальности предложений до предоставления скидок.

Ассортимент туров у туроператоров — очень динамичная штука: цены и наличие туров меняются каждую минуту. При этом наши пользователи совершают до 35 тысяч поисков каждую минуту, а в сутки наш поиск обрабатывает до 50 ТБ данных. Мы разработали сервис, который способен не только поддерживать такую нагрузку, но и в режиме реального времени управлять результатами поиска, которые видит пользователь: добавлять спецпредложения, показывать важные примечания, известные только нашим менеджерам, убирать из выдачи сомнительные предложения и много другое.

* Супер-динамический ассортимент и проблемы хранения — работа с кешем, Redis и долговременные хранилища.
* Высоконогруженные клиентские сервисы и общая инфраструктура продукта, включающая в том числе монолит на Ruby — проблемы интеграции.
* Highload на поиске и динамическое распределение нагрузки с помощью AWS-инфраструктуры.

Программный комитет ещё не принял решения по этому докладу

Стандартная библиотека

История реализации векторного поиска на go

Для того, чтобы пользователи Lamoda могли получать рекомендации похожих товаров на основе тех, что они выбирают/покупают, мы запустили проект под названием Лакинатор. Как Акинатор, но только для одежды. Для таких рекомендаций необходимо в онлайне уметь искать схожие друг с другом товары в определенных категориях. Поиск идет по подсчитанным векторам.

- Изначально думали использовать поиск по хэш индексу (lsh), но в итоге остановились на обычном переборе. Расскажу, почему, казалось бы, неэффективное решение может быть самым подходящим для решения задачи.

- После того как мы остановились на переборе надо было придумать, как искать топ N элементов. Расскажу, как выбирали подходящую структуру данных и как работать с бенчмарками в go.

- Когда микрооптимизации бывают реально полезны. Поговорим про инлайнинг функций в go. В нашем кейсе он был полезен, так как при поиске перебором одни и те же участки кода исполняются очень много раз. Даже небольшое ускорение такого участка может сильно повлиять на итоговую скорость.

Программный комитет ещё не принял решения по этому докладу

Best practices

Работа с полиморфным поведением в большой кодовой базе

Основным средством получения полиморфизма в Go являются интерфейсы. И хотя они несомненно очень удобны и позволяют добиться многого, с ростом кодовой базы и поддерживаемой функциональности их применимость может требовать пересмотра. Что делать, если интерфейс слишком большой и разнородный? Что делать, если полиморфная логика слишком сложная? Как подружить полиморфизм с оптимизациями, рефакторингами и микросервисной архитектурой? В своём докладе я расскажу, как организована наша кодовая база из 1M+ строк на Go, как мы используем и как не используем фичи Go, как добиваемся масштабируемой архитектуры на уровне кода и как проектируем API в проекте, где новые А/B-тесты запускаются каждый день.

Программный комитет ещё не принял решения по этому докладу

Кэш в оперативной памяти своими руками

Что делать, когда вам нужно отвечать настолько быстро, что позволить себе ~1-3 ms для похода в Redis за кэшем - это очень дорого? Можно же хранить кэш прямо в памяти приложения. Но тогда встают вопросы:
- Память кончается, надо что-то выбросить из кэша! Но что именно?
- Как обновлять значения в кэше так, чтобы не завалить внешние ресурсы большой нагрузкой (предотвратить эффект "Свалки кэша")?
- Если приложение распределенное и нам подобный кэш надо держать согласованным - каким образом это сделать (согласованность кэшей)?

В докладе постараемся дать ответы на эти и некоторые другие вопросы про построение кэшей в оперативной памяти приложения.

Программный комитет ещё не принял решения по этому докладу

Как Go выполняет встраивание (inlining) функций

Это обзорный доклад о том, как происходит встраивание (inlining) функций в Go. Из него вы узнаете:
— зачем вообще встраивание нужно, какие преимущества и недостатки несет в себе
— как Go встраивает функции и как эта стратегия менялась со временем
— какие есть ограничения и как некоторые из них можно обойти

Программный комитет ещё не принял решения по этому докладу