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

kdzqbteyxhmrxpjytd7u7qgnuig.jpeg

Почему патологоанатомы обычно заняты совсем не вскрытиями, и при чём тут Go?

Так, предыдущим вопросом мы завладели вашим вниманием, теперь о главном. В январе мы рассказали Хабру о нашей новой конференции для Go-разработчиков и привели примеры докладов.

А теперь, когда GoFunc уже на носу, представляем Хабру полную программу с описаниями всех докладов. Там про самое разное — и инструменты, и архитектуру, и сам язык. Ну и о том, чем заняты патологоанатомы, тоже сказано, хоть это для конференции и не основная тема.

Содержание

  • Библиотеки и инструменты

  • Язык и рантайм

  • Архитектура

  • Расширяем горизонты

  • Другое

Библиотеки || Инструменты

gRPC: Under the Hood

htpiltudhpsn77cmi9dpfv1eabe.pngАлексей Акулович

С gRPC уже давно и плодотворно идет работа в самых разных областях. Но часто gRPC воспринимают как некую черную коробку, где с одной стороны закидывается protobuf, а с другой стороны что-то вылетает в ответ. Или имеют еще более абстрактное представление о том, как это всё работает.

В докладе Алексей разберет работу gRPC не со стороны пользователя, ибо таких материалов просто море, а то, как всё работает под капотом. Это, по сути, минимальная handmade gRPC-реализация на Go stdlib. Существующие полноценные реализации останутся за рамками доклада.

Облегчаем жизнь разработчикам при помощи плагинов protoc

na4iyyec5xyr6lyewaghilmei6u.jpegСвятослав Петров

Ozon

По всему миру разработчики используют Protobuf как plug-n-play решение, даже не задумываясь о том, как работает его тулчейн и как его можно переиспользовать для собственных целей.

Разберемся в том, как устроен Protobuf и его тулчейн на низком уровне (protoc + плагины), как написать свой плагин на Go. Даже напишем небольшой демо-плагин. Разберем, как это можно применить в своих проектах и какие готовые решения вы можете применять сегодня в Go.

Будет полезно тем, кто активно использует Protobuf и разрабатывает инструменты для других разработчиков.

gRPC Middleware в Go как способ модифицировать все запросы в одном месте

qttg7tcgiaxomxrbhpxcll1xjbq.jpegАлександр Шакмаев

Cloud.ru

В Cloud.ru ценят время пользователей и стремятся не возвращать ошибки на сторону клиента. Особенно если в запрос случайно проскочил бесполезный пробел или символ переноса строки. Решение в лоб — писать валидаторы и модификаторы внутри всех контроллеров. Но что, если контроллеров очень много? Как такой объем поддерживать?

Еще один способ — реализовать метод проксирования gRPC-запросов, используя интерцепторы. Сложности начинаются, когда мы хотим вмешаться в данные запроса.

Разберемся, как рефлексия и несколько строк кода в одном единственном месте помогут корректно модифицировать данные всех запросов сразу и обрезать лишнее.

protobuf в Go

g1iieulvn_wfv1l6ox-mo_xskow.pngВладислав Сидоров

Ozon

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

Базы, деньги и Go Way

ap3gvfazivrkdydnioqkeibhzr8.pngНиколай Ушков

Тинькофф

Николай расскажет о выборе способа работы с базой данных на Go: использовать ORM или стандартные низкоуровневые библиотеки. Но посмотрим на этот выбор с позиции бизнеса — на примере абстрактной компании он покажет, какие последствия у этого выбора, когда и каким способом они себя проявляют, и в какой ситуации вы окажетесь спустя несколько лет.

Язык и рантайм

Внутреннее устройство мьютексов в Go

87womiiw-cpjxvglwuf-kucsmg4.pngИлья Сухов

Сбер

Что такое мьютексы и для чего они используются? Во время доклада разберемся с мьютексами, а также с их внутренним устройством.

Вы узнаете, из чего состоят и как работают sync.Mutex и sync.RWMutex, в чем особенности их внутреннего устройства. Илья представит выводы и нюансы использования.

Типы данных под капотом: слайсы и как их готовить

vrkcmmg1vqrv6u31yj0n6ontnps.pngВладислав Белогрудов

YADRO

Владислав затронет интересные оптимизации компилятора, стандартные средства strings.Builder, bytes.Buffer, sync.Pool и библиотеку slices на дженериках. Поговорим как про внутреннее устройство, так и про правильное использование. Попытаемся ответить на вопрос: «А почему именно так?», измерим скорость и память, а также подискутируем о лучших практиках.

