Вимоги до обладнання
Під час підготовки обладнання для роботи Overleaf головним чинником є кількість користувачів, які одночасно запускатимуть компіляцію. Наприклад, якщо у вас ліцензія на 100 користувачів загалом, але ви очікуєте, що одночасно працюватимуть лише ~5, мінімальної інсталяції буде достатньо. Якщо ви очікуєте, що одночасно працюватиме (і компілюватиме) більша частка користувачів, варто розглянути сервер із потужнішою конфігурацією.Мінімальна інсталяція
Для базової роботи приблизно з 5 одночасними користувачами потрібно щонайменше 2 ядра та 3 ГБ пам’яті. Цієї мінімальної конфігурації також вистачить для більших груп із меншим одночасним використанням або там, де під час пікового навантаження допустимий довший час компіляції.Якщо ви плануєте використовувати файлову систему на основі NFS (Network File System) для свого невеликого екземпляра, ознайомтеся з відповідним розділом у Troubleshooting.
Масштабування
Як загальне правило, щоб забезпечити високий і стабільний рівень обслуговування, до мінімальної інсталяції слід додавати 1 ядро CPU та 1 ГБ пам’яті на кожні 5–10 одночасних користувачів. Це слід сприймати лише як орієнтир, оскільки такі чинники, як розмір типових документів (більші документи споживають більше ресурсів для компіляції), частота компіляції та допустимість довшого часу компіляції під час пікового навантаження, впливають на необхідний обсяг ресурсів. Багато наших клієнтів прагнуть розгорнути Server Pro в масштабах усієї організації або для великих команд. У таких ситуаціях нам складно надати конкретні рекомендації щодо конфігурації, оскільки сценарії використання та доступне обладнання можуть суттєво різнитися.
Клієнти, яким уже не вистачає можливостей одного великого сервера, можуть ознайомитися з Horizontal scaling для Server Pro.
Сховище
Ми не радимо використовувати Network File System (NFS)/Amazon EFS/Amazon EBS для зберігання проєктів та історії у великих інсталяціях і явно не підтримуємо цього для горизонтального масштабування. Ці файлові системи не забезпечують необхідної продуктивності та надійності, яких потребує Server Pro під час роботи у великому масштабі. Коли файлова система не встигає за навантаженням, застосунок зависає через надмірну кількість блокувальних операцій вводу-виводу. Такі зависання можуть призвести до перевищення часу дії блокувань на основі Redis, що, своєю чергою, може пошкодити дані проєктів. Натомість радимо використовувати S3-сумісне об’єктне сховище. Низька продуктивність S3 впливає лише на завантаження та вивантаження файлів, що призводить лише до збільшення кількості відкритих з’єднань із вашим постачальником S3 і не впливає на поведінку решти застосунку. Крім того, Server Pro може задавати розумні тайм-аути для запитів до S3, що неможливо для операцій файлової системи/вводу-виводу на рівні застосунку.Для довідки: GitLab дотримується схожої позиції щодо непідтримки NFS/Amazon EFS у своїй self-managed пропозиції.
Специфічна конфігурація Nginx для великих розгортань
За замовчуванням екземпляр Overleaf Server обмежує кількість з’єднань до 768. Сюди входять постійні з’єднання Websocket, навігація HTML верхнього рівня та ajax-запити. Коли ліміт досягнуто, редактор може не підключитися, сторінка редактора може завантажитися не повністю, а запити на компіляцію можуть завершуватися помилкою. Nginx повертатиме відповіді зі статусом 500 і записуватимеworker_connections are not enough while connecting to upstream у var/log/nginx/error.log всередині контейнера sharelatex.
Параметр worker_connections обмежує кількість одночасних з’єднань, які nginx прийматиме на один робочий процес. Кількість робочих процесів визначається параметром worker_processes і в нашій конфігурації nginx за замовчуванням дорівнює 4.
Nginx виконує небагато роботи порівняно з іншими частинами системи, тому ці ліміти слугують запобіжником, що не дає надто великій кількості з’єднань перевантажити систему. Краще одразу відкинути частину надлишкових з’єднань, ніж уповільнити кожне з’єднання.
Екземпляри Overleaf Server надають змінні середовища для налаштування цих параметрів nginx:
-
NGINX_WORKER_PROCESSESдляworker_processes(за замовчуванням4) -
NGINX_WORKER_CONNECTIONSдляworker_connections(за замовчуванням768) -
NGINX_KEEPALIVE_TIMEOUTдляkeepalive_timeout(за замовчуванням65)Якщо перед контейнеромsharelatexпрацює інший проксі (наприклад, для термінації TLS), значенняNGINX_KEEPALIVE_TIMEOUTв екземплярі Overleaf Server має бути більшим, ніж у попереднього проксі. Наприклад, з іншим процесом nginx на хості Docker nginx-host, ось два приклади: -
Значення
NGINX_KEEPALIVE_TIMEOUTза замовчуванням — використовуйтеkeepalive_timeout 60s(значення за замовчуванням в upstream) у nginx-host -
Власне значення
NGINX_KEEPALIVE_TIMEOUT=100s— використовуйтеkeepalive_timeout 90s(власне значення в upstream) у nginx-host

