Attualmente sto lavorando ad un avvio VOIP e decido quale stack software sarà il migliore. Sto facendo molte ricerche su come gli altri lo fanno, come Discord. È davvero difficile prendere alcune di queste decisioni iniziali senza conoscere appieno i requisiti o ciò che funzionerà meglio per la mia startup. Vengo qui per avere un consiglio da persone con esperienza acquisita con saggezza nell'usare cose del genere. In ogni caso,
Discord divide il loro back-end in diversi componenti:
- Server API (servizi richieste HTTP GET, PUSH, ecc.
- Server gateway (fornisce un servizio in tempo reale, gestisce le connessioni in tempo reale ai dispositivi in modo che possa dire loro di nuovi messaggi e ricevere messaggi e simili)
- Server vocale (gestisce la connessione vocale)
- Media proxy (ridimensiona i video in miniatura)
Discord utilizza Cassandra per l'implementazione del database, ma penso che andrò con Scylla per il mio. Ho diverse domande su quale sia lo stack tecnologico migliore per un servizio VOIP che gestisce voce, messaggi e altri elementi.
In primo luogo, ho intenzione di utilizzare C ++ per Voice Server poiché è veloce e fornisce l'accesso a livello hardware. Tuttavia, come faccio a separare il server API e il server Gateway (dovrebbero essere separati?). Ad esempio, sia il server API che il server Gateway ottengono l'accesso al database o il server Gateway accoda i comandi REST inviati al server API? Immagino che se hai diverse applicazioni in esecuzione su un database (gateway e API) le cose si complicherebbero con la prevenzione di deadlock e condizioni di gara e così via.
Credo che le mie domande siano queste:
- Se il server API e il server gateway dispongono entrambi dell'accesso diretto in scrittura / lettura al database? In caso contrario, come dovrebbe il gateway informare il database?
- Qual è un linguaggio di programmazione consigliato per il server API (che servirà le richieste HTTP RESTful)? Sembra che tutti usino NodeJS ma ho letto che NodeJS non utilizza bene l'intero computer e non è super scalabile. Qualcosa come Django o Spring o Elixir sarebbe meglio per questo caso d'uso? Dovrei usare un framework?