Популярные ошибки в Golang и как их избежать

dso9vsj_xm8k7ghbpxkmwpxgv_0.pngДмитрий Королев

Авито

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

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

Обсудим горутины и средства работы с ними: узнаем, почему нельзя копировать мьютексы и чем опасна работа с атомиками. Вспомним, что такое замыкания и как их использовать при написании кода. Разберем примеры правильного и неправильного использования defer. Закопаемся поглубже в интерфейсы и немного посмотрим на их внутреннее устройство, чтобы найти ответы на неожиданности, которые возникают при работе с ними. И в завершение рассмотрим работу с вендорингом и его особенности.

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

Когда нельзя, но очень хочется — GO!

ocstqvxzgqj02iw9mev4s3pkvq8.pngЕгор Лазаренков

Сбер

Разберем обход всех ограничений, характерных для ООП (получение полного доступа к приватным полям, функциям, методам и типам другого пакета), и ситуации, когда это лучшее решение.

Разберемся, как изменить код программы после ее компиляции. Напишем простую программу на Gо и взломаем ее при помощи IDA. Также пропатчим драйвер для работы с PostgreSQL (pgx), добавив в него поддержку глобального трейсера без внесения изменений в исходники драйвера.

PGO: практика и маленькие хитрости использования

geqhopj8hiknvjsruldb9e39r4a.jpegМакс Ривейро

Ozon

Рассмотрим PGO и всё то, что кроется за этой аббревиатурой: как PGO устроен в Go, как его использовать в ваших приложениях, какие результаты вы можете получить при использовании этого способа оптимизации.

Строка: от известного к неизвестному

c-3rgoj0cynou_415vbnsd65lrm.pngРоман Чалый

VK

Кажется, что строка в Go — очень понятная сущность: неизменяемый массив байтов. Но она может удивить.

Роман расскажет, как компилятор работает со строками, какие есть оптимизации и почему применяются именно такие оптимизации.

Снижаем нагрузку на Garbage Collector и ускоряем работу с памятью, используя sync.Pool там, где это уместно

8jfi14sxg4hlcmtgfcazq3lmbuo.pngАлександр Иванов

YADRO

Александр работал над приложением, которое испытывало пиковые нагрузки при получении новых данных и не успевало поставить их в централизованную обработку. Или делало это слишком медленно. По привычке он начал профилировать приложение в надежде вычислить time-critical участки кода. Но быстро выяснил, что дело было не в какой-то медленной функции. Во время пиковых нагрузок всегда зачем-то приходил garbage collector и всё притормаживал.

Александр расскажет, какие подходы попробовал, чтобы уменьшить влияние GC на ход выполнения задачи, приведет результаты бенчмарков для разных размеров буферов данных и объяснит, почему остановился на sync.Pool для решения задачи обработки 1К+ сообщений в секунду. В частности, обсудим:

как настроить порог срабатывания GC и какие плюсы и минусы это несет;
как организовать пул предопределенного размера с помощью буферизованного канала и когда это решение не работает;
особенности использования sync.Pool и когда не следует возвращать данные в пул, а также как запретить GC очищать выделенную память.

Архитектура

Как обрабатывать 1TБ гистологических исследований в день

kupmxguryzecpnajljgo3yf7nge.pngЕвгений Конечный

Uzum Tezkor

Вы тоже думаете, что врач-патологоанатом только и делает, что проводит вскрытия? Тогда вы заблуждаетесь, ведь на самом деле патологоанатомы 90% времени тратят на прижизненную диагностику, особенно в области гистологических исследований.

Во время доклада Евгений расскажет, что такое гистологическое исследование, какие вызовы стоят перед цифровой патологией сегодня и, самое главное, как оптимизируется поток больших файлов — от нескольких сотен мегабайт до нескольких десятков гигабайт — с помощью Go.

DDD на практике

amdvkbp44k6s2tijtetqjys7rgc.pngДмитрий Анисов

GS Labs

Дмитрий расскажет о необходимости DDD, о его плюсах и минусах. Зачем использовать этот подход в разработке и с какими трудностями столкнулись он и его команда. Он затронет вопрос производительности, и вы поймете, в каких случаях стоит использовать DDD, а в каких нет.

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

Те, кто не знаком или не имеют опыта работы и написания кода в стиле DDD, узнают, как можно и нужно проектировать сервисы, какие практики и архитектурные стили существуют А те, кто знаком, смогут почерпнуть новые идеи и получить ответы на вопросы, которые возникали при использовании данного подхода в разработке.

