Добавить в корзинуПозвонить
Найти в Дзене
Блог IT разработчика

🚀 Инициатива: «Давайте перепишем это на gRPC

» Я не ждал поручения. Я собрал данные: • Рост числа устройств — +300% за год • Задержки в обработке — до 40 минут • Ошибки десериализации — 5% сообщений И предложил: полностью заменить байтовый протокол на gRPC. Команда сомневалась. «А если медленнее будет?» «Мы же уже потратили столько времени на старый протокол!» Но я знал: технология должна служить бизнесу, а не наоборот. 🔧 Как я это сделал 1. gRPC вместо ручного фрейминга Теперь клиент подключается один раз — и получает команды в реальном времени. В gRPC есть встроенный механизм фрейминга — он основан на формате HTTP/2. Преимущества: Упрощение кода: больше не нужно управлять буферами, offset’ами и partial reads. Чёткие контракты: автоматическая генерация кода для всех языков. Надёжность: встроенные механизмы управления потоком, ошибками и статусами. Масштабируемость: поддержка server-side и bidirectional streaming. 2. Сохранение надёжности gRPC оказался не просто удобным — он гибким и контролируемым. 3. RabbitMQ — как брок

🚀 Инициатива: «Давайте перепишем это на gRPC»

Я не ждал поручения.

Я собрал данные:

• Рост числа устройств — +300% за год

• Задержки в обработке — до 40 минут

• Ошибки десериализации — 5% сообщений

И предложил: полностью заменить байтовый протокол на gRPC.

Команда сомневалась.

«А если медленнее будет?»

«Мы же уже потратили столько времени на старый протокол!»

Но я знал: технология должна служить бизнесу, а не наоборот.

🔧 Как я это сделал

1. gRPC вместо ручного фрейминга

Теперь клиент подключается один раз — и получает команды в реальном времени.

В gRPC есть встроенный механизм фрейминга — он основан на формате HTTP/2.

Преимущества:

Упрощение кода: больше не нужно управлять буферами, offset’ами и partial reads.

Чёткие контракты: автоматическая генерация кода для всех языков.

Надёжность: встроенные механизмы управления потоком, ошибками и статусами.

Масштабируемость: поддержка server-side и bidirectional streaming.

2. Сохранение надёжности

gRPC оказался не просто удобным — он гибким и контролируемым.

3. RabbitMQ — как брокер событий

Чтобы не потерять ни одного пакета при нагрузке, я внедрил RabbitMQ:

• Gateway принимает gRPC → пушит в очередь.

• Воркеры потребляют параллельно.

• При сбое — сообщения не теряются.

Система стала отказоустойчивой по design.

4. Redis для WebSocket-сессий в кластере

Главная задача — уведомить пользователя, даже если он на другом сервере.

Я реализовал:

• Хранение активных сессий в Redis.

• Механизм маршрутизации: user_id → node_id.

• Push через Pub/Sub в кластере.

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

💡 Почему это важно?

Потому что:

• Я не ждал, пока проблема взорвётся.

• Я взял ответственность — без ТЗ, без Тимлида.

• Я реализовал с нуля: от архитектуры до деплоя.

• И результат:

o Задержки ↓ на 90%

o Ошибки десериализации ↓ до 0%

o Время на добавление нового контракта ↓ с дней до минут

____

Что я понял

• Хороший инженер решает задачи.

• Выдающийся — предотвращает их.

Иногда лучшее решение — не «починить», а создать заново, но правильно.

____

🏁 Это мой проект

Я его начал.

Я его построил.

Я им горжусь.

И если завтра придёт следующая legacy-система —

я снова скажу:

«Давайте перепишем. Я знаю, как.»

🔗 Документация:

📄 Протокол: http://dev-abs.ru/proto

🧩 Кейс внедрения: http://dev-abs.ru/case

-2
-3
-4
-5
-6