Язык программирования для реализации алгоритмов распределенной передачи сообщений

В принципе, я хотел бы реализовать следующие алгоритмы и проанализировать, как система, построенная с использованием этих алгоритмов, ведет себя в разных условиях.

  • Протокол сплетен
  • Несколько пакси
  • Согласованное хеширование

Меня интересуют эти алгоритмы. В основном я ищу язык программирования, который позволяет мне быстро писать эти алгоритмы и глубоко понимать эти алгоритмы.

Какой язык выбрать? Java, Scala, Erlang или что-то еще.

В настоящее время я знаю Java и C++.


person user855    schedule 21.08.2011    source источник
comment
По моему опыту, Erlang действительно очень хорошо подходит для распределенной передачи сообщений. Я не знаю ни одного из протоколов, которые вы упомянули, но я думаю, что Erlang хорошо подходит для этих целей.   -  person Chris Jester-Young    schedule 21.08.2011
comment
Не жалей потом. Erlang зарекомендовал себя как будущее отказоустойчивых распределенных систем. Семантика в Erlang с самого начала разрабатывалась для поддержки быстрого прототипирования таких алгоритмов.   -  person Muzaaya Joshua    schedule 22.08.2011
comment
Если вы знаете Java и C++, зачем искать альтернативу? Если бы вы могли объяснить свои причины, это поможет дать рекомендации.   -  person Daniel C. Sobral    schedule 31.08.2011
comment
Я согласен с @DanielC.Sobral. Иди с тем, что знаешь. У меня есть пара систем, использующих все эти алгоритмы, написанные на Java. Я также видел все эти алгоритмы, реализованные на C++. Оба были чрезвычайно надежными.   -  person Michael Deardeuff    schedule 14.04.2012


Ответы (4)


Вы можете попробовать реализовать протоколы в Erlang.

  • Коммуникация процесса очень элегантно встроена в язык и виртуальную машину. Асинхронная передача сообщений между двумя процессами elrang, будь то в одной виртуальной машине или между виртуальными машинами, семантически эквивалентна.
  • Кодирование в аспектах отказоустойчивости / логике повторных попыток и т. Д. Алгоритма - это ветерок в erlang. Инкапсулируйте все в легкие процессы и используйте специальные процессы, называемые супервизорами, для их перезапуска.
  • Сериализация объектов Erlang очень проста. Вам не нужно явно кодировать логику сериализации (например, реализовывать Serializable в Java).
  • Дистрибутив Erlang поставляется с модулем под названием rpc, который позволяет вам вызывать функции на удаленных виртуальных машинах. .
  • Оболочка Elrang — настоящее послание бога. Вы можете подключить оболочку к любой удаленной виртуальной машине. Оболочка позволяет профилировать внутренние таблицы/структуры данных. Виртуальная машина также имеет чрезвычайно сложные функции отладки и отслеживания, которые доступны вам через оболочку.
  • Вы можете взглянуть на Riak, с открытым исходным кодом хранилище данных NoSQL, написанное на Erlang по образцу Dynamo от Amazon. Он реализует как согласованное хеширование, так и протокол Gossip.
person arun_suresh    schedule 21.08.2011

О, да ! вы можете начать программировать на Erlang, взглянув на них:

  1. Узнайте немного Erlang для пользы
  2. Книга по Erlang, часть 1
  3. Учебник по программированию на Erlang от Orielly (Франческо Чезарини и Саймон Томпсон)
  4. Учебник Джо Армстронга по программированию на Erlang

Эти ссылки выше предоставят вам ресурсы для всего программирования на Erlang, которое вам может понадобиться. Однако я предлагаю вам начать с Joe Armstrongs Programming Erlang Text Book и по мере чтения использовать веб-сайт: Learn you some erlang for great good (ссылка № 1 выше) в качестве справочного материала для дальнейшего понимания структур данных.

Вы можете скачать Erlang отсюда: официальная страница загрузки Erlang.

Вам могут понадобиться другие ссылки и ресурсы (приложения, библиотеки и т. д.), большинство из которых проиндексировано здесь: Erlang/OTP .com веб-сайт.

Иногда вы всегда можете задать любой вопрос о Stackoverflow здесь или выполнить поиск инструментов и библиотек в sourceforge.

person Muzaaya Joshua    schedule 23.08.2011
comment
Это кажется фантастическим. Взглянув на функции, я думаю, что мне следует изучить этот элегантный PL после 10 лет программирования на C ++ и java. - person Gupta; 24.08.2011

Все эти протоколы уже были реализованы в различных проектах Erlang. См. Mnesia, Riak, CouchDB, Scalaris для получения дополнительной информации (не все протоколы в каждом проекте). Я не могу представить себе более дружелюбную среду для такого рода экспериментов с протоколами, чем Erlang.

person Hynek -Pichi- Vychodil    schedule 22.08.2011

Вы определились со своей библиотекой передачи сообщений? Если вас интересует MPI, доступны его версии для Java и C++.

MPI выполняет за вас множество задач, таких как широковещательная передача сообщения и получение ответов, что очень важно для ваших алгоритмов. Поэтому я рекомендую вам найти подходящую версию MPI для C++ или Java и приступить к работе.

Взгляни на:

person Gupta    schedule 21.08.2011
comment
MPI требует однородного кластера стабильных машин. Это не подходит для облачной архитектуры, где конфиг неоднороден, латентность может варьироваться и вы не уверены, что машина будет жива. Так что это не последняя панацея от распределенных вычислений. - person paradigmatic; 22.08.2011
comment
@paradigmatic: Не согласен! Программы MPI могут выполняться в гетерогенных средах (HW, OS, PL). Пожалуйста, обратите внимание, что ajav (тот, кто спрашивал) просто нужна библиотека, чтобы изучить передачу сообщений, экспериментируя с ними в наборе протоколов. Он не сталкивается с реальной облачной средой, такой как та, которую вы упомянули. Также обратите внимание на FT-MPI (icl.cs.utk.edu/ftmpi ) для отказоустойчивой версии MPI. - person Gupta; 22.08.2011
comment
Забыть Эрланг? это неправильный совет. Алгоритм, реализованный сегодня, может не выдержать вызовов сегодняшнего дня, когда его технология была основана на вызовах вчерашнего дня. Erlang прошел боевые испытания на масштабируемость, доступность и стабильность (с небольшим временем создания прототипа). Сравните такие системы, как Riak, Membase, Scalaris, Yaws и т. д. эти системы опираются на стабильные модели, встроенные в Erlang, и доказали свою надежность в современных условиях. Попробуйте Erlang, не пожалеете - person Muzaaya Joshua; 22.08.2011
comment
@Muzaaya Джошуа: Спасибо за ваши комментарии. Я действительно новичок в Erlang, но много лет работал над C++, Java и MPI. Не могли бы вы передать мне какие-нибудь вводные материалы для Эрланда, чтобы начать? - person Gupta; 22.08.2011