Доклады
AI для гоферов (1)
ML-инструменты на Go: что использовать?
Мир машинного обучения быстро развивается, предлагая множество новых инструментов и возможностей. Однако большинство из них ориентированы на другие языки программирования. А что же современные библиотеки предлагают для Go-разработчиков?
Давайте узнаем!
Доклад принят в программу конференции
Архитектура (1)
Банда четырех против Гоферов: стоит ли учить классические паттерны в 2025?
Вспомним, что такое шаблоны проектирования, зачем они, какие бывают. Разберем классику из 23х образцов по полочкам - применимость в Го с точки зрения языка программирования, удобство использования, наличие альтернатив. И в конце каждому шаблону вынесем свой вердикт, поставив знак препинания в нужном месте - "применять нельзя выбрасывать"
Доклад принят в программу конференции
Инфраструктура и эксплуатация (2)
Когда возможностей Kubernetes недостаточно. Делаем свой DNS-сервер для Kubernetes в связке с CoreDNS
Мы в Т-Банке строим ML-платформу на базе Kubernetes. Однако пользователи не имеют прямого доступа к самому оркестратору; для них всё взаимодействие с платформой скрыто за API. Однажды нам понадобилось предоставить возможность делать сетевые запросы между задачами на платформе, и мы столкнулись с тем, что механизмы Kubernetes не подходят для наших целей. В докладе я расскажу о том, как мы разработали свой формат DNS-имен в Kubernetes, который обратно совместим для пользователей платформы и скрывает все внутренние изменения.
Доклад принят в программу конференции
Ускорение вычислений векторными инструкциями на примере алгоритма DRS системы виртуализации.
Время от времени в решении бизнес задач мы сталкиваемся с NP полными проблемами, задачами поиск оптимального решения которых имеет экспоненциальную сложность. Обычно мы прибегаем к аппроксимационным алгоритмам, чтобы уложится в требуемое время, но что если есть другой путь. Прогресс в производительности процессоров и видеокарт привёл к тому, что мы можем использовать полный перебор, там где мы раньше обходились приближениями.
На примере алгоритма DRS платформы Evolution компании Cloud.ru, рассмотрим как он может быть решён на разных версиях операций с плавающей точкой процессоров x86 и Arm. В чём сложности задействования SIMD операций. Почему это сложнее на go и как это обойти. Бонус - сравнения со скоростью видеокарты, так ли они сильны.
Доклад принят в программу конференции
Вопросы языкознания (5)
Особенности и ловушки модели памяти в Go: Пути к корректной синхронизации и ошибки в некорректной
Большинство программистов, работая с многопоточным кодом, осведомлены о примитивах синхронизации, однако мало кто задумывается о существующей за этим сложной теорией.
В рамках доклада расскажу о моделе памяти Go, понятным языком объясню отношение happens before, затрону барьеры памяти, обычные и продвинутые (STM и flat combining) способы синхронизации
Доклад принят в программу конференции
На картах значится! Открываем Швейцарию в Go
Golang продолжает развиваться, стараясь идти в ногу со временем и прислушиваясь к своему коммьюнити. А коммьюнити довольно привередливое: им дженерики подавай, итераторы разрабатывай. И все бы ничего, если бы не гость из Швейцарии, заезжающий в версии 1.24. Благодаря ему на собеседованиях вопросов о мапах станет явно больше.
Что это за новый гость в нашем ламповом языке? Почему он собирается выселить старые добрые мапы и как устроен механизм взаимодействия с новой реализацией хеш-таблиц в Golang? При чем тут Rust? Об этом и немного о другом мы с вами поговорим на этом докладе.
Доклад принят в программу конференции
Garbage Collector: от появления до современных алгоритмов
Доклад охватывает основные аспекты работы garbage collector (GC) в современных языках программирования. Мы начнем с причин появления GC, рассмотрим первые языки и реализацию GC, а также проблемы, с которыми столкнулись разработчики.
Далее обсудим эволюцию алгоритмов GC — от первых шагов до современных решений, связанных с многозадачностью. Мы также рассмотрим основные виды GC, их историю и влияние на производительность.
Особое внимание будет уделено алгоритму GC в Go с его особенностями, а также сравнению с другими языками. В заключение рассмотрим языки без GC и обсудим плюсы и минусы таких решений.
Доклад принят в программу конференции
Почему вы должны научиться использовать дженерики
Кажется, через 3 с лишним года после появления в языке, дженерики все еще не до конца приняты сообществом. Часто можно услышать, что они не нужны, что они делают код менее читабельным, что их производительность оставляет желать лучшего...
Да, из всех средств написания запутанного кода на Go дженерики, пожалуй, самое мощное. Именно поэтому мы должны научиться использовать дженерики правильно.
Почему бы просто не отказаться от них полностью, раз они такие опасные? Вот об этом я и хочу вам рассказать.
Давайте посмотрим, как мы можем использовать дженерики для написания обобщенного кода.
Давайте посмотрим, как мы можем использовать их для преодоления недостатков системы типов Go.
Давайте посмотрим, зачем писать нетривиальные констрейнты, и как это делать.
И, наконец, давайте разберемся, чего нельзя делать на дженериках никогда, и почему.
Доклад принят в программу конференции
Черная магия unsafe в Go
Доклад охватывает различные аспекты безопасного и небезопасного использования пакета unsafe в Go, при помощи которого можно ускорять код в десятки раз!
Мы узнаем, как можно создавать срезы без дорогостоящей инициалиации, научимся избавляться от Bound Checks и конвертировать строки в срезы и обратно без лишних копирований и аллокаций памяти... Дополнительно мы сравним пакет unsafe в Go с указателями из С/С++ и посмотрим на некоторые паттерны С++, которые можно в некоторых ситуациях применять при программировании на Go.
Черную магию мы оставим под конец доклада, чтобы с ее использованием посмотреть, как можно проезжаться по памяти для анализа сложных структур данных, модифицировать имутабельные строки в Go и получать доступ к приватным полям структур.
Доклад принят в программу конференции
Через тернии к... (2)
От хаоса к порядку: управление состояниями и консистентность в интеграциях
Любая интеграция с внешними сервисами — это борьба с хаосом:
У каждого внешнего клиента свой API, свой формат данных и свои бизнес-правила.
Данные приходят с задержками, иногда задним числом, форматы меняются без предупреждения, а гарантий консистентности чаще всего нет.
Как в таких условиях построить систему, которая не развалится?
В этом докладе я расскажу:
• Как мы превратили смену – нашу основную сущность - в стейт-машину, чтобы четко контролировать её жизненный цикл.
• Как работает универсальный адаптер, который позволяет подключать новых внешних клиентов без рефакторинга.
• Как мы обеспечили консистентность данных, используя очереди, контроль состояний, отказоустойчивые механизмы.
• Какие ошибки мы совершили и что можно было сделать лучше.
Доклад будет полезен разработчикам, работающим с интеграциями, асинхронными событиями и сложными процессами, которым важно строить гибкую, масштабируемую и отказоустойчивую архитектуру.
Доклад принят в программу конференции
Как спроектировать кэш-библиотеку следующего поколения и не умереть?
В докладе расскажу о своем опыте создания кэш-библиотеки, трудностях и приключениях этого процесса. Обсудим как общие вопросы, вроде «Зачем нужна ещё одна библиотека?», так и прикладные вещи вроде:
* Как выбрать политику вытеснения?
* Как определиться с хэш-таблицей?
* Почему lock-free – не всегда быстро?
* Как быть, если глобальная блокировка кеша - слишком медленно?
Доклад принят в программу конференции
Бери и делай (1)
Эмулируем NES на Go
Эмуляция ретро-консолей представляет необычную нишу на пересечении реверс-инжиниринга, низкоуровневого программирования и игровой индустрии. Создание эмулятора — это не просто возможность оживить старые игры, это куча эмоций, и возможность получить глубокое представление о компьютерной архитектуре максимально практическим способом. В докладе, я расскажу о своем опыте работы над эмулятором консоли NES (известной у нас как Денди). Мы исследуем архитектуру легендарной консоли 90-х и разберём фундаментальные принципы эмуляции: от интерпретации машинного кода процессора MOS 6502 до графического пайплайна и вывода изображения на экран, и даже затронем реализацию сетевого мультиплеера с компенсацией задержек.
Доклад принят в программу конференции
Безопасность и контроль качества (1)
Темная сторона Go: как избежать уязвимостей и писать безопасный код
В этом докладе мы рассмотрим ключевые уязвимости и проблемы безопасности, характерные для языка программирования Go (Golang). Мы разберем, как особенности архитектуры и стандартных библиотек Go могут становиться источниками уязвимостей, таких как race conditions, уязвимости в работе с внешними данными и ошибки в управлении зависимостями. Обсудим реальные кейсы, когда эти уязвимости приводили к серьезным инцидентам, и поделимся практическими рекомендациями по их предотвращению. Доклад будет полезен для разработчиков, которые хотят писать более безопасный код на Go, а также для специалистов по безопасности, стремящихся глубже понять специфику этого языка. Мы также рассмотрим инструменты и методики, которые помогут выявлять и устранять уязвимости на ранних этапах разработки.
Доклад принят в программу конференции
Системное программирование (2)
От Netlink к eBPF: радикальное ускорение трассировки интернет-пакетов
Подсистема ядра Linux, отвечающая за трассировку сетевых пакетов, использует протокол Netlink для передачи данных в пространство пользователя. При большом объеме трафика свыше 5 Гб/c Netlink создает большую нагрузку на систему и может приводить к потерям пакетов. В докладе показано, как мы применили eBPF для обхода Netlink при передаче трейсов, тем самым повысив производительность и устойчивость всей системы.
Доклад принят в программу конференции
Погружение в eBPF и XDP вместе с Go
Технология eBPF у всех на слуху и уже немало платформ перешли на использование eBPF. Однако написать свой инструмент и получить все выгоды от eBPF не так просто, информации по сложностям, проблемам и текущим ограничениям данной технологии очень мало.
В своем докладе я расскажу, как мы пришли к работе с eBPF и покажу на примере написания своего XDP фильтра как начать работу с eBPF используя Go. Поговорим об используемых библиотеках, тестировании и запуске программ на eBPF.
Также поделюсь полезными советами и набитыми шишками на этом пути.
Доклад принят в программу конференции