Как стать автором
Обновить
9
0
Sergey Skubach @SkU4

engineer | developer

Отправить сообщение

Создание CLI утилит на Go с библиотекой Cobra

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.4K

Сегодня мы рассмотрим, как с помощью замечательной библиотеки Cobra превратить обычный Go-код в инструмент CLI. Cobra позволяет создавать интерфейсы командной строки.

Начнем с самого начала — установки и настройки проекта.

Читать далее
Всего голосов 11: ↑9 и ↓2+11
Комментарии2

Кратко про сетевые протоколы в Golang: TCP, QUIC и UDP

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров5.7K

Сегодня мы кратко рассмотрим то, как реализовать такие протколы, как TCP, UDP и QUIC в Golang.

Начнем с TCP.

Читать далее
Всего голосов 19: ↑13 и ↓6+11
Комментарии3

Выжимаем из Go максимум производительности

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров19K

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

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

Читать далее
Всего голосов 76: ↑74 и ↓2+87
Комментарии40

Слезаем с облачной иглы Aqara и подключаем устройства к контроллеру Wiren Board

Время на прочтение9 мин
Количество просмотров55K

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

Я купил несколько устройств Aqara, которые помогут мне сделать несколько типичных сценариев умного дома. Сперва я подключу устройства к родному облаку Aqara: проверю удобство, создание сценариев и работу без интернета.

Затем я откажусь от облака Aqara и перейду на локальное решение Wiren Board 7 с модулем расширенияSprut.stick ZigBee WBE2R-R-ZIGBEE-SH, оболочкой Sprut.hub и Алисой. Сравню результат и процесс с родным облаком.

Читать далее
Всего голосов 18: ↑17 и ↓1+20
Комментарии34

Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED

Время на прочтение10 мин
Количество просмотров39K

В первой статье «Облачный умный дом: что нужно знать, чтобы избежать проблем» я рассмотрел преимущества и недостатки облачных решений, а также проблемы, с которыми за последние месяцы пришлось столкнуться пользователям разных облаков. Затем я перешел к практике: приобрел несколько устройств Aqara.

Во второй статье «Слезаем с облачной иглы Aqara и подключаем устройства к контроллеру Wiren Board» я отказался от фирменного облака Aqara, после чего перевел все устройства на контроллер с оболочкой Sprut.hub. Конечно, я прикрутил Алису от Яндекса для сбора статистики и голосового управления.

Настало время следующего этапа — использовать открытые бесплатные решения Zigbee2mqtt и Node-RED. В качестве хаба я возьму контроллер Wiren Board 7, но вы можете использовать любые другие решения, например, отдельный ПК.

Читать далее
Всего голосов 19: ↑19 и ↓0+19
Комментарии14

Умный планшет для умного дома

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров23K

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

Читать далее
Всего голосов 14: ↑12 и ↓2+11
Комментарии60

Структурированное логирование в Go с помощью Slog

Время на прочтение22 мин
Количество просмотров16K

Более 10 лет разработчики на Go жаловались на отсутствие структурированного логирования в ядре Golang. Участники сообщества Golang даже создали несколько собственных пакетов, таких как Logrus, Zap и Zerolog. В 2023 году, команда разработчиков Google Go наконец-то представила Slog — высокопроизводительный пакет для структурированного ведения логов в стандартной библиотеке Go. Мы перевели гайд о возможностях slog.

Читать далее
Всего голосов 15: ↑14 и ↓1+13
Комментарии5

Clickhouse, Grafana и 3000 графиков. Как построить систему быстрых дашбордов

Время на прочтение17 мин
Количество просмотров33K

Меня зовут Валя Борисов, и я — аналитик в команде Ozon. Задача нашей команды — создавать инструменты для мониторинга и анализа скорости. 

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

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

Читать далее
Всего голосов 41: ↑41 и ↓0+41
Комментарии25

Проблемы функции Golang init

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров8.3K

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

Читать далее
Всего голосов 16: ↑13 и ↓3+17
Комментарии5

Отказоустойчивая архитектура: почему Tarantool не падает?

Время на прочтение8 мин
Количество просмотров7.3K


Основная проблема в высоконагруженных приложениях — отказоустойчивость. Нагрузка с упавших узлов в кластере должна переключаться на живые. Это кажется несложной задачей, но на практике появляется много подводных камней. Я потратил много времени на поддержку различных кластеров, построенных на Tarantool и наших кластерных фреймворках Cartridge и TDG, и сегодня расскажу вам, как обеспечивается отказоустойчивость в наших приложениях. Будет интересно всем, кто хочет подробнее узнать, как устроен фейловер в Cartridge, и тем, кто хочет узнать о нашем опыте создания автоматических фейловеров.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+41
Комментарии0

Реализация Graceful Shutdown в Go

Время на прочтение17 мин
Количество просмотров17K

Изящное завершение работы (Graceful Shutdown) важно для любого длительного процесса, особенно для того, который обрабатывает состояние. Например, что если вы хотите завершить работу базы данных, поддерживающей ваше приложение, а процесс db не сбрасывает текущее состояние на диск, или что если вы хотите завершить работу веб-сервера с тысячами соединений, но не дожидаетесь окончания запросов. Изящное завершение работы не только положительно сказывается на пользовательском опыте, но и облегчает внутренние операции, что приводит к более счастливым инженерам и менее напряженным SRE.

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

Читать далее
Всего голосов 14: ↑11 и ↓3+9
Комментарии3

