🧰Обзор архитектуры быстрого сборщика логов на Go
Доклад Владимира Витковского из Ozon на HighLoad++ 2022 о лучших практиках, на которых основан быстрый сборщик логов, используемый в компании.
Владимир рассказывает, как c помощью этого инструмента удалось сократить издержки на сбор логов в 10 раз по CPU и добиться 100% доставляемости логов.
📌Вы узнаете:
✔️Как организована общая архитектура сборщика логов
✔️Как написать быстрый плагин для чтения логов из файлов
✔️Как оптимизировать внутреннюю обработку потока логов
✔️Как правильно распараллелить обработку
✔️Как гарантировать доставку
Доклад Владимира Витковского из Ozon на HighLoad++ 2022 о лучших практиках, на которых основан быстрый сборщик логов, используемый в компании.
Владимир рассказывает, как c помощью этого инструмента удалось сократить издержки на сбор логов в 10 раз по CPU и добиться 100% доставляемости логов.
📌Вы узнаете:
✔️Как организована общая архитектура сборщика логов
✔️Как написать быстрый плагин для чтения логов из файлов
✔️Как оптимизировать внутреннюю обработку потока логов
✔️Как правильно распараллелить обработку
✔️Как гарантировать доставку
🧠⚙️ Как научиться критически мыслить: 6 эффективных способов
Критическое мышление позволяет принимать решения в условиях неопределённости, доносить свои идеи до команды, видеть ошибки в логике, замечать манипуляции. В статье рассказываем, откуда пошло это понятие и как можно развить критическое мышление.
💬Считаете ли вы, что у вас развито критическое мышление?
👍 — да, и это очень помогает мне в жизни и работе
🤔 — да, но оно ничем не помогает
🥱 — нет
Критическое мышление позволяет принимать решения в условиях неопределённости, доносить свои идеи до команды, видеть ошибки в логике, замечать манипуляции. В статье рассказываем, откуда пошло это понятие и как можно развить критическое мышление.
💬Считаете ли вы, что у вас развито критическое мышление?
👍 — да, и это очень помогает мне в жизни и работе
🤔 — да, но оно ничем не помогает
🥱 — нет
🧰Реализация обновляемой блокировки чтения и записи: гайд для Go-разработчика
Обычный RWMutex подходит в большинстве случаев. Но если задача требует долго удерживать блокировку записи, при этом большая часть времени уходит на подготовку к чтению, было бы здорово иметь блокировку чтения, которую можно «обновить» до блокировки записи.
Команда Upstash столкнулась с этой проблемой и разработала UpgradableRWMutex, улучшенную версию стандартного sync.RWMutex.
Обычный RWMutex подходит в большинстве случаев. Но если задача требует долго удерживать блокировку записи, при этом большая часть времени уходит на подготовку к чтению, было бы здорово иметь блокировку чтения, которую можно «обновить» до блокировки записи.
Команда Upstash столкнулась с этой проблемой и разработала UpgradableRWMutex, улучшенную версию стандартного sync.RWMutex.
Upstash
Upgradable Read Write Lock for Go
Articles and tutorials on serverless technologies from Upstash and community
🤩Сборка мусора, модульное тестирование и горутины сделали Go лучшим выбором для Krater, кроссплатформенного приложения для локальной отладки приложений Laravel (да, тот самый PHP-фреймворк).
🤔Несколько месяцев назад разработчики Krater решили мигрировать на Wails (Go), хотя изначально он был написан на Tauri (Rust). Под катом — опыт команды и предпосылки такого решения👇
🔗 Читать
🤔Несколько месяцев назад разработчики Krater решили мигрировать на Wails (Go), хотя изначально он был написан на Tauri (Rust). Под катом — опыт команды и предпосылки такого решения👇
🔗 Читать
blog.moonguard.dev
Why Golang instead of Rust to develop the Krater desktop app | MoonGuard - Web Monitoring Tools
We talk about our experience developing Krater in Rust and why we decided to migrate Krater from Rust to Golang. From Tauri to Wails plus the addition of prioritizing comfort and development experience when creating products.
Обнаружение утечек памяти в Go-приложении: лучшие практики и инструменты
Обзор инструментов, которые вы можете использовать для отслеживания утечек памяти, включая утечки в горутинах.
👉 Читать
Обзор инструментов, которые вы можете использовать для отслеживания утечек памяти, включая утечки в горутинах.
👉 Читать
❔ Результаты ежегодного опроса разработчиков StackOverflow: 20+ главных инсайтов 2023 года
В данной статье мы собрали 20+ главных инсайтов, которые помогут лучше понять, что происходит в ИТ-сфере в мире.
🔗 Читать статью
🔗 Зеркало
В данной статье мы собрали 20+ главных инсайтов, которые помогут лучше понять, что происходит в ИТ-сфере в мире.
🔗 Читать статью
🔗 Зеркало
🤔Динамика закрытия пулл-реквестов, прирост кодовой базы, активность разработчиков по часам и по дням недели и многое другое... Что только не придумают для оценки производительности разработчика.
💬А в вашей команде есть метрики оценки личной производительности? Если да, то какие и как они измеряются?
#холивар
💬А в вашей команде есть метрики оценки личной производительности? Если да, то какие и как они измеряются?
#холивар
📌Go Time
🎤 Опыт, полученный на GopherCon 2023: как организатора, ведущего воркшопов и докладчика
🎤 Семь смертных грехов Gо: по мотивам доклада John Gregory на GopherCon "7 Deadly Gopher Sins"
🎤 Что нового в криптографических библиотеках Go: Filippo Valsorda и Roland Shoemaker из команды Go делятся новостями старой доброй криптографии
📌Cup o' Go
🎤 Gopls 0.14 с включенной телеметрией уже скоро и многое другое
🎤 range over int & range over func в деталях и многое другое
🎤 Интервью с мейнтейнером testcontainers и многое другое
#подкасты
🎤 Опыт, полученный на GopherCon 2023: как организатора, ведущего воркшопов и докладчика
🎤 Семь смертных грехов Gо: по мотивам доклада John Gregory на GopherCon "7 Deadly Gopher Sins"
🎤 Что нового в криптографических библиотеках Go: Filippo Valsorda и Roland Shoemaker из команды Go делятся новостями старой доброй криптографии
📌Cup o' Go
🎤 Gopls 0.14 с включенной телеметрией уже скоро и многое другое
🎤 range over int & range over func в деталях и многое другое
🎤 Интервью с мейнтейнером testcontainers и многое другое
#подкасты
How to Generate Unique IDs in Distributed Systems.pdf
9.1 MB
Как генерировать уникальные идентификаторы в распределенных системах: 6 ключевых стратегий
В распределенном окружении два узла могут одновременно назначать идентификаторы. Задача состоит в том, чтобы эти идентификаторы оставались уникальными, избегая дублирования и обеспечивая согласованность системы. Читайте подробнее на Medium или в PDF:
◆ UUID
◆ NanoID
◆ Sequence
◆ ObjectID
◆ Twitter Snowflake
◆ Sonyflake
В распределенном окружении два узла могут одновременно назначать идентификаторы. Задача состоит в том, чтобы эти идентификаторы оставались уникальными, избегая дублирования и обеспечивая согласованность системы. Читайте подробнее на Medium или в PDF:
◆ UUID
◆ NanoID
◆ Sequence
◆ ObjectID
◆ Twitter Snowflake
◆ Sonyflake
⚡️С выпуском версии 9.3.0 официальный клиент Redis делает большой шаг вперед благодаря прямой поддержке JSON
📌Простой пример того, как начать работу с JSON в Go-Redis:
#новости #инструменты
📌Простой пример того, как начать работу с JSON в Go-Redis:
var ctx = context.Background()
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
type Bicycle struct {
Brand string
Model string
Price int
}
bicycle := Bicycle{
Brand: "Velorim",
Model: "Jigger",
Price: 270,
}
_, err := client.JSONSet(ctx, "bicycle:1", "$", bicycle).Result()
if err != nil {
panic(err)
}
res, err := client.JSONGet(ctx, "bicycle:1", ".Model").Result()
if err != nil {
panic(err)
}
fmt.Println("bicycle:1 model is", res)
#новости #инструменты
GitHub
Release 9.3.0 · redis/go-redis
What's new?
JSON support
We are continuing to add support for more Redis data types in Go-Redis. Today, we are happy to announce support for JSON. JSON is a Redis data structure for storing, qu...
JSON support
We are continuing to add support for more Redis data types in Go-Redis. Today, we are happy to announce support for JSON. JSON is a Redis data structure for storing, qu...
Какие меры вы принимаете для предотвращения или борьбы с профессиональным выгоранием? Можно выбрать несколько вариантов.
Anonymous Poll
13%
У меня нет проблем с выгоранием
26%
Регулярные перерывы в течение рабочего дня
32%
Хобби и интересы вне работы
30%
Регулярные занятия спортом или физическая активность
5%
Медитация
20%
Постановка чётких границ между работой и личной жизнью
16%
Смена проектов или области деятельности внутри ИТ для восстановления интереса и мотивации
15%
Пет-проекты
1%
Свой вариант (напишу в комментариях)
28%
Посмотреть результаты
Goroutine_Scheduler_Revealed_You’ll_Never_See_Goroutines_the_Same.pdf
7.2 MB
Подводные камни конкурентности: серия статей для Go-разработчика с простыми и наглядными примерами
⚡Горутины: основы
⚡Каналы: введение
⚡Каналы: select & for range
⚡Планировщик горутин
⚡Горутины: основы
⚡Каналы: введение
⚡Каналы: select & for range
⚡Планировщик горутин
Хотите готовиться к собеседованию по Go и не только на реальных примерах? Тогда пост ниже для вас👇
🙇♂️Коллекция тестовых заданий для самостоятельного выполнения от разных ИТ-компаний, собранная сообществом вместе с командой Хекслет: маст-хэв при подготовке к собесу.
🔗 GitHub
🔗 GitHub
🥳Сегодня четырнадцатый день рождения релиза Go с открытым исходным кодом: за плечами у команды Go и сообщества два полнофункциональных релиза и другие важные фичи
☑️Выпуски Go 1.20 в феврале и Go 1.21 в августе
☑️Завезли profile-guided optimization и встроенное управление тулчейном
☑️Добавлена поддержка сбора профилей покрытия в бинарных сборках, созданных go build
☑️Совместимость еще больше улучшена за счет расширения соглашений об использовании GODEBUG
☑️Новый пакет структурированного логирования и многие другие изменения стандартной библиотеки
👉 Подробнее в статье Расса Кокса
☑️Выпуски Go 1.20 в феврале и Go 1.21 в августе
☑️Завезли profile-guided optimization и встроенное управление тулчейном
☑️Добавлена поддержка сбора профилей покрытия в бинарных сборках, созданных go build
☑️Совместимость еще больше улучшена за счет расширения соглашений об использовании GODEBUG
☑️Новый пакет структурированного логирования и многие другие изменения стандартной библиотеки
👉 Подробнее в статье Расса Кокса
go.dev
Fourteen Years of Go - The Go Programming Language
Happy Birthday, Go!
Гайд по разработке системы уведомлений в реальном времени с помощью Go + Kafka:
• Что такое Kafka?
• Как настроить рабочее пространство проекта?
• Как создать модели пользователя и уведомлений?
• Как настроить Kafka producer?
• Как настроить Kafka consumer?
• Тестирование проекта
👉 Читать
• Что такое Kafka?
• Как настроить рабочее пространство проекта?
• Как создать модели пользователя и уведомлений?
• Как настроить Kafka producer?
• Как настроить Kafka consumer?
• Тестирование проекта
👉 Читать
🔍Статические SQL-запросы часто оказываются недостаточными при необходимости создания условных запросов, а разработка динамических запросов в Go требует глубоких знаний SQL и тонкостей работы с языком.
🤔Проблемы включают предотвращение SQL-инъекций, использование параметризованных запросов, управление сложностью запросов, оптимизацию производительности и поддержание читаемости кода.
📚В статье рассмотрены стратегии и библиотеки, предназначенные для решения этих проблем, и представлена новая библиотека под названием tqla, которая использует пакет text/template для безопасной генерации динамических условных SQL-запросов.
👉 GitHub
🤔Проблемы включают предотвращение SQL-инъекций, использование параметризованных запросов, управление сложностью запросов, оптимизацию производительности и поддержание читаемости кода.
📚В статье рассмотрены стратегии и библиотеки, предназначенные для решения этих проблем, и представлена новая библиотека под названием tqla, которая использует пакет text/template для безопасной генерации динамических условных SQL-запросов.
t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
if err != nil {
return err
}
insertStmt, insertArgs, err:= t.Compile(`{{ $length := sub ( len . ) 1 }}
INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at')
VALUES {{ range $i, $v := . }}
( {{$v.Id}}, {{$v.Title}}, {{$v.Description}}, {{ $v.Complete }}, {{ $v.CreatedAt }} ){{if lt $i $length}},{{else}};{{end -}}
{{end}}`, todos)
if err != nil {
return err
}
_, err := db.Exec(insertStmt, insertArgs...)
👉 GitHub
Vaunt | Blog
Golang Dynamic SQL Templating
Learn how to build dynamic SQL queries in Golang leveraging a new open-source library called tqla developed by Vaunt.