Что делает Erlang подходящим для облачных приложений?

9

Мы начинаем новый проект и внедряем на базе нашей корпорации облако openstack (см. Http://www.openstack.org/ ). Проект является инструментом безопасности для нашей корпорации. В настоящее время мы используем много сотен выделенных серверов для инструментов безопасности и переносим их в нашу корпорацию openstack.

Другие проекты в моей компании в настоящее время используют erlang в нескольких распределенных серверных приложениях, и другие вопросы и ответы указывают на то, что erlang используется в нескольких популярных облачных сервисах. Я пытаюсь убедить других подумать, где это может быть применимо к нашему проекту.

Каковы сильные стороны Erlang для облачного программирования? Где находятся районы, в которых особенно уместно использовать эрланг?

Дункан
источник
15
Определите «облако», и мы расскажем вам то, что вы, возможно, захотите узнать. Термин «облако» означает маркетинг и означает что-то свое для каждого, кто его использует.
Я думал, что облачного openstack будет достаточно для определения того, что мы реализуем. Смотрите openstack.org . Или вы запрашиваете больше информации о проекте? Это инструмент безопасности для нашей корпорации. В настоящее время мы используем много сотен выделенных серверов для инструментов безопасности и переносим их в нашу корпорацию openstack.
Дункан
Я отредактировал вопрос, чтобы, надеюсь, сделать его лучше и устранить проблему «маркетинга». Моя проблема заключается в выборе лучшего инструмента для работы. Я новичок в stackexchange, поэтому не совсем разбираюсь в этом.
Дункан
1
В частности, термин «облако» является туманным и не означает ничего конкретного, это говорит о маркетинге, вы еще не определили, что на самом деле квалифицирует что-то как облачное приложение . Лично я знаю, что я знаю, что я думаю, что это означает, я уверен, что это не то, что вы думаете, что это значит , учитывая вопрос.
«термин« облако »туманный» - хорошо! Это означает что-то виртуальное, и вы должны указать, является ли это «что-то» программным обеспечением, операционной системой, одной машиной, несколькими машинами и сетью или чем-то еще.
ГленПетерсон

Ответы:

8

Кроме того факта, что Erlang был специально разработан для одновременной / параллельной / распределенной ситуаций, две основные технологии, которые он использует, делают это возможным:

Нет побочных эффектов:

Это означает, что когда вы даете функции часть данных для выполнения, она не будет влиять, кроме как в очень строгих случаях, на что-либо другое в системном / запущенном процессе. Это означает, что если вы одновременно выполняете функцию 300 раз одновременно, ни одно из этих 300 выполнений функции не повлияет ни на одно из других.

Техника реализации, обеспечивающая отсутствие побочных эффектов, называется «неизменяемостью», что примерно означает, что ее нельзя изменять (изменять). Это означает, что как только вы создадите переменную, значение этой переменной не может быть изменено. Erlang реализует это поведение с помощью «одиночного присваивания», поэтому после того, как вы присвоите значение переменной, вы не сможете присвоить ей значение снова.

X = 1.
X = 2. // This is not a valid operation

Это гарантирует, что ни один код не может случайно изменить значение X, вызывая состояние гонки, поэтому он по своей природе ориентирован на многопоточность и одновременное использование становится тривиальным. Это очень необычное поведение среди языков программного обеспечения и самый лучший способ, которым Erlang удается так хорошо подходить для одновременного выполнения.

Актерская модель:

Это особый способ моделирования, который показал, что реализация и управление параллельной обработкой очень просты для разработчиков. Прямо из Википедии (http://en.wikipedia.org/wiki/Actor_model):

Модель Актер принимает философию, что все является актером. Это похоже на все, что является объектной философией, используемой некоторыми объектно-ориентированными языками программирования, но отличается тем, что объектно-ориентированное программное обеспечение обычно выполняется последовательно, в то время как модель Actor по своей сути является параллельной. Действующий субъект - это вычислительная сущность, которая в ответ на полученное сообщение может одновременно: отправлять конечное число сообщений другим субъектам; создать конечное число новых актеров; обозначить поведение, которое будет использоваться для следующего полученного сообщения. Предполагаемая последовательность действий выше не предусмотрена, и они могут выполняться параллельно. Отключение отправителя от отправленных сообщений стало фундаментальным достижением модели Actor, обеспечивающей асинхронные структуры связи и управления в качестве шаблонов передачи сообщений.

Джимми Хоффа
источник
О «Нет побочных эффектов» вы говорите: «Это очень необычное поведение среди языков программного обеспечения» - я немного удивлен этим. Разве Java и C # не могут сделать это сегодня? Какие языки, на которые вы знаете, должны вызывать побочные эффекты при вызове функции?
NoChance
3
@EmmadKareem Вопрос не в том, можете ли вы написать программу без побочных эффектов; как вы заметили, вы можете сделать это в Java или C #. Это вопрос о том, является ли значение по умолчанию без побочных эффектов, и есть ли поддержка компилятора для этого. В Java вы не можете, например, сказать компилятору «этот метод не имеет побочных эффектов». Это, в свою очередь, означает, что компилятор не может предупредить вас, когда вы нарушаете правила!
Андрес Ф.
@EmmadKareem Я не говорю, что невозможно писать на C # или java без побочных эффектов (хотя и крайне редко), я скорее говорю, что очень немногие языки программирования имеют строгие встроенные в язык политики, которые отделяют функции с побочными эффектами от функций без них.
Джимми Хоффа
Было бы замечательно, если бы в Java была аннотация @NoSideEffects для добавления метода, который сообщал бы компилятору о принудительном применении побочных эффектов для этого метода. В моем собственном коде мне нравится думать, что методы не имеют побочных эффектов. Конечно, некоторые методы должны быть мутаторами в языке, подобном Java, но многие этого не делают. Особенно, если вы предпочитаете неизменные объекты в ваших проектах.
ГленПетерсон
Джимми Хоффа и @AndresF., Спасибо за ваши разъяснения.
NoChance
9

Erlang особенно силен в параллельных / параллельных вычислениях. На самом деле, он был разработан специально для этой цели. Он не имеет ничего общего с облаком, за исключением того, что приложения с большими объемами вычислений распараллеливаются и развертываются в «облачных» экземплярах, чтобы упростить наращивание / сокращение емкости по требованию.

Остальное - просто маркетинг.

кашка
источник
7
Erlang был разработан для отказоустойчивых вычислений. Просто для этого необходимы распределенные вычисления (как вы можете надежно вернуть результат, если кто-то случайно пролил кофе на вашу единственную машину, вам нужно как минимум две машины), а параллельные и параллельные вычисления - это только особые случаи распределенных вычислений, поэтому Erlang также бывает хорошо в тех. Но это не то, для чего это было разработано.
Jörg W Mittag
1
@ JörgWMittag Пока мы раскалываем волосы ... да, его целью было добиться отказоустойчивости. Это достигнуто через распараллеливание. Он был разработан для реализации этого в коммутаторе цифровой телефонии AX, который содержал две изолированные параллельные вычислительные трубы, одна из которых работала в режиме горячего резервирования.
Пап
1
Да, извините, мне следовало быть более ясным: облачные вычисления распределены в значительной степени по определению, и они часто (не всегда, но обычно) реализуются кластерами недорогих и, что более важно, ненадежных машин, но предназначены для предоставления надежных услуг. Это то, что делает Эрланга такой хорошей подгонкой.
Jörg W Mittag
3

Один аспект облака, который отличается от традиционных аппаратных развертываний, - это простота, с которой вы можете раскручивать новые экземпляры при необходимости. Возможность отслеживать другие узлы и процессы на других узлах делает относительно простым создание высокодинамичных систем, которые могут добавлять или удалять виртуальные машины и управлять ими по мере необходимости.

Это особенно актуально, если вы строите свою систему с использованием OTP-среды Erlang (Open Telecom PLatform), которая предоставляет как структуру, так и механизмы (деревья супервизора) для поддержки создания довольно сложных вещей с гораздо меньшими затратами, чем вы можете себе представить. Эрланг обрабатывает все хитрости, так что вам не нужно.

Гарри Ходжсон
источник