2011-08-29 52 views
10

Tôi đang bắt đầu dự án khoa học máy tính năm cuối cùng của mình và tôi đang cố gắng tìm ra các bước đầu tiên của mình. Để biết thêm chi tiết, bạn có thể đến dự án page.Hệ thống phân phối Java

Bối cảnh: Vì tôi có rất ít kinh nghiệm về các hệ thống phân tán, về cơ bản, tôi nên đối mặt với thử thách như thế nào. Những gì tôi đã đưa ra là hệ thống sẽ hoạt động như sau:

Máy khách gửi tệp hoặc tập hợp các tệp có chứa mã được xử lý. Mã đó sẽ thực hiện một giao diện thuật toán phân tán được viết bởi tôi, một lớp cụ thể. Máy chủ sẽ tạo một đối tượng từ đối tượng class.That sẽ chịu trách nhiệm cho thuật toán được chạy. Máy chủ sẽ trả về kết quả cho máy khách. (Tôi thực sự đọc về RMI sau này và thấy nó rất giống nhau).

Gửi tệp là cơ bản - I/O mạng chung. Vấn đề thực sự là tạo đối tượng và sử dụng nó làm giao diện được xác định trước trong thời gian chạy.

Câu hỏi:

  1. Thách thức mà tôi đã trình bày những âm thanh giống như một thách thức phản ánh, điều này có đúng không?
  2. Bạn có bất kỳ mẹo đầu tiên nào về cách triển khai không?

Tìm kiếm một số hệ thống phân tán công nghệ java Tôi đã gặp RMI, TRMI, LINDA, CORBA, JINI và nhiều công cụ khác. RMI nghe có vẻ hấp dẫn nhất vì nó rất giống với những gì tôi đã thu thập được để trở thành giải pháp, nhưng nó cũng cũ.

  1. Bạn nghĩ thư viện nào sẽ giúp tôi hoàn thành nhiệm vụ này? Hãy nhớ rằng tôi là một sinh viên khoa học máy tính, vì vậy hoàn thành các giải pháp hộp sẽ không gắn bó với các giáo sư của tôi.
  2. RMI cũ, có giải pháp nào tốt hơn không?
  3. bất kỳ hướng dẫn toàn diện nào về TRMI?

Nếu bạn tìm thấy logic của mình một số lỗi, hãy sửa nó.

Nếu bạn có thêm một số mẹo về chủ đề mà bạn cho rằng nên thảo luận, vui lòng liên hệ với tôi.

+2

