Inizia individuando il ritardo
Quando l'apertura o l'accesso a una stanza Matrix richiede molto tempo, è necessario innanzitutto determinare se il ritardo riguarda un singolo server remoto, una singola stanza o l'intera istanza di Synapse. Questa distinzione è importante: la federazione è uno scambio bidirezionale tra server e l'accesso a una stanza può coinvolgere diversi server. I ritardi nell'accesso possono essere causati dal processo Synapse, dal server remoto, dal routing DNS o TLS, dal database o dalle dimensioni e dallo stato della stanza. Non esiste un singolo parametro per la "lentezza della federazione" che risolva tutti questi problemi.
Verificato: Synapse registra le informazioni sui tentativi di connessione alla destinazione remota, espone le metriche di Prometheus e include i limiti di velocità per le connessioni alle stanze. Dipende dalla situazione: quale di questi fattori è responsabile di una singola connessione lenta. Non desumibile dal solo sintomo: se l'altro homeserver o una rete intermedia è lenta. Inizia con un utente interessato, una stanza e il tempo approssimativo di un tentativo lento; confronta questi dettagli con una stanza di controllo che si connette normalmente.
Verifica se la federazione è raggiungibile
Utilizza il tester ufficiale di federazione Matrix con il nome del server Matrix del tuo homeserver. Può rivelare problemi comuni di DNS, delega, certificati e raggiungibilità. Il nome del server negli ID utente potrebbe differire dalla macchina o dal proxy che ospita Synapse, quindi verifica l'endpoint di federazione e la delega configurati anziché presumere che il dominio dell'ID utente ospiti direttamente Synapse.
La documentazione di Synapse sulla federazione indica come porta di federazione predefinita la TCP 8448, mentre le implementazioni con delega o proxy inverso possono utilizzare HTTPS sulla porta 443. La porta pertinente deve essere raggiungibile dagli altri homeserver e potrebbe essere necessario consentire il traffico di federazione anche sui firewall in uscita. Verificare la corrispondenza delle regole del firewall in entrata e in uscita, quindi eseguire nuovamente il test con il Federation Tester. Non aprire entrambe le porte indiscriminatamente se l'implementazione è configurata per utilizzarne solo una.
Un risultato che mostra un errore di certificato, DNS o di routing indica un problema di configurazione o di raggiungibilità della rete, non di capacità del server. Esaminare i record DNS e la delega per il nome del server Matrix, la catena di certificati TLS del proxy inverso e verificare se il proxy inoltra i percorsi di federazione a Synapse. Synapse documenta che in alcune configurazioni i server federati non seguono un reindirizzamento permanente 308, quindi è necessario esaminare anche i reindirizzamenti imprevisti. Correggere il controllo specifico non riuscito e ripetere il test prima di modificare il numero di worker o i limiti di velocità.
Riferimenti: Configurazione e risoluzione dei problemi della federazione Synapse e Guida al firewall Synapse .
Verifica se un server remoto è in fase di cooldown per i tentativi.
Synapse contrassegna temporaneamente una destinazione remota come offline dopo che le richieste di federazione non sono andate a buon fine. I ritardi nei tentativi di connessione utilizzano un meccanismo di backoff, pertanto ripetuti errori possono far apparire ritardati i messaggi o le connessioni che coinvolgono tale destinazione. Questo non significa necessariamente che l'intero server domestico sia lento: potrebbe trattarsi di un singolo server remoto irraggiungibile o che non riesce a inviare le richieste.
Gli amministratori possono esaminare l'API di amministrazione della federazione di Synapse, che documenta GET /_synapse/admin/v1/federation/destinations. Utilizzare un token di accesso server-admin e mantenerlo privato. Esaminare i record di destinazione e i campi di retry per l'homeserver coinvolto nella stanza interessata. Questi record aiutano a identificare quando una destinazione sta ritentando la connessione, ma da soli non dimostrano il motivo del fallimento della connessione. Correlare questi dati con i log di Synapse, i log del proxy, i test DNS/TLS e gli orari in cui gli utenti hanno segnalato problemi.
L'API di amministrazione della federazione è documentata come sperimentale e soggetta a modifiche. Evitate di utilizzarla tramite script come se fosse un'API client pubblica stabile. Synapse documenta anche un'operazione di reset-connection-timeout che può innescare un nuovo tentativo in background per una destinazione già in cooldown. Consideratela un'azione diagnostica o di ripristino solo dopo aver corretto o compreso l'errore sottostante; la cancellazione ripetuta dei cooldown non può far rispondere un server remoto non funzionante. Una risposta HTTP positiva dall'endpoint di reset non significa che il tentativo di federazione in background sia già stato completato.
Riferimento: API di amministrazione di Synapse Federation . Lo stato sperimentale dell'API e i campi disponibili possono variare a seconda della versione di Synapse, pertanto si consiglia di verificare la documentazione relativa alla versione in uso prima di eseguire qualsiasi operazione.
Misura Synapse e il suo database prima di scalare
Abilita l'endpoint delle metriche Prometheus di Synapse solo su una rete interna fidata o dietro controlli di accesso. La guida ufficiale al monitoraggio documenta /_synapse/metricse mostra come esporlo tramite un listener di metriche o un listener HTTP esistente. Le metriche possono includere dettagli operativi; non pubblicare questo endpoint apertamente. Se raccogli già metriche, confronta il tempo di un join lento con CPU, memoria, latenza della richiesta, durata della transazione del database e attività di federazione in entrata e in uscita.
Utilizzate i grafici per distinguere un sovraccarico generalizzato dai ritardi specifici della federazione. Se le normali richieste dei client e le transazioni del database rallentano contemporaneamente alle operazioni di join, verificate la pressione della CPU e della memoria dell'host, lo stato di PostgreSQL, i limiti di connessione, la latenza del disco e le query di lunga durata. Se l'attività della stanza locale rimane reattiva ma una destinazione remota presenta errori o ritardi nei tentativi di connessione, date priorità alla raggiungibilità della federazione e a quel server remoto. Se è interessata solo una stanza di grandi dimensioni, lo stato della stanza e il numero di server partecipanti potrebbero contribuire al problema; confrontatelo con una stanza più piccola prima di trarre conclusioni.
La guida Grafana di Synapse consiglia di controllare il tempo di invio dei messaggi, la CPU e la memoria, il numero e la durata delle transazioni del database e i grafici di federazione. Un elevato numero di transazioni non è automaticamente il collo di bottiglia; anche la durata e il carico del sistema sono importanti. Verifica i nomi delle metriche della versione di Synapse installata e la documentazione del dashboard, poiché i nomi delle metriche sono stati modificati nel tempo.
Riferimenti: Monitoraggio di Synapse con Prometheus e comprensione di Synapse tramite i grafici di Grafana .
Verificare la limitazione e le raffiche di connessione tra le stanze.
Synapse ha rc_joinslimiti separati per gli accessi locali e per quelli remoti. Un accesso remoto può richiedere più lavoro rispetto all'accesso a una stanza a cui il server partecipa già. Synapse dispone anche di rc_joins_per_roomuna funzione che limita gli accessi recenti a una stanza per contribuire a mitigare i picchi di accessi di massa. Se i log o le risposte del client indicano una limitazione della frequenza, verificare queste impostazioni e il volume degli accessi recenti prima di modificarle.
Non aumentare i limiti di velocità come soluzione generica per "migliorare le prestazioni". Limiti più elevati possono aumentare il carico sul server e sugli altri server domestici, e potrebbero ridurre la protezione contro i picchi di join. Se un'operazione di migrazione o onboarding legittima sta raggiungendo un limite configurato, identifica il limite esatto e verifica i valori documentati per la tua versione di Synapse. Valuta la possibilità di distribuire il carico di lavoro dei join nel tempo. Modifica un valore rilevante alla volta, mantieni la configurazione precedente e monitora i tassi di errore e l'utilizzo delle risorse dopo il ricaricamento o il riavvio, come richiesto dalla tua implementazione.
Riferimento: Configurazione di Synapse:rc_joins e Configurazione di Synapse:rc_joins_per_room . Le impostazioni predefinite e le opzioni supportate possono variare a seconda della versione; confrontale con la versione installata prima di modificarle.
Utilizzare un test di unione controllato
- Scegli una stanza interessata e annota l'alias o l'ID della stanza, l'homeserver dell'utente che si è connesso, l'ora e l'errore esatto del client. Non includere mai i token di accesso nei log di supporto.
- Verifica il nome del tuo server utilizzando il Federation Tester e conferma l'endpoint di federazione, il certificato e il percorso proxy configurati.
- Esamina i log di Synapse relativi a quel timestamp per individuare errori di federazione, errori di destinazione remota, timeout o risposte al limite di frequenza. Cerca nei log del reverse proxy e del database ritardi corrispondenti.
- Esamina l'API di amministrazione della federazione per verificare lo stato dei tentativi associati alle destinazioni remote pertinenti. Confronta le stanze interessate con una stanza di controllo che si connette tempestivamente.
- Confronta le metriche di Prometheus e dell'host nello stesso intervallo di tempo. Cerca eventuali aumenti della latenza delle richieste, della durata delle transazioni del database, dell'utilizzo della CPU, della pressione sulla memoria o un picco nell'attività di federazione.
- Esegui una correzione mirata, ad esempio risolvendo un problema DNS/TLS/proxy, eliminando un collo di bottiglia del database o regolando un vincolo di limitazione della velocità confermato, quindi ripeti lo stesso test e confronta i risultati.
Presupposti comuni da evitare
- "Un'adesione lenta significa che la porta 8448 del mio server è chiusa." Non necessariamente. La delega o un proxy inverso potrebbero utilizzare la porta 443. Verifica l'endpoint di federazione effettivamente configurato e testalo.
- "Un test di federazione riuscito dimostra che ogni accesso alla stanza sarà veloce." Questo test verifica solo la configurazione e la connettività di federazione comuni. Lo stato del server remoto, lo stato della stanza, il carico locale e le prestazioni del database possono comunque influire sull'accesso. Testa la stanza interessata ed esamina i log.
- "Il ritardo di federazione ha sempre origine sulla mia istanza di Synapse." La documentazione di configurazione di Synapse avverte che il ritardo di federazione osservato può avere origine su entrambi gli endpoint o nella rete tra di essi. Confronta le destinazioni e, ove possibile, raccogli prove da entrambe le estremità.
- "Aggiungere worker o aumentare i limiti di velocità è la prima soluzione." Queste modifiche sono utili solo quando le misurazioni indicano problemi di capacità o di limitazione della velocità. Innanzitutto, è necessario identificare se il problema riguarda la connettività, i tentativi di connessione remota, la saturazione locale, la latenza del database o la limitazione della velocità di join.
Verifica che la soluzione abbia funzionato.
Ripeti lo stesso test di join dopo la modifica. Verifica che l'utente si unisca correttamente, che la destinazione interessata non presenti più errori ripetuti, che il Federation Tester segnali correttamente i controlli pertinenti e che la latenza della richiesta/del database torni al suo intervallo normale. Monitora la ricomparsa del problema durante un successivo periodo di picco; un singolo tentativo riuscito non garantisce che il server remoto o la rete siano sempre funzionanti.
Se le metriche locali e i controlli di federazione risultano corretti, ma solo un homeserver remoto continua a presentare problemi, condividi con gli amministratori di tale server il timestamp, la destinazione, l'errore (opportunamente formattato) e gli ID delle richieste pertinenti. Se diverse stanze e destinazioni sono interessate, oltre alle richieste locali lente, verifica la capacità di Synapse e PostgreSQL prima di ottimizzare il comportamento della federazione. Annota la versione di Synapse nelle note dell'incidente, poiché la configurazione e i dettagli dell'API di amministrazione sono soggetti a modifiche.