Ответ
В проекте с микросервисной архитектурой (Spring Boot, Kubernetes) ключевые сервисы (API Gateway, Auth, Order) были рассчитаны на нагрузку:
- Пропускная способность: До 5 000 запросов в секунду (RPS).
- Задержка (latency): p99 ~50 мс.
Стратегии обеспечения масштабируемости и отказоустойчивости:
- Кэширование: Redis для хранения сессий и часто запрашиваемых данных, что снизило нагрузку на БД на ~40%.
- Асинхронная обработка: Неблокирующая обработка событий (нотификации, логирование) через Apache Kafka.
- Автомасштабирование: Horizontal Pod Autoscaler (HPA) в Kubernetes на основе загрузки CPU.
Пример конфигурации HPA:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: order-service
minReplicas: 3
maxReplicas: 15
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Нагрузочное тестирование проводилось с использованием Gatling.
Ответ 18+ 🔞
А, слушай, вот тут у нас проект с этими вашими микросервисами, на Spring Boot'е, в кубере болтается. Так вот, заложили мы там изначально, что основные сервисы — шлюз, авторизация, заказы — должны держать до пяти тысяч запросов в секунду, и чтобы задержка у них, эта ваша p99, была не больше пятидесяти миллисекунд. Ну, в теории, блядь.
А чтобы эта конструкция не разъебалась при первом же наплыве пользователей, которые как саранча, накинулись, мы там нагородили стратегий, ёпта.
Первое — кэширование. Запилили Redis, туда сессии пихаем и данные, которые постоянно дергают. И знаешь, что? Нагрузка на основную базу данных упала примерно на 40%, вот это поворот, блядь! Просто взяли и отрезали почти половину дерганий.
Второе — асинхронщина. Чтобы всякую ерунду вроде уведомлений или логов не делать синхронно и всех не тормозить, пустили это дело через Apache Kafka. Отправил событие в очередь и пошёл дальше, не ждёт сервис, пока там всё протолкнется. Красота, в рот меня чих-пых!
Ну и третье, самое вкусное — автомасштабирование. Настроили в Kubernetes эту штуку, Horizontal Pod Autoscaler (HPA), чтобы он сам, как хитрая жопа, подкручивал количество подов, если процессоры начинают гореть. Вот смотри, как примерно выглядит конфиг:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: order-service
minReplicas: 3
maxReplicas: 15
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
То есть, грубо говоря, меньше трёх копий сервиса не будет, но если нагрузка подскочит и утилизация CPU перевалит за 70%, он начнёт плодить новые поды, пока их не станет 15. А потом, когда схлынет, поубивает лишние. Автоматически, сука! Чудеса, да и только.
Ну и как же без проверки, на что это всё годится? Гоняли всё это хозяйство под нагрузкой, используя Gatling. Чтобы посмотреть, не ляжет ли всё к ебеням, когда на него навалятся по-настоящему.