Junior: питання на співбесіді з теми «Масштабування»
Питання з реальних співбесід з відповідями: Laravel і PHP, бази даних, JavaScript і фронтенд, Git, Docker, API, безпека й архітектура. Тими самими темами, що й тести.
1 питання
На одному сервері багато речей «просто працює», бо все зберігається локально. Коли серверів кілька за балансувальником, кожен наступний запит користувача може потрапити на інший сервер. Тому все, що зберігається на диску чи в пам'яті одного сервера, треба винести в спільне сховище.
Чек-лист:
| Що | На одному сервері | На кількох |
|---|---|---|
| сесії | file |
database чи redis - інакше користувача розлогінює |
| кеш | file |
redis, memcached чи database - інакше кожен сервер має свій кеш і скидання не працює |
| файли користувачів | диск local/public |
S3, R2 чи інше об'єктне сховище |
| черги | database чи sync |
redis, database чи SQS - спільні для всіх воркерів |
блокування (Cache::lock, withoutOverlapping) |
будь-який кеш | спільний кеш з атомарними блокуваннями |
| планувальник | cron на сервері | на одному сервері чи onOneServer() для задач |
| логи | storage/logs |
централізований збір (stderr, Papertrail, сервіс логів) |
Що ще перевірити:
- однаковий
APP_KEYна всіх серверах - інакше cookie й сесії, зашифровані одним сервером, не розшифрує інший; - довірені проксі (
trustProxies) - щоб застосунок бачив справжню IP-адресу й HTTPS за балансувальником; - міграції запускаються один раз за деплой, а не на кожному сервері;
- локальні шляхи в коді (
storage_path()для тимчасових файлів між запитами) - тимчасовий файл, створений одним запитом, інший сервер не побачить; - кеш конфігурації й маршрутів формується на кожному сервері при деплої - це нормально.
Головна ідея - сервер застосунку без стану (stateless). Його можна будь-коли вимкнути, замінити чи додати ще один, і користувачі цього не помітять. Тоді масштабування - це просто збільшення кількості однакових серверів.
Корисно перевірити локально: запустити два екземпляри застосунку (наприклад, два контейнери) за простим балансувальником - проблеми з сесіями й файлами проявляться одразу.