Wymagania sprzętowe
Przy przygotowywaniu sprzętu do uruchomienia Overleaf głównym czynnikiem, który należy wziąć pod uwagę, jest liczba użytkowników jednocześnie uruchamiających kompilacje. Na przykład, jeśli masz licencję na łącznie 100 użytkowników, ale spodziewasz się, że jednocześnie będzie pracować tylko ~5 z nich, minimalna instalacja będzie wystarczająca. Jeśli spodziewasz się, że jednocześnie pracować (i kompilować) będzie większy odsetek użytkowników, rozważ przygotowanie serwera o wyższej specyfikacji.Minimalna instalacja
Do podstawowej pracy przy około 5 jednoczesnych użytkownikach wymagane są co najmniej 2 rdzenie i 3 GB pamięci. Te minimalne wymagania wystarczą również dla większych grup, w których jednoczesne użycie jest mniejsze lub w których dopuszczalne jest wydłużenie czasu kompilacji w okresach większego obciążenia.Jeśli rozważasz użycie systemu plików opartego na NFS (Network File System) dla swojej małej instancji, zapoznaj się z odpowiednim fragmentem sekcji Rozwiązywanie problemów.
Skalowanie
Zgodnie z ogólną zasadą, aby zapewnić wysoki i stały poziom usług, do minimalnej instalacji należy dodać 1 rdzeń CPU i 1 GB pamięci na każdych 5–10 jednoczesnych użytkowników. Należy to traktować wyłącznie jako wskazówkę, ponieważ na wymagany poziom zasobów wpływają takie czynniki jak rozmiar typowych dokumentów (większe dokumenty zużywają więcej zasobów kompilacji), częstotliwość kompilowania przez użytkowników oraz tolerancja na dłuższe czasy kompilacji przy dużym obciążeniu. Wielu naszych klientów chce wdrażać Server Pro w całej organizacji lub w dużych zespołach. W takich sytuacjach trudno nam doradzić konkretne wymagania konfiguracyjne, ponieważ przypadki użycia i dostępny sprzęt mogą być bardzo zróżnicowane.
Klienci, którzy przekraczają możliwości pojedynczego dużego serwera, mogą zapoznać się z sekcją Skalowanie poziome dla Server Pro.
Pamięć masowa
Odradzamy używanie Network File System (NFS)/Amazon EFS/Amazon EBS do przechowywania projektów i historii w większych instalacjach, a w przypadku skalowania poziomego wprost tego nie wspieramy. Te systemy plików nie zapewniają wydajności i niezawodności, których Server Pro potrzebuje przy działaniu na dużą skalę. Gdy system plików nie nadąża z obciążeniem, aplikacja zawiesza się z powodu zbyt wielu blokujących operacji wejścia/wyjścia. Takie przestoje mogą prowadzić do przekroczenia czasu blokad opartych na Redis, co z kolei może skutkować uszkodzeniem danych projektów. Zamiast tego zalecamy używanie pamięci obiektowej zgodnej z S3. Niska wydajność S3 wpływa jedynie na przesyłanie i pobieranie plików, co prowadzi wyłącznie do zwiększonej liczby otwartych połączeń z dostawcą S3 i nie wpływa na działanie pozostałej części aplikacji. Dodatkowo Server Pro może określać rozsądne limity czasu dla żądań S3, co nie jest możliwe dla operacji na systemie plików/IO na poziomie aplikacji.Dla porównania GitLab przyjmuje podobne stanowisko, nie wspierając NFS/Amazon EFS w swojej ofercie do samodzielnego hostowania.
Konfiguracja Nginx dla dużych wdrożeń
Domyślnie instancja Overleaf Server ogranicza liczbę połączeń do 768. Obejmuje to trwałe połączenia Websocket, nawigację HTML najwyższego poziomu oraz żądania ajax. Po osiągnięciu limitu edytor może nie być w stanie nawiązać połączenia, strona edytora może nie załadować się w całości, a żądania kompilacji mogą kończyć się niepowodzeniem. Nginx będzie zwracał odpowiedzi ze statusem 500 i zapisywałworker_connections are not enough while connecting to upstream w var/log/nginx/error.log wewnątrz kontenera sharelatex.
Ustawienie worker_connections ogranicza liczbę jednoczesnych połączeń, które nginx przyjmie na jeden proces roboczy. Liczba procesów roboczych jest kontrolowana przez ustawienie worker_processes, które w naszej konfiguracji nginx domyślnie wynosi 4.
Nginx wykonuje niewiele pracy w porównaniu z innymi częściami systemu, więc te limity pełnią rolę zabezpieczenia, które zapobiega przeciążeniu systemu przez zbyt wiele połączeń. Lepiej wcześnie odrzucić nadmiarowe połączenia niż spowalniać każde połączenie.
Instancje Overleaf Server udostępniają zmienne środowiskowe do dostosowywania tych ustawień nginx:
-
NGINX_WORKER_PROCESSESdlaworker_processes(domyślnie4) -
NGINX_WORKER_CONNECTIONSdlaworker_connections(domyślnie768) -
NGINX_KEEPALIVE_TIMEOUTdlakeepalive_timeout(domyślnie65)Jeśli przed konteneremsharelatexdziała inne proxy (np. do terminacji TLS), wartośćNGINX_KEEPALIVE_TIMEOUTw instancji Overleaf Server musi być większa niż w poprzedzającym proxy. Na przykład przy innym procesie nginx na hoście Docker nginx-host, oto dwa przykłady: -
Domyślna wartość
NGINX_KEEPALIVE_TIMEOUT: użyjkeepalive_timeout 60s(wartość domyślna w upstream) w nginx-host -
Własna wartość
NGINX_KEEPALIVE_TIMEOUT=100s: użyjkeepalive_timeout 90s(własna wartość w upstream) w nginx-host

