Питання на співбесіді: Масштабування
Найпопулярніші питання з реальних Laravel/PHP співбесід для всіх рівнів
3 питання
Sharding - горизонтальне розбиття даних між кількома незалежними БД (шардами) за ключем (tenant_id, user_id, geo). Дозволяє вийти за межі одного сервера.
shard 1: користувачі 1–1M
shard 2: користувачі 1M–2M
- Shard key обирають так, щоб дані рівномірно розподілялись і більшість запитів влучали в один шард.
- Складнощі: запити між шардами, унікальність ID (часто UUID/Snowflake), ребалансування при додаванні шарда, відсутність крос-шардових операцій JOIN і транзакцій.
У Laravel реалізують через множинні з'єднання й маршрутизацію за shard key. Sharding - крайній захід, коли вертикальне масштабування та репліки вже не справляються.
Serverless виконує код без керування серверами: провайдер (AWS Lambda) сам масштабує під навантаження й тарифікує за фактичні виклики.
Laravel Vapor - платформа для деплою Laravel на AWS Lambda + API Gateway, з керованими БД, чергами (SQS), кешем і CDN.
Особливості й обмеження:
- Авто-масштабування до нуля й під пік; платиш лише за використання.
- Cold start - затримка першого запиту після простою.
- Файлова система ефемерна → файли лише в S3.
- Обмеження часу виконання Lambda → довгі задачі в черги.
- Stateless за дизайном (сесії/кеш у Redis/DynamoDB).
Альтернатива - контейнери (ECS/Kubernetes), коли потрібен повний контроль або стабільні довготривалі процеси.
WebSocket - постійне двостороннє з'єднання поверх одного TCP, що дає реальний час без поллінгу.
У Laravel сервер WebSockets - Reverb (офіційний), Soketi або Pusher; події транслюються через Broadcasting, клієнт слухає через Echo.
Масштабування: коли інстансів WebSocket-сервера кілька, клієнти на різних інстансах не «бачать» одне одного. Рішення - Redis Pub/Sub як спільна шина: інстанс публікує повідомлення в Redis, усі інстанси отримують і розсилають своїм підключеним клієнтам.
client A ─ inst 1 ┐
├─ Redis Pub/Sub ─┤
client B ─ inst 2 ┘
Окрема увага: авторизація private/presence-каналів, ліміти відкритих з'єднань, sticky sessions на балансувальнику.