Промты для Go и Rust: как собрать высоконагруженный бэкенд без армии сеньоров
Высоконагруженный бэкенд на Go и Rust обычно требует команды опытных инженеров: одни проектируют архитектуру, другие пишут конкурентный код, третьи профилируют и отлаживают. Но что, если большую часть рутины можно переложить на AI-ассистента? Правильно сформулированные промты позволяют одному разработчику закрывать задачи, которые раньше занимали у сеньоров часы. В этой подборке — 15 практических промтов для проектирования, оптимизации и отладки бэкенда на Go и Rust. Каждый промт проверен на реальных сценариях и сопровождается примером использования. Вы сможете быстрее создавать микросервисы, настраивать gRPC и REST API, работать с конкурентностью и профилировать узкие места.
Как пользоваться промтами
Все промты предполагают, что вы работаете с AI-ассистентом, который поддерживает контекст. Чем конкретнее вы опишете входные данные (версии, ограничения, метрики), тем точнее будет ответ. Не бойтесь уточнять и просить альтернативы.
1. Проектирование микросервиса на Go с gRPC и REST
Задача: Создать скелет микросервиса с двумя интерфейсами: gRPC для внутренних вызовов и REST для внешних клиентов.
Промт:
Ты — senior Go-разработчик. Спроектируй микросервис "order-service" со следующими требованиями:
- gRPC API на порту 50051 (proto3), методы: CreateOrder, GetOrder, ListOrders.
- REST API на порту 8080, эндпоинты: POST /orders, GET /orders/{id}, GET /orders.
- Используй grpc-gateway для генерации REST из proto.
- Стек: Go 1.22, PostgreSQL, sqlc для запросов, wire для DI.
- Напиши структуру проекта, пример .proto файла, конфиг grpc-gateway и main.go с graceful shutdown.
- Добавь middleware для логирования и recovery.
Пример использования: Вы копируете промт, получаете готовый каркас с файлами. Остаётся только дописать бизнес-логику.
2. Конкурентный паттерн Worker Pool на Go
Задача: Обрабатывать тысячи задач параллельно с ограничением количества горутин.
Промт:
Напиши на Go реализацию worker pool с динамическим размером пула. Требования:
- Входной канал задач (func() error).
- Максимальное количество воркеров задаётся через конфиг (например, 100).
- Поддержка контекста для отмены.
- Сбор ошибок через errgroup.
- Пример использования: обработка 10 000 HTTP-запросов с ограничением параллелизма.
- Добавь бенчмарк для сравнения с наивным запуском горутин.
Пример: Вы вставляете промт в AI-ассистент, получаете код с комментариями и тестами.
3. Оптимизация Rust-сервиса с помощью профилирования
Задача: Найти узкие места в существующем Rust-сервисе.
Промт:
У меня есть Rust-сервис на Actix Web, который обрабатывает 5000 RPS. При нагрузке 10 000 RPS latency растёт с 20 мс до 200 мс. Предложи план профилирования:
- Какие инструменты использовать (perf, flamegraph, tokio-console)?
- Как найти блокировки в async-коде?
- Как оптимизировать аллокации (использование арены, пулы объектов)?
- Приведи пример кода с заменой Vec на SmallVec или ArrayVec.
Пример: AI выдаёт пошаговый план с командами и ожидаемыми результатами.
4. Миграция с REST на gRPC в Go
Задача: Постепенно перевести монолит на gRPC без простоя.
Промт:
Составь план миграции REST API на gRPC для Go-сервиса. Условия:
- Есть 20 эндпоинтов, которые используются мобильными клиентами.
- Нужно обеспечить обратную совместимость.
- Используй grpc-gateway для поддержки REST параллельно.
- Опиши шаги: создание proto, генерация кода, внедрение в существующий роутер, тестирование, переключение трафика.
- Приведи пример кода для одного эндпоинта.
Пример: Вы получаете дорожную карту и готовые сниппеты.
5. Отладка утечки памяти в Rust
Задача: Найти и устранить утечку памяти в async-приложении.
Промт:
В Rust-сервисе на Tokio наблюдается рост потребления памяти. Подозреваю утечку из-за циклических ссылок в Arc<Mutex<...>>. Предложи:
- Как использовать Weak для разрыва циклов.
- Инструменты для диагностики (valgrind, heaptrack, DHAT).
- Пример кода с исправлением.
- Как написать тест, воспроизводящий утечку.
Пример: AI демонстрирует замену Arc на Weak и даёт команды для профилирования.
6. Генерация кода для gRPC-клиента на Go
Задача: Быстро создать клиент для существующего gRPC-сервиса.
Промт:
Сгенерируй Go-клиент для gRPC-сервиса с proto-файлом (приложи содержимое). Нужно:
- Подключение с TLS.
- Интерцепторы для логирования и таймаутов.
- Пример вызова метода CreateOrder.
- Обработка ошибок и ретраи.
Пример: Вы вставляете proto, получаете готовый клиентский код.
7. Проектирование схемы БД для высоких нагрузок
Задача: Спроектировать схему PostgreSQL для сервиса заказов с миллионами записей.
Промт:
Спроектируй схему PostgreSQL для order-service. Требования:
- 10 млн заказов, 1 млн пользователей.
- Частые запросы: выборка заказов пользователя, фильтрация по статусу и дате.
- Нужны индексы, партиционирование по дате.
- Напиши DDL и примеры запросов с EXPLAIN ANALYZE.
Пример: AI предлагает партиционирование по месяцам и составные индексы.
8. Оптимизация конкурентности в Rust с Rayon
Задача: Ускорить обработку данных на многоядерном процессоре.
Промт:
Перепиши последовательный код на Rust с использованием Rayon для параллельной обработки вектора из 1 млн элементов. Покажи до и после, замерь ускорение. Учти, что операция — это CPU-интенсивная функция.
Пример: Вы получаете код с par_iter() и бенчмарк.
9. Написание интеграционных тестов для gRPC
Задача: Покрыть тестами gRPC-сервис на Go.
Промт:
Напиши интеграционные тесты для gRPC-сервиса на Go с использованием testcontainers и bufconn. Проверь методы CreateOrder и GetOrder. Используй testify для ассертов.
Пример: AI генерирует тестовый файл с моками и запуском контейнера PostgreSQL.
10. Рефакторинг легаси Go-кода на generics
Задача: Убрать дублирование с помощью дженериков.
Промт:
Дан код на Go с повторяющимися функциями для разных типов. Перепиши его с использованием generics (Go 1.18+). Покажи сокращение количества строк и улучшение читаемости.
Пример: AI заменяет несколько функций на одну параметризованную.
11. Настройка мониторинга для Rust-сервиса
Задача: Внедрить метрики Prometheus и трейсинг.
Промт:
Добавь в Rust-сервис на Actix Web экспорт метрик Prometheus (количество запросов, latency) и интеграцию с OpenTelemetry для трейсинга. Приведи код и необходимые зависимости.
Пример: AI показывает, как использовать метрики через actix-web-prom и opentelemetry.
12. Обработка ошибок в Go: переход на errors.Is и errors.As
Задача: Улучшить обработку ошибок в большом проекте.
Промт:
Покажи, как рефакторить обработку ошибок в Go, используя errors.Is и errors.As вместо сравнения по строке. Приведи примеры кастомных ошибок и их обёртывания.
Пример: AI демонстрирует создание sentinel errors и их проверку.
13. Оптимизация аллокаций в Rust с помощью bumpalo
Задача: Снизить нагрузку на аллокатор в горячем пути.
Промт:
Замени стандартные аллокации в функции обработки запроса на аренный аллокатор bumpalo. Покажи код до и после, замерь производительность.
Пример: AI приводит пример с bumpalo::Bump и бенчмарк.
14. Генерация Dockerfile для Go-сервиса
Задача: Собрать минимальный образ.
Промт:
Напиши многоступенчатый Dockerfile для Go-сервиса, который собирается в статический бинарник и запускается на scratch. Учти кэширование слоёв.
Пример: AI выдаёт Dockerfile с этапами builder и финальным образом.
15. Профилирование Go-сервиса с pprof
Задача: Найти утечку горутин.
Промт:
В Go-сервисе количество горутин растёт со временем. Опиши, как использовать pprof для диагностики: получение профиля, анализ, поиск утечки. Приведи пример кода с добавлением pprof эндпоинтов.
Пример: AI показывает, как подключить net/http/pprof и интерпретировать графики.
Заключение
Эти промты помогут вам быстрее создавать и оптимизировать бэкенд на Go и Rust, не привлекая дополнительных сеньоров. Главное — адаптировать их под свои задачи и проверять сгенерированный код. Начните с одного-двух промтов, интегрируйте в свой рабочий процесс и постепенно расширяйте набор. Помните: AI — это инструмент, который усиливает ваши навыки, а не заменяет их.
Комментарии