Tôi có một ứng dụng kết hợp giữa Java và C++ trên Solaris. Các khía cạnh Java của mã chạy giao diện người dùng web và thiết lập trạng thái trên các thiết bị mà chúng ta đang nói đến và mã C++ thực hiện việc thu thập dữ liệu theo thời gian thực từ các thiết bị. Bộ nhớ chia sẻ được sử dụng để chuyển thông tin trạng thái thiết bị và ngữ cảnh từ mã Java tới mã C++. Mã Java sử dụng một cơ sở dữ liệu PostgreSQL để duy trì trạng thái của nó.Tính sẵn sàng cao và nền tảng có thể mở rộng cho Java/C++ trên Solaris
Chúng tôi đang gặp phải một số tắc nghẽn hiệu năng khá nghiêm trọng và hiện tại, cách duy nhất chúng tôi có thể mở rộng là tăng bộ nhớ và số lượng CPU. Chúng tôi đang mắc kẹt trên một hộp vật lý do thiết kế bộ nhớ chia sẻ.
Lần truy cập lớn ở đây đang được thực hiện bằng mã C++. Giao diện web được sử dụng khá nhẹ để cấu hình các thiết bị; nơi chúng tôi đang thực sự đấu tranh là xử lý khối lượng dữ liệu mà các thiết bị phân phối sau khi được định cấu hình.
Mọi phần dữ liệu mà chúng tôi lấy lại từ thiết bị đều có số nhận dạng trong đó trỏ ngược lại ngữ cảnh thiết bị và chúng tôi cần xem xét điều đó. Ngay bây giờ có một loạt các đối tượng bộ nhớ chia sẻ được duy trì bởi mã Java/UI và được tham chiếu bởi mã C++, và đó là nút cổ chai. Do kiến trúc đó, chúng tôi không thể di chuyển dữ liệu C++ xử lý sang một máy khác. Chúng ta cần có thể mở rộng để các tập con khác nhau của các thiết bị có thể được xử lý bởi các máy khác nhau, nhưng sau đó chúng ta mất khả năng tra cứu ngữ cảnh đó, và đó là vấn đề tôi đang cố giải quyết: làm thế nào để giảm tải xử lý dữ liệu thời gian cho các hộp khác trong khi vẫn có thể tham khảo ngữ cảnh thiết bị.
Tôi nên lưu ý rằng chúng tôi không kiểm soát được giao thức mà chính các thiết bị sử dụng và không có khả năng tình huống sẽ thay đổi.
Chúng tôi biết chúng ta cần phải thoát khỏi điều này để có thể mở rộng bằng cách thêm nhiều máy hơn vào cụm và tôi đang ở giai đoạn đầu để tìm hiểu chính xác cách chúng tôi thực hiện điều này.
Ngay bây giờ tôi đang xem Terracotta như một cách để mở rộng quy mô mã Java, nhưng tôi vẫn chưa tìm hiểu cách mở rộng C++ cho phù hợp.
Cũng như mở rộng quy mô cho hiệu suất, chúng tôi cũng cần cân nhắc tính khả dụng cao. Các ứng dụng cần phải có sẵn khá nhiều trong suốt thời gian - không hoàn toàn 100%, mà không phải là chi phí hiệu quả, nhưng chúng ta cần phải làm một công việc hợp lý của sống sót một cúp máy.
Nếu bạn đã thực hiện nhiệm vụ tôi đã được cung cấp, bạn sẽ làm gì?
CHỈNH SỬA: Dựa trên dữ liệu được cung cấp bởi @john channing, tôi đang xem cả GigaSpaces và Gemstone. Oracle Coherence và IBM ObjectGrid dường như chỉ là java.
Có một số liên kết tuyệt vời ở đây, John. Cảm ơn. Tôi có một số đọc để làm. – Andrew