Đây là mô tả sự cố Chúng tôi có hàng nghìn thiết bị (khoảng 4k -5k) thông qua đó chúng tôi phải đọc dữ liệu liên tục, cứ sau 2 phút hoặc 30 giây. Mỗi thiết bị có IP duy nhất của nó. Dữ liệu này sẽ được thu thập và sau đó được lưu trữ trong cơ sở dữ liệu. Những thiết bị này ở vị trí 100 của cả nước. Dữ liệu sẽ không được đọc 24X7 nhưng trong ít nhất 12 giờ.Làm thế nào để giao tiếp với 1000 của socket simultaneosuly trong Java?
Có một ứng dụng web sẽ yêu cầu tại một số thời điểm để hiển thị dữ liệu đang được thu thập dữ liệu thông qua các thiết bị này. Chúng tôi sẽ biết dữ liệu mà từ đó thiết bị được yêu cầu.
Đây là cách chúng ta nghĩ rằng chúng ta có thể thực hiện trong Java
Dung dịch A: Trong mỗi vị trí, chỉ định một máy mà sẽ đóng vai trò như máy chủ và sẽ đọc dữ liệu từ số x của thiết bị. Dữ liệu này sẽ được chuyển đến máy chủ trung tâm cứ sau 1 giờ. Trên máy được chỉ định này, dữ liệu được kéo và lưu trữ cục bộ (tệp phẳng hoặc trong cơ sở dữ liệu bộ nhớ)
Trong trường hợp này, chúng tôi sẽ có nhiều máy chủ như số lượng vị trí. cho ví dụ như chúng ta có thể kết thúc có 1500 máy chủ/máy quản lý mà trở thành một cơn ác mộng.
Giải pháp B:
Chúng tôi có 8-10 máy chủ trung tâm và mỗi máy chủ đọc dữ liệu từ một loạt các máy móc. Các dữ liệu được xếp hàng đợi và được chọn theo thứ tự mà nó đã đến.
Máy chủ đẩy dữ liệu vào cơ sở dữ liệu.
Khách hàng nhận dữ liệu như thế nào?
Trong giải pháp B, máy khách lấy nó làm cơ sở dữ liệu, giả sử dữ liệu đã được đẩy vào db và vẫn không xếp hàng đợi.
Bạn nghĩ điều gì sẽ hoạt động tốt hơn?
Bất kỳ thiết kế/giải pháp thay thế nào?
Chúng ta có nên nghĩ về lập trình tại máy chủ với Unix/Perl hay không. Chúng tôi không muốn sử dụng C++ vì một số lý do khác.
Bao nhiêu dữ liệu được thu thập sau mỗi 2.5 phút hoặc 30 giây? Ngoài ra, hãy nhìn vào Java NIO - số lượng kết nối này không khó cho Java trong những ngày này. –
FYI - Liên tục! = Một lần 2,5 phút hoặc 30 giây ...;) – NotMe
Hệ thống dựa trên khách hàng java hay chỉ là các phần cứng ngẫu nhiên "câm" – dstarh