Wyobraź sobie następujący scenariusz: Załóżmy, że masz centralny komputer, który generuje dużo danych. Dane te muszą zostać przetworzone, co niestety trwa dłużej niż ich wygenerowanie. Aby przetwarzanie mogło nadążać za czasem, podłączamy więcej komputerów podrzędnych.
Ponadto musimy wziąć pod uwagę możliwość wypadnięcia urządzeń podrzędnych z sieci w trakcie pracy, a także dodania dodatkowych urządzeń podrzędnych. Komputer centralny powinien upewnić się, że wszystkie zadania zostały zakończone w sposób satysfakcjonujący, a zadania odrzucone przez urządzenie podrzędne są przekierowywane do innego.
Główne pytanie brzmi: jakie podejście powinienem zastosować, aby to osiągnąć?
Ale być może poniższe informacje pomogłyby mi znaleźć odpowiedź: czy istnieje nazwa lub wzorzec projektowy tego, co próbuję zrobić?
Jakiej dziedziny wiedzy potrzebuję, aby osiągnąć cel polegający na tym, aby komputery te mogły ze sobą rozmawiać? (np. czy baza danych, o której mam trochę wiedzy, będzie wystarczająca, czy będzie to obejmowało gniazda, o których jeszcze nie mam wiedzy?)
Czy są jakieś przykłady takiego systemu? Główne pytanie jest nieco ogólne, więc dobrze byłoby mieć punkt początkowy / punkt odniesienia.
Uwaga: Zakładam ograniczenia c ++ i okien, więc rozwiązania wskazujące w tym kierunku będą mile widziane.
Odpowiedzi:
Tak. Ten wzorzec jest znany jako przetwarzanie rozproszone (lub rozproszone programowanie lub dowolne fajne słowo, które chcesz umieścić po rozproszeniu). Moją sugestią będzie, aby nie budować tego we własnym zakresie przed przyjrzeniem się innym rozwiązaniom. Możesz spojrzeć na pytanie o przepełnienie stosu dla różnych opcji. A następnie podejmij obliczoną decyzję.
źródło
Jak zauważył innych odpowiedzi, w tym polu została znany jako rozproszone , siatki obliczeniowej , Cluster Computing i wysokiej wydajności obliczeniowej .
Dodaję rozróżnienie, że gdy można zmienić rozmiar systemu po rozpoczęciu dopasowywania obciążenia, mówi się, że jest „ elastyczny ”, a to różni się od tradycyjnego przetwarzania gridowego. Jest to jeden z (nie marketingowych) powodów terminu „ przetwarzanie w chmurze ”: użytkownik nie musi planować pojemności, a liczba i lokalizacja komputerów przeprowadzających obliczenia pozostają dla niego bezwartościowe jako chmura.
Ponadto wymaganie, aby master ponownie planował nieudane zadania, nazywa się właściwością „ odporności na awarie ” tego systemu. (Obowiązkowy link do tej kreskówki )
Jakie podejście należy zastosować, aby zbudować własną, prywatną chmurę? W moim zamówieniu lub preferencjach:
Nie buduj własnej chmury , korzystaj z infrastruktury zapewnianej przez innych. Amazon nazywa to Virtual Private Cloud , Rackspace po prostu Private Cloud ; Jestem pewien, że możesz znaleźć inne oferty i porównać.
Nie buduj własnego silnika przetwarzania rozproszonego , użyj silnika dostarczonego przez innych. Jeśli nalegasz na używanie swoich maszyn, używaj co najmniej tyle oprogramowania, ile to możliwe, które jest dostarczane i testowane przez innych. Możesz używać Hadoop z C ++ poprzez interfejs Pipes lub z dowolnego pliku wykonywalnego za pośrednictwem Streaming API . Istnieje podobny interfejs Streaming w Spark .
Nie koduj wszystkich komponentów od zera , używaj komponentów ze społeczności. Jeśli z jakiegoś powodu czytałeś do tej pory i chcesz wdrożyć własne komponenty chmurowe, nie zaczynaj od standardowej biblioteki C ++. Główne potrzebne elementy to:
Istnieje wiele alternatyw dla obu. Do kolejkowania RabbitMQ ma instalator Windows, podobnie jak ZeroMQ . W przypadku rozproszonych systemów plików naprawdę nie mam wystarczającego doświadczenia w systemie Windows: wygląda na to, że możesz zorganizować udziały SMB w systemie plików DFS , ale nie mogę dać ci żadnej wskazówki. Jak można zauważyć w innej odpowiedzi, można pomyśleć o wykorzystaniu rozproszonej bazy danych, takiej jak MongoDB, do danych; działa w systemie Windows .
Możesz także pomyśleć o użyciu MPI (zwykle implementacji OpenMPI , zwykle poprzez opakowanie Boost ), ale zauważ, że programy MPI same w sobie nie są elastyczne ani odporne na uszkodzenia; musisz się tym zająć (przynajmniej zapewniają pewne mechanizmy, aby to osiągnąć ). Dlatego poleciłbym najpierw ocenić ramy dystrybucji, które mają takie właściwości.
źródło