Чем отличается Saga от Workflow

ykcd-vvoygfjiqr8awsdidmc-ic.pngАнтон Цитульский

Uzum Tezkor

Сколько нужно микросервисов, чтобы создать заказ? Один, если это оркестратор. Вспомним макропроблему микросервисов, по шагам решим проблему распределенной транзакции на примере флоу заказа и рассмотрим, как для этого можно использовать Temporal.

Во время доклада Антон разберет типовые решения: от двухфазного коммита до оркестрируемой Saga, а также ответит на вопрос, чем все-таки Saga отличается от Workflow и почему Saga — это частный случай Workflow.

Domain-Driven Design. Практический минимум

0-4l1wr70_jyn4iqq5lazmdsiw8.pngКонстантин Кастырин

Magnit Tech

Насколько легко разработчику понять бизнес-ответственность кода?
Можете ли вы заметить конфликт существующего кода и новых бизнес-требований?
Можно ли быть уверенным, что, изменяя какие-то данные, мы сохраняем бизнес-модель в консистентном состоянии?
Как заставить код говорить с разработчиком и защитить его от необдуманных действий?

Мы решим эти проблемы с помощью Domain-Driven Design (DDD). Опустим сухую теорию, возьмем из нее самое важное и на практических примерах разберем, что такое DDD. Поймем, как он делает код безопаснее, в каких случаях стоит применять на проекте и как все это связано с микросервисами.

Расширяем горизонты

Как ускорить код, не меняя алгоритм

wgrmimrovxomvqqc6gnev8bbpfi.pngДмитрий Кулагин

Распаковка 7-Zip архива самой популярной Go-библиотеки происходит медленно. Дмитрий расскажет о подходах к оптимизации Go-кода, который декомпрессирует поток из 7-Zip архива. Технологии: Golang, LZMA, pprof.

Будет интересно Go-разработчикам уровня middle/senior.

Пишем XM-плеер на Go и используем его в играх

c40mf08pabqlkccgh8wwfvrfmqw.jpegИскандер Шарипов

quasilyte tech

Есть такой формат модульной музыки — XM. Она компактная, хорошо звучит и относительно эффективная в воспроизведении.

В рамках доклада Искандер покажет XM-плеер, который написал на Go, чтобы затем использовать его в своих играх. Поговорим о деталях формата, внутренностях плеера, а еще об играх, где его используют.

Другое

Вам фильтрованное или нефильтрованное? Расширяем Service Mesh Istio собственным Wasm-модулем на Go

d4bzpxt2ootxedfhrc4zhmhjcvk.pngАлександр Козлов

СберТех

w84fimpgh0xwmi6vrgwifkxek1k.pngМаксим Чудновский

СберТех

Популярный архитектурный подход при разработке больших систем — это все еще микросервисы. Правда, чем больше их становится, тем сложнее ими управлять, и для решения этой проблемы придумали Service Mesh. Спикеры раскажут о популярной реализации паттерна Service Mesh — Istio. А также о том, как можно гибко и просто расширять возможности Istio с помощью Wasm-фильтров.

Go 1.22 — новые возможности и технологии

Обсудим новые функции, улучшения производительности, инструменты разработки и другие инновации в Go 1.22.

Фоновые задачи. Надежность или скорость?

3h1z5o2_pcvieaboo_lh5t43fka.pngВладимир Богринцев

Garage Eight

Проблематика и необходимость использования фоновых задач по расписанию. Часто встречающиеся подходы. Сравнительная диагностика разных подходов по различным критериям.

Технологии: рутины, воркеры, go-cron, Pulsar, kube cronjobs, cloud и другие.

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

Развитие сложных и высоконагруженных проектов на Go

Участники круглого стола обсудят аспекты развития сложности и нагруженности проекта.

Готовность архитектуры для расширения и добавления интеграций, эффект «черной пятницы», мгновенный или планомерный рост нагрузки на сервисы. Методы предотвращения недоступности решения, которые затрагивают инфраструктурные и архитектурные механизмы.

Напоследок

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

Чтобы лучше понять про доклады, можно посмотреть наши митапы.

Но не докладами едиными: нам важно, чтобы даже в онлайне конференция не превращались в одно лишь «смотреть видеопоток». Поэтому, например, после каждого доклада спикера можно как следует помучить вопросами в формате видеосозвона.
Так что, если откладывать «позже на YouTube записи увижу», пропускаешь часть происходящего.

Остаётся напомнить даты: 14–15 марта, онлайн. Все остальные подробности, а также билеты — на сайте.

© Habrahabr.ru