golang

Что расскажут на GoFunc: язык, инструменты, архитектура и патологоанатомы

  • суббота, 2 марта 2024 г. в 00:00:27
https://habr.com/ru/companies/jugru/articles/797095/

Почему патологоанатомы обычно заняты совсем не вскрытиями, и при чём тут 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 марта, онлайн. Все остальные подробности, а также билеты — на сайте.