2011-08-21 10 views
6

Zasadniczo chciałbym zaimplementować następujące algorytmy i przeanalizować, w jaki sposób system zbudowany przy użyciu tych algorytmów zachowuje się w różnych warunkach.Język programowania do wyboru do implementacji algorytmów przekazywania wiadomości rozproszonych

  • protokół Gossip
  • Wiele paxos
  • Zgodnie mieszania

Moje zainteresowanie tutaj jest w tych algorytmów. Po prostu szukam języka programowania, który pozwala mi szybko i dobrze zrozumieć te algorytmy.

Który język wybrać? Java, Scala, Erlang lub cokolwiek innego.

Obecnie znam Java i C++.

+7

Z mojego doświadczenia wynika, że ​​Erlang jest naprawdę dobrze przystosowany do przekazywania wiadomości rozproszonych. Nie znam żadnego z protokołów, o których wspomniałeś, ale myślę, że Erlang jest dobry do wypróbowania w tych celach. –

+0

Nie żałuj później. Erlang został sprawdzony jako przyszłość dla odpornych na uszkodzenia systemów rozproszonych. Semantyka w Erlang została zaprojektowana od początku w celu wspierania szybkiego prototypowania takich algorytmów. –

+1

Jeśli znasz język Java i C++, dlaczego szukasz alternatyw? Jeśli mógłbyś wyjaśnić swoje powody, pomoże to w sformułowaniu zaleceń. –

Odpowiedz

8

Można spróbować realizacji protokołów w Erlang.

  • Komunikacja procesowa jest bardzo elegancko upieczona na język i VM. Komunikat asynchroniczny przechodzący między dwoma procesami elrang w tej samej maszynie wirtualnej lub w maszynach wirtualnych w semantycznym odpowiedniku.
  • Kodowanie w aspektach tolerancji błędów/logiki powtórzeń itp. Algorytmu jest proste w erlangu. Ułóż wszystko w lekkich procesach i użyj specjalnych procesów zwanych nadzorcami, aby je ponownie uruchomić.
  • Serializacja obiektów Erlang jest naprawdę prosta. Nie musisz jawnie kodować logiki serializacji (np. Implementacja Serializable w Javie).
  • Dystrybucja Erlanga jest dostarczana z modułem o nazwie rpc, który umożliwia wywoływanie funkcji na zdalnej maszynie wirtualnej.
  • Skorupa Elrang jest prawdziwym bogiem. Możesz dołączyć powłokę do dowolnej zdalnej maszyny wirtualnej. Powłoka umożliwia profilowanie wewnętrznych tabel/struktur danych. VM ma również bardzo zaawansowane funkcje debugowania i śledzenia, które są dostępne za pośrednictwem powłoki.
  • Możesz rzucić okiem na Riak, datastore NoSQL z open source napisane w Erlang wzorowane na dynamo Amazon. Implementuje zarówno spójny Hashing, jak i protokół Gossip.
0

Czy zdecydowałeś się na przekazanie swojej biblioteki? Jeśli interesuje Cię MPI, dostępne są zarówno wersje java, jak i C++.

MPI wykonuje dla ciebie wiele zadań, takich jak nadawanie wiadomości i pobieranie odpowiedzi, co jest niezbędne w twoich algorytmach. W rezultacie zalecam znalezienie odpowiedniej wersji MPI dla C++ lub Java i rozpoczęcie pracy.

Spójrz na:

+1

MPI wymaga jednorodnego skupiska stabilnych maszyn. Nie nadaje się do mętnej architektury, w której konfiguracja nie jest jednorodna, opóźnienie może być różne i nie masz pewności, czy maszyna będzie żyła. Nie jest to więc ostateczne panaceum na rozproszone obliczenia. – paradigmatic

+0

@paradigmatic: Nie uzgodniony! Programy MPI mogą być wykonywane na środowiskach heterogenicznych (HW, OS, PL). Pls zwracają uwagę, że ajav (ten, który zapytał) potrzebuje biblioteki, aby nauczyć się przekazywać wiadomości poprzez eksperymentowanie ich w zestawie protokołów. Nie stoi w obliczu prawdziwego pochmurnego środowiska, takiego jak wspomniane. Proszę również spojrzeć na FT-MPI (http://icl.cs.utk.edu/ftmpi/) dla odpornej na błędy wersji MPI. – hsalimi

+1

Zapomnij o Erlangu? to jest niewłaściwe Porada. Dzisiejszy algorytm może nie sprostać dzisiejszym wyzwaniom, gdy jego technologia opierała się na wyzwaniach wczorajszego dnia. Erlang został przetestowany pod kątem skalowalności, dostępności i stabilności (z małym czasem prototypowania). Porównaj systemy takie jak Riak, Membase, Scalaris, Yaws e.t.c. Systemy te opierają się na stabilnych modelach wbudowanych w Erlang i okazały się niezawodne w stosunku do dzisiejszych wyzwań. Spróbuj Erlang, nie pożałujesz –

2

Wszystkie te protokoły zostały już wdrożone w różnych projektach Erlang. Więcej szczegółów znajduje się pod Mnesia, Riak, , Scalaris (nie wszystkie protokoły w każdym projekcie).Nie mogę sobie wyobrazić bardziej przyjaznego środowiska dla tego rodzaju eksperymentów protokolarnych niż Erlang.

4

O tak! można rozpocząć programowanie Erlang patrząc na nich:

  1. Learn You some Erlang for great good
  2. Erlang Book Part 1
  3. Orielly's Erlang Programming Text Book (Francesco Cezarini and Simon Thompson)
  4. Joe Armstrong's Programming Erlang Text Book

Powyższe łącza udostępniają zasoby do wszystkich programów Erlanga, których możesz potrzebować. Sugeruję jednak, aby zacząć od Joe Armstrongs Programming Erlang Text Book, a podczas lektury skorzystaj z witryny internetowej: Learn you some erlang for great good (nr referencyjny 1 powyżej) jako punktu odniesienia dla lepszego zrozumienia struktur danych.

Możesz pobrać Erlang stąd: Erlang Download official Page.

Możesz potrzebować innych linków i zasobów (aplikacji, bibliotek e.t.c.), z których większość jest indeksowana tutaj: Erlang/OTP .com website.

Od czasu do czasu zawsze możesz zadać dowolne pytanie na Stackoverflow tutaj lub możesz szukać narzędzi i bibliotek z sourceforge.

+1

To wydaje się fantastyczne. Patrząc na funkcje, myślę, że powinienem nauczyć się tego eleganckiego PL po 10 latach kodowania za pomocą C++ i java. – hsalimi

Powiązane problemy