Что расскажут на GoFunc: язык, инструменты, архитектура и патологоанатомы
Почему патологоанатомы обычно заняты совсем не вскрытиями, и при чём тут Go?
Так, предыдущим вопросом мы завладели вашим вниманием, теперь о главном. В январе мы рассказали Хабру о нашей новой конференции для Go-разработчиков и привели примеры докладов.
А теперь, когда GoFunc уже на носу, представляем Хабру полную программу с описаниями всех докладов. Там про самое разное — и инструменты, и архитектуру, и сам язык. Ну и о том, чем заняты патологоанатомы, тоже сказано, хоть это для конференции и не основная тема.
Содержание
Библиотеки и инструменты
Язык и рантайм
Архитектура
Расширяем горизонты
Другое
Библиотеки || Инструменты
gRPC: Under the Hood
С gRPC уже давно и плодотворно идет работа в самых разных областях. Но часто gRPC воспринимают как некую черную коробку, где с одной стороны закидывается protobuf, а с другой стороны что-то вылетает в ответ. Или имеют еще более абстрактное представление о том, как это всё работает.
В докладе Алексей разберет работу gRPC не со стороны пользователя, ибо таких материалов просто море, а то, как всё работает под капотом. Это, по сути, минимальная handmade gRPC-реализация на Go stdlib. Существующие полноценные реализации останутся за рамками доклада.
Облегчаем жизнь разработчикам при помощи плагинов protoc
Ozon
По всему миру разработчики используют Protobuf как plug-n-play решение, даже не задумываясь о том, как работает его тулчейн и как его можно переиспользовать для собственных целей.
Разберемся в том, как устроен Protobuf и его тулчейн на низком уровне (protoc + плагины), как написать свой плагин на Go. Даже напишем небольшой демо-плагин. Разберем, как это можно применить в своих проектах и какие готовые решения вы можете применять сегодня в Go.
Будет полезно тем, кто активно использует Protobuf и разрабатывает инструменты для других разработчиков.
gRPC Middleware в Go как способ модифицировать все запросы в одном месте
Cloud.ru
В Cloud.ru ценят время пользователей и стремятся не возвращать ошибки на сторону клиента. Особенно если в запрос случайно проскочил бесполезный пробел или символ переноса строки. Решение в лоб — писать валидаторы и модификаторы внутри всех контроллеров. Но что, если контроллеров очень много? Как такой объем поддерживать?
Еще один способ — реализовать метод проксирования gRPC-запросов, используя интерцепторы. Сложности начинаются, когда мы хотим вмешаться в данные запроса.
Разберемся, как рефлексия и несколько строк кода в одном единственном месте помогут корректно модифицировать данные всех запросов сразу и обрезать лишнее.
protobuf в Go
Ozon
Владислав расскажет, почему в Ozon используется protobuf, приведет наглядные примеры использования. Поговорим про наиболее типичные проблемы и боли, вызванные нарушением рекомендаций по обновлению сообщений. Владислав также продемонстрирует, что необходимо делать, чтобы избегать таких проблем.
Базы, деньги и Go Way
Тинькофф
Николай расскажет о выборе способа работы с базой данных на Go: использовать ORM или стандартные низкоуровневые библиотеки. Но посмотрим на этот выбор с позиции бизнеса — на примере абстрактной компании он покажет, какие последствия у этого выбора, когда и каким способом они себя проявляют, и в какой ситуации вы окажетесь спустя несколько лет.
Язык и рантайм
Внутреннее устройство мьютексов в Go
Сбер
Что такое мьютексы и для чего они используются? Во время доклада разберемся с мьютексами, а также с их внутренним устройством.
Вы узнаете, из чего состоят и как работают sync.Mutex и sync.RWMutex, в чем особенности их внутреннего устройства. Илья представит выводы и нюансы использования.
Типы данных под капотом: слайсы и как их готовить
YADRO
Владислав затронет интересные оптимизации компилятора, стандартные средства strings.Builder, bytes.Buffer, sync.Pool и библиотеку slices на дженериках. Поговорим как про внутреннее устройство, так и про правильное использование. Попытаемся ответить на вопрос: «А почему именно так?», измерим скорость и память, а также подискутируем о лучших практиках.
Популярные ошибки в Golang и как их избежать
Авито
Go, в отличие от многих других низкоуровневых языков, довольно дружелюбный для разработчика язык. Но даже в нем есть ситуации, в которых очень легко допустить неочевидную ошибку. И для разработчика любого уровня важно знать, почему такие ошибки возникают и как их избегать.
Рассмотрим наиболее распространенные ошибки, начиная с базовых концепций — таких, как массивы и слайсы, узнаем подробнее об их внутреннем устройстве. Рассмотрим каналы и ответим на наиболее распространенные вопросы при работе с ними: кто их должен закрывать и когда это нужно делать.
Обсудим горутины и средства работы с ними: узнаем, почему нельзя копировать мьютексы и чем опасна работа с атомиками. Вспомним, что такое замыкания и как их использовать при написании кода. Разберем примеры правильного и неправильного использования defer. Закопаемся поглубже в интерфейсы и немного посмотрим на их внутреннее устройство, чтобы найти ответы на неожиданности, которые возникают при работе с ними. И в завершение рассмотрим работу с вендорингом и его особенности.
Полученные знания помогут разработчикам расширить свой кругозор в плане работы с Golang и избежать неочевидных опасностей, которые таит в себе язык.
Когда нельзя, но очень хочется — GO!
Сбер
Разберем обход всех ограничений, характерных для ООП (получение полного доступа к приватным полям, функциям, методам и типам другого пакета), и ситуации, когда это лучшее решение.
Разберемся, как изменить код программы после ее компиляции. Напишем простую программу на Gо и взломаем ее при помощи IDA. Также пропатчим драйвер для работы с PostgreSQL (pgx), добавив в него поддержку глобального трейсера без внесения изменений в исходники драйвера.
PGO: практика и маленькие хитрости использования
Ozon
Рассмотрим PGO и всё то, что кроется за этой аббревиатурой: как PGO устроен в Go, как его использовать в ваших приложениях, какие результаты вы можете получить при использовании этого способа оптимизации.
Строка: от известного к неизвестному
VK
Кажется, что строка в Go — очень понятная сущность: неизменяемый массив байтов. Но она может удивить.
Роман расскажет, как компилятор работает со строками, какие есть оптимизации и почему применяются именно такие оптимизации.
Снижаем нагрузку на Garbage Collector и ускоряем работу с памятью, используя sync.Pool там, где это уместно
YADRO
Александр работал над приложением, которое испытывало пиковые нагрузки при получении новых данных и не успевало поставить их в централизованную обработку. Или делало это слишком медленно. По привычке он начал профилировать приложение в надежде вычислить time-critical участки кода. Но быстро выяснил, что дело было не в какой-то медленной функции. Во время пиковых нагрузок всегда зачем-то приходил garbage collector и всё притормаживал.
Александр расскажет, какие подходы попробовал, чтобы уменьшить влияние GC на ход выполнения задачи, приведет результаты бенчмарков для разных размеров буферов данных и объяснит, почему остановился на sync.Pool для решения задачи обработки 1К+ сообщений в секунду. В частности, обсудим:
как настроить порог срабатывания GC и какие плюсы и минусы это несет;
как организовать пул предопределенного размера с помощью буферизованного канала и когда это решение не работает;
особенности использования sync.Pool и когда не следует возвращать данные в пул, а также как запретить GC очищать выделенную память.
Архитектура
Как обрабатывать 1TБ гистологических исследований в день
Uzum Tezkor
Вы тоже думаете, что врач-патологоанатом только и делает, что проводит вскрытия? Тогда вы заблуждаетесь, ведь на самом деле патологоанатомы 90% времени тратят на прижизненную диагностику, особенно в области гистологических исследований.
Во время доклада Евгений расскажет, что такое гистологическое исследование, какие вызовы стоят перед цифровой патологией сегодня и, самое главное, как оптимизируется поток больших файлов — от нескольких сотен мегабайт до нескольких десятков гигабайт — с помощью Go.
DDD на практике
GS Labs
Дмитрий расскажет о необходимости DDD, о его плюсах и минусах. Зачем использовать этот подход в разработке и с какими трудностями столкнулись он и его команда. Он затронет вопрос производительности, и вы поймете, в каких случаях стоит использовать DDD, а в каких нет.
Он разберет, как проектировать внутреннюю архитектуру сервиса так, чтобы было удобно и эффективно работать с сервисом в будущем. Рассмотрит пример одного из сервисов на Go, на основе которого будут разбираться основные детали и вопросы.
Те, кто не знаком или не имеют опыта работы и написания кода в стиле DDD, узнают, как можно и нужно проектировать сервисы, какие практики и архитектурные стили существуют А те, кто знаком, смогут почерпнуть новые идеи и получить ответы на вопросы, которые возникали при использовании данного подхода в разработке.
Чем отличается Saga от Workflow
Uzum Tezkor
Сколько нужно микросервисов, чтобы создать заказ? Один, если это оркестратор. Вспомним макропроблему микросервисов, по шагам решим проблему распределенной транзакции на примере флоу заказа и рассмотрим, как для этого можно использовать Temporal.
Во время доклада Антон разберет типовые решения: от двухфазного коммита до оркестрируемой Saga, а также ответит на вопрос, чем все-таки Saga отличается от Workflow и почему Saga — это частный случай Workflow.
Domain-Driven Design. Практический минимум
Magnit Tech
Насколько легко разработчику понять бизнес-ответственность кода?
Можете ли вы заметить конфликт существующего кода и новых бизнес-требований?
Можно ли быть уверенным, что, изменяя какие-то данные, мы сохраняем бизнес-модель в консистентном состоянии?
Как заставить код говорить с разработчиком и защитить его от необдуманных действий?
Мы решим эти проблемы с помощью Domain-Driven Design (DDD). Опустим сухую теорию, возьмем из нее самое важное и на практических примерах разберем, что такое DDD. Поймем, как он делает код безопаснее, в каких случаях стоит применять на проекте и как все это связано с микросервисами.
Расширяем горизонты
Как ускорить код, не меняя алгоритм
Распаковка 7-Zip архива самой популярной Go-библиотеки происходит медленно. Дмитрий расскажет о подходах к оптимизации Go-кода, который декомпрессирует поток из 7-Zip архива. Технологии: Golang, LZMA, pprof.
Будет интересно Go-разработчикам уровня middle/senior.
Пишем XM-плеер на Go и используем его в играх
quasilyte tech
Есть такой формат модульной музыки — XM. Она компактная, хорошо звучит и относительно эффективная в воспроизведении.
В рамках доклада Искандер покажет XM-плеер, который написал на Go, чтобы затем использовать его в своих играх. Поговорим о деталях формата, внутренностях плеера, а еще об играх, где его используют.
Другое
Вам фильтрованное или нефильтрованное? Расширяем Service Mesh Istio собственным Wasm-модулем на Go
СберТех
СберТех
Популярный архитектурный подход при разработке больших систем — это все еще микросервисы. Правда, чем больше их становится, тем сложнее ими управлять, и для решения этой проблемы придумали Service Mesh. Спикеры раскажут о популярной реализации паттерна Service Mesh — Istio. А также о том, как можно гибко и просто расширять возможности Istio с помощью Wasm-фильтров.
Go 1.22 — новые возможности и технологии
Обсудим новые функции, улучшения производительности, инструменты разработки и другие инновации в Go 1.22.
Фоновые задачи. Надежность или скорость?
Garage Eight
Проблематика и необходимость использования фоновых задач по расписанию. Часто встречающиеся подходы. Сравнительная диагностика разных подходов по различным критериям.
Технологии: рутины, воркеры, go-cron, Pulsar, kube cronjobs, cloud и другие.
Будет интересно любому разработчику цифровых систем. Владимир лично сталкивался с этой проблемой много раз на разных проектах и выработал решение, которое обладает наибольшим количеством плюсов и достаточно легко воспроизводится.
Развитие сложных и высоконагруженных проектов на Go
Участники круглого стола обсудят аспекты развития сложности и нагруженности проекта.
Готовность архитектуры для расширения и добавления интеграций, эффект «черной пятницы», мгновенный или планомерный рост нагрузки на сервисы. Методы предотвращения недоступности решения, которые затрагивают инфраструктурные и архитектурные механизмы.
Напоследок
Поскольку эту конференцию проводим впервые и не показать «как было в прошлый раз», у многих наверняка возникнет вопрос «чего вообще ожидать».
Чтобы лучше понять про доклады, можно посмотреть наши митапы.
Но не докладами едиными: нам важно, чтобы даже в онлайне конференция не превращались в одно лишь «смотреть видеопоток». Поэтому, например, после каждого доклада спикера можно как следует помучить вопросами в формате видеосозвона.
Так что, если откладывать «позже на YouTube записи увижу», пропускаешь часть происходящего.
Остаётся напомнить даты: 14–15 марта, онлайн. Все остальные подробности, а также билеты — на сайте.