Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 412новых вакансий за сутки·55 411вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 671
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

DevOps и инфраструктура

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

Аналитика и данные

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

Другие направления

  • Проджект-менеджер103
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме FiberВсе вопросы
FiberMiddleКодинг

Как реализовать rate limiting в Fiber?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Подключите github.com/gofiber/fiber/v2/middleware/limiter с limiter.New(limiter.Config{Max: N, Expiration: time.Minute}). Для распределённого окружения используйте Storage с Redis-бэкендом вместо памяти по умолчанию.

Базовый пример (in-memory)

package main

import (
	"time"

	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/limiter"
)

func main() {
	app := fiber.New()

	app.Use(limiter.New(limiter.Config{
		Max:        100,            // максимум запросов
		Expiration: 1 * time.Minute, // за это окно
		KeyGenerator: func(c *fiber.Ctx) string {
			return c.IP() // ключ = IP клиента
		},
		LimitReached: func(c *fiber.Ctx) error {
			return c.Status(fiber.StatusTooManyRequests).JSON(fiber.Map{
				"error": "rate limit exceeded, try again later",
			})
		},
	}))

	app.Get("/", func(c *fiber.Ctx) error {
		return c.SendString("OK")
	})

	app.Listen(":3000")
}

Rate limiting в Fiber

Fiber включает middleware github.com/gofiber/fiber/v2/middleware/limiter, реализующий алгоритм фиксированного окна (fixed window). Для sliding window и более тонкой настройки подключается Redis-хранилище.

Распределённое хранилище (Redis)

In-memory хранилище не шарится между несколькими экземплярами приложения. Для горизонтального масштабирования подключите Redis через github.com/gofiber/storage/redis/v3:

import (
	"github.com/gofiber/fiber/v2/middleware/limiter"
	"github.com/gofiber/storage/redis/v3"
)

store := redis.New(redis.Config{
	Host:     "localhost",
	Port:     6379,
	Password: "",
	Database: 0,
})

app.Use(limiter.New(limiter.Config{
	Max:        200,
	Expiration: 1 * time.Minute,
	Storage:    store,
}))

Разные лимиты для разных маршрутов

strictLimit := limiter.New(limiter.Config{
	Max:        5,
	Expiration: 15 * time.Minute,
})

looseLimit := limiter.New(limiter.Config{
	Max:        1000,
	Expiration: 1 * time.Minute,
})

// Строгий лимит только на /auth/login
app.Post("/auth/login", strictLimit, loginHandler)

// Мягкий лимит на все /api маршруты
app.Use("/api", looseLimit)

Ключ лимита по пользователю (после аутентификации)

app.Use("/api", jwtMiddleware, limiter.New(limiter.Config{
	Max:        500,
	Expiration: 1 * time.Minute,
	KeyGenerator: func(c *fiber.Ctx) string {
		// Берём user_id из JWT-claims, записанных jwtMiddleware
		token := c.Locals("user").(*jwt.Token)
		claims := token.Claims.(jwt.MapClaims)
		if uid, ok := claims["user_id"]; ok {
			return fmt.Sprintf("user:%v", uid)
		}
		return c.IP()
	},
}))

Заголовки ответа

Middleware автоматически добавляет заголовки:

  • X-RateLimit-Limit — максимально допустимое количество запросов.
  • X-RateLimit-Remaining — оставшееся количество запросов в текущем окне.
  • X-RateLimit-Reset — Unix timestamp сброса счётчика.

Чтобы отключить эти заголовки, установите SkipFailedRequests: true или переопределите обработчик.

Подводные камни

  • In-memory не работает горизонтально — при нескольких репликах каждый инстанс хранит свой счётчик; без Redis лимит де-факто умножается на количество экземпляров.
  • IP-спуфинг через X-Forwarded-For — c.IP() за прокси вернёт адрес прокси; используйте app := fiber.New(fiber.Config{TrustedProxies: []string{"10.0.0.0/8"}}) и c.IP() правильно вернёт реальный IP только если прокси доверенный.
  • Алгоритм фиксированного окна — в конце одного окна и начале следующего пользователь может отправить 2 * Max запросов за короткий промежуток; для строгого ограничения используйте sliding window через кастомный Storage.
  • Порядок middleware — rate limiter должен стоять после CORS (иначе preflight заблокируется), но перед тяжёлой бизнес-логикой.
  • Redis недоступен — при сбое Redis-хранилища middleware паникует или пропускает все запросы в зависимости от реализации; добавьте проверку соединения при старте.
  • SkipSuccessfulRequests / SkipFailedRequests — легко перепутать: SkipSuccessfulRequests: true считает только ошибки (полезно против brute-force), SkipFailedRequests: true считает только успешные запросы.
  • Отсутствие Retry-After — стандарт HTTP 429 предполагает заголовок Retry-After; встроенный middleware его не выставляет — добавьте вручную в LimitReached.

Частые вопросы на собеседовании

  • В каких backend-проектах Fiber (Go framework) является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Как понять, что проблема в сервисе связана с Fiber (Go framework), а не с базой, сетью, инфраструктурой или бизнес-логикой?
  • Проект на Fiber (Go framework) вырос из MVP в большой production-сервис. Какие проблемы архитектуры и сопровождения вы ожидаете увидеть?
  • Представьте, endpoint на Fiber (Go framework) иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?

Типичные ошибки

  • Давать ответ про rate limiting в Fiber только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «rate limiting в Fiber»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать rate limiting в Fiber с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает rate limiting в Fiber и где это используется в Go-коде.
  • Связывает rate limiting в Fiber с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме Fiber →

Источники

  • https://docs.gofiber.io/middleware/limiter/
  • https://docs.gofiber.io/blog/fiber-v3-rate-limiting-guide
←Предыдущий вопросКак реализовать middleware аутентификации (например, JWT) в Fiber?Следующий вопрос→Как обрабатывать CORS в Fiber?

Связанные темы

FiberCodingoperationsSecurity