Sử dụng node.js làm máy chủ tcp, tôi sẽ quản lý số lượng thiết bị GPS tương đối lớn (~ 3000 thiết bị) và bước đầu tiên sẽ lưu trữ dữ liệu đến trong cơ sở dữ liệu, nhưng ngay cả trong giai đoạn này tôi hình dung một số vấn đề hiệu suất làm phiền tôi và tôi muốn bắt gặp họ trước khi họ cắn tôi.Node.js Cân nhắc hiệu suất theo dõi thiết bị GPS
1 - Nhìn vào các máy chủ tương tự được viết bằng các ngôn ngữ như java hoặc ruby tôi thấy một số mã như sau:
java
Thread serverThread = new Thread(() -> {
System.out.println("Listening to server port 9000");
while (true) {
try {
Socket socket = serverSocket.accept();
...
ruby
require 'socket'
server = TCPServer.new ("127.0.0.1",8080)
loop do
Thread.start(server.accept) do |client|
...
Có vẻ như chúng đưa ra chuỗi riêng biệt cho mọi thiết bị (socket) được kết nối với máy chủ tcp? Vì node.js là một luồng đơn và hoạt động không đồng bộ, tôi có nên quan tâm đến các kết nối đến hay một cái gì đó giống như cách tiếp cận đơn giản sau đây sẽ đáp ứng số lượng lớn các kết nối đồng thời không?
net.createServer(function(device) {
device.on('data', function(data) {
// parse data
// store in database
});
});
2 - Tôi có nên hạn chế kết nối cơ sở dữ liệu bằng cách sử dụng hồ bơi kết nối không? Vì cơ sở dữ liệu cũng truy vấn từ phía bên kia cho GIS và giám sát, kích thước hồ bơi nên là bao nhiêu?
3 - Làm cách nào tôi có thể hưởng lợi khi lưu vào bộ nhớ cache (ví dụ: sử dụng redis) trong hệ thống như vậy?
Sẽ rất tuyệt nếu ai đó làm sáng tỏ suy nghĩ này. Tôi cũng sẵn sàng nghe bất kỳ suy nghĩ hiệu suất nào khác mà bạn có thể cũng gặp phải hoặc nhận thức được trong việc triển khai các hệ thống như vậy. Cảm ơn.
Câu hỏi phụ hoàn chỉnh, nhưng tại sao lại sử dụng ổ cắm thay vì yêu cầu http định kỳ? – Festo
@ Festo, tôi chỉ có thể giao tiếp với thiết bị GPS trong lớp TCP, trong lớp này tôi chắc chắn nên sử dụng ổ cắm để giao tiếp với thiết bị, trong máy chủ http tôi có thể sử dụng yêu cầu định kỳ nhưng dữ liệu sẽ là thời gian thực. – dNitro