RMI là mặc định cho truyền thông liên tiến trình trong Java. Đó là "cũ" bởi vì nó đã có sẵn và tinh chế từ đầu của Java - Tôi thà gọi nó là trưởng thành. Tùy thuộc vào yêu cầu/giáo sư của bạn, bạn cũng có thể cố gắng dựa vào giải pháp của bạn trên một thứ gì đó như [Hadoop] (http: //hadoop.apache.org /) hoặc ít nhất có được một số cảm hứng từ đó. –

+0

Nếu nó trưởng thành hơn là tuyệt vời. Tôi đã tìm thấy tài liệu chỉ rất cũ về nó, do đó, từ quan điểm của tôi tôi nghĩ rằng nó đã không phát triển nhiều. Bạn có một liên kết mô tả sự phát triển của thư viện theo thời gian không? – qballer

+0

RMI (* gọi phương thức từ xa *) không phải là thư viện. Đó là một số loại công nghệ và một phần của JRE/JDK. –

Trả lời

1

Bạn có thể sử dụng this example và gửi các tập tin lớp học để thực hiện (bạn có thể lưu trữ các tập tin lớp trên đĩa, và sau đó tải chúng bằng cách sử dụng URLClassLoader. Nếu bạn không muốn viết trên đĩa, McDowell có a suggestion).

Đối với thông tin liên lạc, có rất nhiều lựa chọn. Một điều bạn có thể nghĩ đến là liệu có làm cho thông điệp truyền đi đồng bộ hay không đồng bộ. Không có gì sai về tin nhắn đồng bộ (như RMI), nhưng bạn có thể muốn tìm các giải pháp không đồng bộ cũng như chúng được cho là "nóng" gần đây. Hoặc bạn có thể chỉ cần đi với giao thức của riêng bạn trên đầu trang của HTTP hoặc một cái gì đó như thế.

Một bài tập thú vị là phân phối dữ liệu giữa các nút và thực thi thuật toán dựa trên các dữ liệu được phân phối này, sau đó kết hợp các kết quả. Trong trường hợp này, người dùng sẽ chỉ định hai thuật toán. Một trong đó tạo ra dữ liệu, và một trong đó tổng hợp kết quả.

+0

Để tải mã của tôi bằng cách sử dụng Trình bao bọc URLClassLoader mà tôi đã viết để tôi chọn câu trả lời của bạn. – qballer

5

Không có đủ thông tin để được giới thiệu thư viện hoặc công nghệ. Vì vậy, tôi muốn tập trung vào các "thêm lời khuyên" một phần của câu hỏi của bạn;)

  • Server gửi ra một file - Thông thường đó là một client rằng gửi một yêu cầu đến một máy chủ và máy chủ sẽ tạo ra một phản hồi. Bạn nên tuân theo quy ước đó.
  • tệp cần được thực thi - Chúng tôi không thể thực thi tệp . Tệp có thể chứa một số tập lệnh hoặc mã nhị phân có thể được thực hiện bởi một thông dịch viên hoặc máy tính. Lý do để cầu kỳ: bạn phải làm điều gì đó với nội dung của tệp (phân tích cú pháp, biên dịch, diễn giải, liên kết, ...)
  • tệp sẽ triển khai [...] giao diện - xem ở trên, các tệp không thực hiện bất kỳ thứ gì.
  • Máy khách sẽ chạy giao diện - Giao diện không thể thực thi hoặc chạy.
  • trở lại kết quả của các thuật toán để máy chủ - Giống như đề cập ở trên: thường đó là một client đó sẽ gửi các tập tin ("yêu cầu") đến một máy chủ . Máy chủ sau đó sẽ lấy tệp, thực hiện một số phép tính dựa trên nội dung tệp và trả lại kết quả ("phản hồi") cho máy khách.

phương thức từ xa gọi

Với RMI chúng tôi thường có các tình huống sau: Một client muốn gọi một phương thức từ xa . Máy khách biết giao diện và địa chỉ máy chủ. Máy chủ triển khai cho giao diện đó. Bây giờ khách hàng liên lạc với máy chủ và gọi phương thức trên máy chủ đó.

Đối với dự án của bạn, có vẻ hơi khác: Tôi nghĩ khách hàng có triển khai thuật toán (tệp nguồn java hoặc tệp lớp được biên dịch) và muốn gửi nó đến một hoặc nhiều máy chủ. Máy chủ sẽ xử lý tệp, thực hiện thuật toán cho một số đầu vào (số slice) và trả lại kết quả.

RMI có thể là một ứng cử viên cho việc chuyển tệp nhưng không phải cho cuộc gọi phương thức (thuật toán). Một phương pháp từ xa có thể nhìn như thế (giả sử chúng tôi gửi một tập tin nguồn java):

public Result process(String javaSource, Data data); 
+0

Cảm ơn câu trả lời chi tiết. Về việc chỉnh sửa thuật ngữ bạn đã cung cấp, tôi đồng ý với họ. Chỉ cần làm rõ những gì tôi có nghĩa là mã, gửi bởi một khách hàng và được viết bởi người sử dụng, sẽ thực hiện một giao diện được viết bởi tôi. Tôi muốn tạo một đối tượng (trên máy chủ) của việc thực hiện đó và sử dụng giao diện để chạy thuật toán. Bạn có thể cung cấp thêm chi tiết về cách thực hiện điều đó không? những gì tôi tôn trọng như là sự phản ánh. – qballer

1

hãy cũng nhìn vào để SOAP dựa trên dịch vụ web .. MTOM cung cấp một cách hiệu quả hơn để chuyển nội dung nhị phân.

Cảm ơn ..

+1

*** Simple *** Object Access Protocol, thực sự. – bdares

+2

SOAP không còn là từ viết tắt từ 1.2 trở đi ... nhờ ... –

Các vấn đề liên quan