Używając node.js jako serwera tcp, zamierzam zarządzać stosunkowo dużą liczbą urządzeń GPS (~ 3000 urządzeń) i jako pierwszy krok chcę przechowywać dane przychodzące w bazie danych, ale nawet w tej fazie wyobrażam sobie problemy z wydajnością, które mnie niepokoją i chciałbym je złapać, zanim mnie ugryzą.Node.js Uwzględnianie wydajności śledzenia urządzeń GPS
1 - Patrząc na pisemne podobnych serwerów posługujących się językami jak java lub rubin widzę jakiś kod jak poniżej:
java
Thread serverThread = new Thread(() -> {
System.out.println("Listening to server port 9000");
while (true) {
try {
Socket socket = serverSocket.accept();
...
rubin
require 'socket'
server = TCPServer.new ("127.0.0.1",8080)
loop do
Thread.start(server.accept) do |client|
...
Co wydaje się, że dają one osobny wątek każdemu urządzeniu (gniazdu), które łączy się z serwerem tcp? Ponieważ plik node.js jest jednowątkowy i działa asynchronicznie, czy powinienem martwić się połączeniami przychodzącymi lub podobnymi prostymi metodami, które zaspokoją dużą liczbę jednoczesnych połączeń?
net.createServer(function(device) {
device.on('data', function(data) {
// parse data
// store in database
});
});
2 - Czy należy ograniczyć połączenia z bazą danych za pomocą puli połączeń? Jako że baza danych również zapytuje drugiej strony o GIS i monitoring, ile powinien mieć rozmiar puli?
3 - W jaki sposób mogę wykorzystać buforowanie (na przykład przy użyciu redis) w takim systemie?
Powinno być świetnie, jeśli ktoś rzuci trochę światła na te myśli. Chętnie również chciałbym usłyszeć inne myśli dotyczące wydajności, których być może doświadczasz lub które są świadome przy wdrażaniu takich systemów. Dzięki.
Pełne pytanie poboczne, ale dlaczego używać gniazd zamiast okresowych żądań http? – Festo
@Festo, po prostu mogę komunikować się z urządzeniami GPS w warstwie TCP, w tej warstwie zdecydowanie powinienem używać gniazd do komunikacji z urządzeniami, na serwerze http mogłem używać okresowych żądań, ale jako dane będę w czasie rzeczywistym również korzystam z gniazd. – dNitro