Мультиплатформенные образы: что это такое и зачем они нужны

Время на прочтение7 мин
Количество просмотров8.2K

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

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии4

Kafka, go и параллельные очереди

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров15K

В этой статье я расскажу о паре способов увеличить пропускную способность системы с помощью партиций kafka и каналов go. В качестве библиотеки-клиента kafka буду использовать segmentio/kafka-go. Статья будет полезна начинающим go-разработчикам, которые уже знакомы с основными концепциями Apache Kafka (producer, consumer, consumer group, offset, топик, партиция), но еще не задумывались о масштабировании. Все рассуждения будут опираться на игрушечный пример, который, я надеюсь, хотя бы немного напоминает реальные системы.

Читать далее
Всего голосов 11: ↑10 и ↓1+11
Комментарии19

Как PaaS решил проблемы стандартизации разработки сервиса одной утилитой

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров3K

Привет ? На связи команда PaaS СберМаркета. Меня зовут Роман, и уже больше 2-х лет моя группа занимается разработкой инструментов для разработчиков, в том числе утилитой sbm-cli, о которой хочу рассказать сегодня.

Вероятно вы каждый день пользуетесь консольными утилитами, такими как git, homebrew, ssh, grep, find, etc. Мы сделали command line interface приложение, запуск которого на локальной машине разработчика может превышать количество запусков команды git (спойлер: статистика в конце статьи).

О том как так получилось, почему этот инструмент так важен для разработчика и что он умеет, а что нет, расскажем в этой статье.

Читать далее
Всего голосов 16: ↑14 и ↓2+12
Комментарии9

Руководство по созданию кластеров и управлению инфраструктурой с помощью Terraform

Время на прочтение8 мин
Количество просмотров6.8K


Terraform — один из самых популярных инструментов для автоматизации работы с инфраструктурой. По данным исследования состояния DevOps в России 2023, его выбирают 37% специалистов. Вместе с тем многие DevOps-инженеры и системные администраторы продолжают сталкиваться с проблемами при освоении инструмента на практике. Попытаемся исправить это. 
Читать дальше →
Всего голосов 22: ↑20 и ↓2+27
Комментарии0

Golang: как найти мёртвый код в проекте, а заодно оценить покрытие тестами живого кода

Время на прочтение3 мин
Количество просмотров3.8K

В Go 1.20 сделали возможность сбилдить приложение с флагом cover


go build -cover

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


Это, конечно, было сделано для интеграционных тестов, когда приложение запускается целиком в каких-то сценариях (а не через go test), но, вероятно, это можно попробовать использовать и по-другому:


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


Так можно найти недовыпиленный легаси-код, старые эндпоинты API, которые давно никому не нужны, малозначимые проверки if err != nil и прочее. Как минимум, на это интересно посмотреть, можно найти что-нибудь удивительное.


Disclaimer: разумеется, сбор статистики создает какой-то оверхед, поэтому подойдёт точно не всем. Как вариант, можно пустить туда небольшую часть трафика.

Читать дальше →
Всего голосов 10: ↑9 и ↓1+10
Комментарии4

Некоторые советы, которые я почерпнул из книги «100 ошибок в Go»

Время на прочтение6 мин
Количество просмотров7K
image

Недавно я закончил читать книгу Тейвы Харсаньи "100 ошибок и как их избежать", и вместо того, чтобы писать рецензию (всем, кто работает с Go, стоит ее прочитать), я решил поделиться четырьмя ошибками, которые показались мне интересными и о которых я раньше не знал.
Читать дальше →
Всего голосов 7: ↑5 и ↓2+6
Комментарии11

Конкурентность — это не параллелизм

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров15K

Это полное изложение замечательного доклада Роба Пайка "Concurrency is Not Parallelism". Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.

Читать далее
Всего голосов 10: ↑8 и ↓2+6
Комментарии9

Используем Hashicorp Vault для хранения секретов

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров40K

В этой статье хотелось бы поделиться практикой использования хранилища секретов от компании Hashicorp, и называется оно Vault.

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

Читать далее
Всего голосов 10: ↑7 и ↓3+7
Комментарии11

В Go 1.21 существенно расширяется стандартная библиотека

Время на прочтение4 мин
Количество просмотров14K
// теперь в Go так можно!
slices.Contains(s, v)

Год назад в блоге Каруны мы писали про дженерики в Go, и там упоминалось, что гошное сообщество разделилось на две части. Не всем это нововведение было нужно, особенно в простом продуктовом коде. И надо сказать, это до сих пор так, дженерики по-прежнему используют далеко не все проекты.


Однако для стандартной библиотеки Go это было по-настоящему царским подарком. Появились новые стандартные обобщенные функции, и, отстоявшись в экспериментальном репозитории golang.org/x/exp, теперь появятся в Go 1.21. Релиз буквально через месяц.


TLDR: появилось множество функций по работе со слайсами, мапами, а также новый логгер с (почти) всеми нужными фишечками.


Лично для меня знаковым событием стало появление возможности поиска элемента в слайсе и получение ключей мапы, потому что ну давно пора, 10 лет языку.


Но давайте обо всём по порядку.

Читать дальше →
Всего голосов 35: ↑33 и ↓2+39
Комментарии7

Информация

В рейтинге
Не участвует
Откуда
Минск, Минская обл., Беларусь
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer, Fullstack Developer
Golang
Git
PostgreSQL
Docker
CI/CD
MongoDB