cá hồi thế nào để xây dựng một
Fish Tank phân tán.
Thiết kế tài liệu cho một Java-based Distributed Problem
Solver Với Giao diện đồ họa Of A Bể cá. By Daniil Kurbatskiy, Natalya Meltser, Mark Schlowsky, và Adam Trachtenberg. 1.0 Giới thiệu vấn đề của chúng tôi là tạo ra một mạng lưới bao gồm các nút của một tính toán. Những nút di chuyển thông qua mạng đến và đi từ các đơn vị chấp nhận và xử lý các nút này. Chúng tôi có một bài thuyết trình đồ họa cho vấn đề này. Cá đóng vai trò như các nút, vì chúng chứa một phần của vấn đề tính toán, và các bể cá chấp nhận chúng, cho phép các nút này để tương tác với các máy tính trên mạng. Trong khi những cá tính, một số trong những thời gian xử lý sẽ đi làm đồ họa thay vì giải quyết các vấn đề. Giải pháp là một hệ thống peer-to-peer mạng sau các nguyên tắc của đóng gói, che giấu dữ liệu, và sử dụng lại mã. Đương nhiên, một ngôn ngữ hướng đối tượng là thích hợp nhất cho một thiết kế như vậy. Chúng tôi đã chọn để thực hiện các thiết kế trong Java, thay vì C ++ hay Smalltalk, vì khả năng cross-nền tảng Java của kết hợp với Hướng dẫn Machine Remote (RMI). Sử dụng RMI cả làm cho truyền thông trên mạng dễ dàng hơn và bảo tồn một mô hình hướng đối tượng bằng cách cho phép chúng ta vượt qua tin nhắn trực tiếp đến các đối tượng trên mạng. Các mục tiêu thiết kế là để tạo ra một thiết kế hướng đối tượng thẳng về phía trước đó là hợp lý để thực hiện đầy đủ trong hai tháng. Chúng tôi cũng đặt một số tiêu chí khi thiết kế của chúng tôi. * Các đối tượng cần phải có, đối với hầu hết các phần, một hành vi trực quan (một bể chứa cá, một chủ hàng cá nhận cá, vv) * Hệ thống phải được thiết kế sao cho nó vẫn có thể hoạt động nếu nhiều đồng nghiệp được đưa ra khỏi mạng một cách bất ngờ. * Thiết kế này cũng nên được tái sử dụng cho các tính toán khác nhau bằng cách chỉ trao đổi một số lượng nhỏ các thành phần. Với ý tưởng về một mạng lưới mạnh mẽ trong tâm trí, vai trò của các máy chủ đã được giảm thiểu. Một máy chủ vẫn còn cần thiết để thêm một chiếc xe tăng vào mạng cũng như để theo dõi các tính toán. Tuy nhiên, không có máy chủ, hiện đang chạy và xe tăng đã đăng ký vẫn có thể hoạt động. 2.0 Tổng quan Các bể cá nối mạng có thể được xem như là ba cấp độ cao khác biệt module:. máy chủ, người gửi hàng cá và con cá thực tế bản thân Các Máy chủ là một quá trình đang chạy trên một máy phục vụ cho hai mục đích. Nó xử lý đăng ký của các chủ hàng cá mới và gửi đi các tin để có cá gửi đến người gửi hàng mới. Nó cũng điều khiển các tính toán phân tán được thực hiện bởi các cá bơi lội trong mạng. Mỗi gửi hàng cá chạy trên máy tính của người dùng khác nhau trên mạng. Người gửi hàng phải chịu trách nhiệm chỉ đạo các cá gửi từ một bồn chứa khác. Vì vậy, có một sự tương ứng 1-1 giữa các chủ hàng cá và xe tăng. Trong khi một con cá có trách nhiệm vận chuyển chính nó, nó sử dụng các shipper cá để làm như vậy. Nói chung, một con cá cho một người gửi hàng cá: ". Scoop tôi ra khỏi bể nước của bạn và sắp xếp cho tôi để đi đến một shipper cá chạy trên máy khác Đó mới gửi hàng cá thì nên đặt tôi trong bể cá nhân của mình." Các cá những gì thực sự đi lang thang qua mạng. Họ biết làm thế nào để vẽ bản thân mình, có một tin nhắn gắn liền với chúng, và thực hiện một tính toán phân tán. Ngoài ra, mỗi cá có hành vi mà điều chỉnh khi cá sẽ xuất xưởng thân xe tăng khác. Nhiều quy định đã được thực hiện để các mạng của các chủ hàng sẽ không được đưa xuống bằng bất kỳ số lượng hợp lý của máy được lấy từ mạng, có thể là từ đâm hoặc một số lý do khác, bao gồm cả các máy chủ. Các mạng được tổ chức như một web với các cạnh nối các chủ hàng liên tục thay đổi. Điều này trái ngược với một token ring, mà không thể phục hồi một cách dễ dàng từ nhiều máy tính đang được gỡ bỏ bất ngờ. 2.1 Tổ chức mạng Chúng tôi phải đảm bảo rằng người dùng mới có thể được thêm vào mạng và tìm hiểu về bể cá khác trong khi vẫn duy trì một mạnh mẽ và mạng phân cấp. Để làm như vậy, chúng ta đặt các máy chủ như là lối vào mạng. Khi một người gửi hàng mới đăng ký với máy chủ, nó chỉ thị các chủ hàng cá hiện có để gửi shipper mới một số cá để đổ đầy bình. Khi cá mới đến nơi, các chủ hàng sẽ lấy được thông tin về vị trí của các chủ hàng khác từ cá. Sau đó nó sẽ bổ sung thêm các địa điểm để một danh sách có chứa các chủ hàng mới nhất của mình. Fish sẽ gửi mình ra cho các chủ hàng khác nhau trong danh sách đó. Bởi vì sự thụ phấn chéo, mạng nên giống với một trang web thay vì vòng một token. Giờ chỉ có cá sẽ phải liên hệ với máy chủ là để có được một mảnh của tính toán và khi phần của họ trong việc tính toán được thực hiện. 2.2 Truyền Tất cả thông tin liên lạc giữa các đối tượng trên mạng được thực hiện bởi các đối tượng sử dụng RMI. Điều này làm giảm số lượng mã hóa cần thiết cho thông tin liên lạc trên mạng trong khi vẫn giữ một thiết kế hướng đối tượng. Trong khi RMI là chậm, nó là đáng tin cậy, đó là điều quan trọng hơn đối với các mục đích của chúng tôi. 2.3 Ưu điểm Có rất nhiều lợi thế để thiết kế này, quan trọng nhất là hệ thống sẽ có thể hoạt động với nhiều máy hoặc mạng thất bại. Trong khi các chủ hàng không có thể có thể được tăng thêm nếu tai nạn máy chủ chứa, thì chủ hàng đang chạy có thể tiếp tục hoạt động. Nếu tai nạn máy chủ cá, không có cá sẽ được cung cấp một phần của các tính toán để làm và cũng không một cá sẽ có thể báo cáo lại kết quả tính toán của mình; Tuy nhiên, những con cá vẫn sẽ có thể được tạo ra và bơi giữa xe tăng. Việc phân chia giữa các lớp giao tiếp, các lớp học đồ họa, và các phương pháp tính toán làm cho việc phát triển hệ thống dễ dàng hơn nhiều. Làm-gì mô-đun mã có thể được thay thế trong quá trình phát triển và sau đó, như các lớp học trở nên có sẵn, chúng được thay thế vào. 2.4 Nhược Vấn đề chính là sự phụ thuộc giữa các cá và FishShipper. Điều này là cần thiết để cho phép các cá để có quyền kiểm soát nhiều hơn đối với hành vi của mình, trong khi không phải thiết lập một hệ thống gọi lại rộng. Kiểm tra hệ thống mà không cần các thành phần cơ bản của ít nhất là bể cá, FishList, FirstFish, NullFish, cá, và một con cá cụ thể là rất khó khăn. Thực hiện hệ thống liên quan đến một sự hiểu biết thấu đáo về các chủ đề và vấn đề đồng bộ hóa, nhưng nó là vốn có trong loại này hệ thống. 3.0 Modules Phần module mô tả các dự án về cấp thấp hơn so với các phần Tổng quan. Do đó, nó phá vỡ các máy chủ nói trên, cá Shipper, và cá thành từng miếng nhỏ. Servers 3.1 mô-đun này có nhiệm vụ nhận được một chiếc xe tăng lên trên mạng và theo dõi các tính toán. Module này được chia thành hai tiểu mô-đun, các máy chủ và các máy chủ bể cá, đó là quá trình khác nhau có thể chạy trên hai máy khác nhau. Các máy chủ tank có trách nhiệm nói với một số xe tăng đã có sẵn trên mạng mà một chiếc xe tăng mới được thêm vào và rằng những xe tăng cựu binh cần gửi cá vào bể mới. Các máy chủ tank sẽ định kỳ ghi địa xe tăng vào đĩa, để nếu nó bị treo và khởi động lại, nó không mất tất cả dữ liệu của nó. Các máy chủ cá theo dõi những tính toán. Máy chủ này phần hiện một phần công việc tính toán đối với cá và đặt tất cả các bộ phận với nhau khi nó nhận được kết quả. Mỗi cá sẽ liên lạc với máy chủ khi nó được tạo ra để có được một mảnh của tính toán, sau đó nó sẽ liên lạc với máy chủ một lần nữa khi các tính toán được thực hiện. Các máy chủ sẽ cần phải thông báo cho bất cứ ai đang giám sát tính toán khi một giải pháp được tìm thấy hoặc khi không gian tìm kiếm là hết. 3.1.1 xe tăng chủ Trách nhiệm Đăng ký một bể cá Có gửi cho các xe tăng mới Keeping theo dõi số lượng xe tăng nó biết về . Sự kiện Sáng tạo: Khởi tạo tất cả các cấu trúc dữ liệu cần thiết Nhận đăng ký: Liên hệ xe tăng khác và họ đã gửi cho cá vào bể mới và thêm các xe tăng mới để túi của xe tăng nổi tiếng. Nếu nó tăng đầu tiên đăng ký, ghi lại vị trí tank. 3.1.2 Fish chủ Trách nhiệm chia lên các tính Đưa ra các bộ phận của các tính toán để các cá Đưa các phần của việc tính toán lại với nhau Việc theo dõi những phần nào đã được đưa ra và / hoặc nhận lại Thông báo cho ai đó khi tính toán được thực hiện Sự kiện Sáng tạo: Phân chia việc tính toán Nhận được yêu cầu cho một phần: đưa ra một phần của việc tính toán và ghi nhận một phần hoàn thành: đánh dấu phần đó là hoàn thành và quá trình nó cho phù hợp Computation được hoàn thành: Đầu ra cho màn hình hoặc gửi email để cho biết rằng nó được thực hiện. Tất cả các yêu cầu tiếp theo đối với các bộ phận sẽ được đáp ứng với một chỉ báo rằng các tính toán được thực hiện. 3.2 TankLocationBag mô-đun này là một sự trừu tượng của việc có một túi chứa có thứ tự các vị trí của xe tăng khác. Các vị trí riêng của mình, trong thực tế một URL, được biểu diễn như là một chuỗi. Các mô-đun túi có tính chất nhất định. Nó chỉ có thể tổ chức một số cụ thể của địa điểm. Khi nó là đầy đủ, vị trí tank lâu đời nhất được ném đi đầu tiên. Có một phương pháp để có được một vị trí ngẫu nhiên từ các túi, cũng như để loại bỏ một địa điểm cụ thể từ các túi. Ngoài ra còn có phương pháp để thêm vị trí vào túi nếu nó không phải là đã có trong đó và có một phương pháp để so sánh hai túi và thêm các địa điểm mà chưa có trong túi "cinema" túi "bar". Điều này đặt các module trừu tượng hóa các ý tưởng về một chiếc túi của địa điểm đó có thể dễ dàng được chuyển tới bể chứa và cá. Trách nhiệm Giữ một danh sách dài bao quanh các địa điểm tank (strings) Thêm vị trí mới Loại bỏ vị trí cũ để nhường chỗ cho những cái mới. Trả về một vị trí ngẫu nhiên Sự kiện Sáng tạo : được kể số lượng các vị trí tank nó có thể giữ và khởi tạo các cấu trúc dữ liệu cần thiết Thêm một địa điểm Thêm tất cả các địa điểm không rõ từ cái túi khác có được một vị trí ngẫu nhiên 3.3 xe tăng Xe tăng là chịu trách nhiệm cho việc vẽ bản thân trên màn hình và quản lý danh sách các cá của nó bể. Nó có một cái đầu danh sách và chuyển tiếp tin nhắn từ người gửi hàng cá (chẳng hạn như, gửi một
đang được dịch, vui lòng đợi..