Sto lavorando a un progetto di rete. Dove sto creando un dashboard per visualizzare lo stato in tempo reale (utilizzo CPU / memoria, traffico su / giù e pochi altri) di più router chiamando la richiesta API al server che chiamerà un'altra richiesta API ai router (Mikrotik Routers, offrono api per fare la configurazione e ottenere gli stati).
Problema : nel test di ogni richiesta aumenta il mio utilizzo della CPU VPS fino al 20%. Questo è solo un utente che visualizza la dashboard e fa richiesta. Cosa succede se ho più clienti e ognuno di loro visualizza il dashboard e fa più richieste ai server. Sta per andare giù di sicuro, vero?
Ecco parte del codice back-end:
$routers = //Get all the routers belong to that users
foreach($routers as $router){
$api = connectRouter();
if($api === false){
continue;
}
$api->write('/ip/hotspot/user/getall');
$users = $api->read();
$api->write('/ip/hotspot/active/getall');
$actives = $api->read();
$resources = $api->comm('/system/resource/print');
$resources = $resources[0];
$api->write('/interface/getall');
$router->interfaces = $api->read();
}
Domanda: quale opzione devo ridurre l'utilizzo della CPU ed essere in grado di fornire questi servizi a più clienti?
Fino a ciò che avevo studiato:
- Dovrei provare Node.js?
- Cambia i modi in cui sto chiamando dal front-end: invece di chiamare l'API per ottenere tutti i dati dei router in una volta, cambialo per ottenere uno per uno?
Nota 1. Quei valori nei router cambiano ogni secondo (se non millisecondo). Voglio ottenere valore in tempo reale il più possibile. Quindi il caching non è una soluzione qui penso.
- Ogni utente ha il proprio set di router. Non condividono router. Quindi fare un controllo duplicato della query del router non sarà un vantaggio, credo. (Sì può essere utile se lo stesso utente che ha effettuato l'accesso tenta di visualizzare su più dispositivi o schede del browser.) Ma sto cercando di ottimizzare per più utenti.