Golang Developer
Томск, РоссияДжуниор • Миддл
Удаленная работа
Опыт работы какой-то есть130 000 ₽
Опыт работы какой-то есть130 000 ₽
Короткая ссылка: gkjb.ru/g18KP
О себе
На данный момент Fullstack developer.
Мои компетенции и опыт
Elecard | Fullstack-разработчик (Go / Ruby / JS) | ноябрь 2024 — июль 2026
О компании и команде
— Продуктовая компания из Томска, специализируется на ПО для работы с видео/видеопотоками.
— Работал над продуктом Boro в качестве fullstack-разработчика с основным фокусом на Go. Сам продукт это распределенная система детектирования ошибок в видеопотоке.
— Команда из 10 человек: 4 fullstack-разработчика(2 с упором на frontend, 2 с упором на backend), 3 C++ разработчика, тестировщик, техлид и PM.
— Задачи на Ruby on Rails:
1. Блокировка пользователей после N неуспешных попыток входа:
Необходимо было реализовать возможность динамического изменения стратегии разблокировки пользователей через административные настройки приложения без перезапуска сервера. До изменений стратегия (time, email, both) считывалась только при старте приложения, поэтому любые изменения вступали в силу только после перезапуска Puma.
В первую очередь было изучено, как Devise хранит конфигурацию стратегии разблокировки. Выяснилось, что параметр unlock_strategy реализован как mattr_accessor, поэтому его значение можно изменять во время выполнения приложения. После этого изменение стратегии было встроено в механизм применения настроек системы, благодаря чему новое значение начинает использоваться сразу после сохранения настроек.Логика обновления настроек была расширена так, чтобы при сохранении административных настроек происходило обновление значения нужен доступ к резюме _strategy. Это позволило отказаться от обязательного перезапуска приложения после изменения стратегии.
Во время разработки была выявлена проблема: стратегия email не имеет смысла при отключённой почте. Поэтому была реализована дополнительная логика: если почтовый сервис отключён, стратегия email становится недоступной; в интерфейсе она скрывается из списка выбора.
После внедрения динамической смены стратегии была обнаружена логическая проблема. Если система работала со стратегией time, часть пользователей могла уже находиться в состоянии блокировки. При переключении на email такие пользователи оставались заблокированными, но письмо с инструкциями не отправлялось, поскольку блокировка произошла до смены стратегии валидация не позволяет сохранить недопустимое значение.
2. Вебхук интеграции с внешними сервисами. Преобразование полезной информации в необходимый формат сервиса и дальнейшая отправка его по HTTP.
— Задачи на Go:
1. Реализовал микросервис для хранения и выдачи thumbnail-ов (миниатюрных картинок):
Golang-воркер принимал захваченные картинки из видеопотока, записывал информацию о них и сохранял сами blob-ы в Postgresql. Картинки периодически переполняли диски в следствие чего падал весь сервис. Поэтому, необходимо было сохранять и выдавать картинки на отдельной машине.
Что было реализовано: На стороне golang-воркер-а была добавлена отдельная горутина, которая отправляла картинки по HTTP на микросервис и retry/timeout. На микросервисе реализован in-memory кэш с TTL, API с эндпоинтами для создания и просмотра картинок, JWT-авторизация (для просмотра картинок), Prometheus-метрики(HTTP-коды, гистограммы времени ответа, счетчики гонок и попаданий в кэш), логи. Сервис обрабатывает до 500 RPS, хранит ~33 млн thumbnail-ов в сутки и отдает их c латентностью < 45ms.
2. Анализировал краши и баги в легаси Go-монолите: восстанавливал сценарии воспроизведения, разбирал трейсы, писал юнит-тесты и предлагал решения.
Стек:
- Golang, Ruby (Ruby on Rails), Javascript (jquery)
- PostgreSQL, Redis, Clickhouse
- Prometheus, Grafana, Docker
Интересные кандидаты
- рRrelocate remote
- раremote
- инremote
- Фс
Фул стек программист, Архитектор
remote - Тд
Технический директор (CTO) / Head of engineering
remote - Ркremote
- Рг
Руководитель группы разработки/Тимлид/Техлид
remote - Рсremote office
- РRremote
- РRremote office
