Erlang - RSDN.ru

advertisement
Erlang
Erlang – динамически типизированный строгий ФЯ, имеющий встроенную языковую
поддержу распределенных вычислений и отказоустойчивости. Разработан во второй
половине 80-х в Ericsson Computer Science Laboratory, как результат многолетних
исследований свойств известных языков программирования, которые упрощают
разработку телекоммуникационных приложений. Цель проекта – разработать язык,
который будет опираться на концепции, упрощающие разработку подобных систем, и не
будет содержать конструкций, использование которых усложняет систему или
потенциально опасно.
Erlang является одним из немногих «неакадемических» ФЯ, изначально разработанных
для промышленных применений. Язык чрезвычайно прост – по статистике на полное
ознакомление с ним уходит 2 дня, через неделю программист способен делать работу под
наблюдением опытного товарища, а через месяц – заниматься самостоятельной
разработкой сложных систем. Тем не менее, тренинг по языку и платформе критичен для
успеха проекта.
Несмотря на то, что язык изначально разрабатывался для телекоммуникационных нужд,
он является языком программирования общего назначения, и в данное время применяется
и в других областях. Он хорош при следующих требованиях к системе:
 Хорошая масштабируемость. Производительность системы должна увеличиваться
при добавлении вычислительных узлов в кластер.
 Высокая надежность/доступность («пять девяток» и больше). Система должна
работать постоянно в режиме 24х7, ее нельзя выключать даже для обслуживания и
обновления ПО.
 Высокая производительность при пиковых нагрузках. При достижении
максимальной нагрузки недопустимо или нежелательно уменьшение пропускной
способности системы.
 Малое время отклика на запрос. Системы реального времени без жесткого
ограничения на время реакции («soft» real-time; пример требования – 20
миллисекунд на запрос в 98% случаях).
 Распределенность. По условиям задачи необходимо производить распределенные
вычисления.
Отличительные свойства языка и платформы
Параллелизм – Erlang использует чрезвычайно легковесные процессы (время создания
процесса и переключения контекста на два порядка меньше по сравнению с потоками
.NET). Они не имеют разделяемой памяти, и взаимодействуют посредством асинхронной
посылки сообщений (посылка сообщения более чем в 50 раз дешевле, чем в .NET). Erlang
позволяет создавать приложения с очень большим количеством параллельно работающих
процессов, независимо от ограничений операционной системы (до 100000 при сохранении
времени отклика системы).
Распределенность – Erlang предназначен для работы в распределенном окружении.
Виртуальная машина Erlang называется «узлом». Распределенная система, построенная на
Erlang, является сетью из узлов (обычно один узел на процессор). Узел может создавать
процессы на других узлах, которые могут выполняться под разными операционными
системами. Процессы, выполняющиеся на разных узлах, взаимодействуют абсолютно
таким же образом, как если бы они выполнялись на одном узле.
Отказоустойчивость - Erlang имеет разнообразные примитивы обработки ошибок,
которые могут быть использованы для структурирования отказоустойчивых систем.
Например, процесс может следить за состоянием и активностью других процессов, даже
если они выполняются на других узлах. В распределенной системе процессы могут быть
сконфигурированы так, чтобы в случае отказа узла происходил перенос процессов на
другие узлы (fail-over), и выполнялась автоматически миграция обратно по мере
восстановления работоспособности узлов.
Время отклика - Erlang поддерживает разработку «мягких» систем реального времени, со
временем отклика порядка миллисекунд. Длительные задержки, вызываемые сборкой
мусора недопустимы, так что Erlang использует инкрементальную технику сборки мусора.
Горячие изменения – работа многих систем не может быть остановлена для проведения
сервисных работ (upgrade программного обеспечения). Erlang допускает изменение
программного кода на работающей системе - старый код может быть заменен новым. Во
время такого перехода обе (старая и новая) версии кода могут сосуществовать.
Соответственно, возможно устанавливать исправления дефектов и пакеты обновлений
поверх работающей системы, без остановки сервиса.
Инкрементальная загрузка кода – пользователи могут детально контролировать
процесс загрузки кода. Во встроенных системах весь код обычно загружается сразу. В
других системах код загружается по мере необходимости. Так что в случае обнаружения
ошибок необходимо заменить только модули, непосредственно содержащие ошибки.
Внешние интерфейсы – процессы Erlang взаимодействуют с внешним миром, используя
тот же самых механизм посылки сообщений, который используется в процессах Erlang.
Этот механизм применяется для взаимодействия с операционной системой, и для
межязыкового взаимодействия. Также, предусмотрен стандартный способ встраивания
пользовательского кода на С непосредственно в среду выполнения Elrang, если требуется
максимальная производительность.
Компоненты Open Source Erlang/OTP
Erlang/OTP доступен бесплатно в open source (www.erlang.org). OTP означает Open
Telecom Platform, и представляет собой набор библиотек, содержащих решения многих
типичных сетевых и телекоммуникационных задач. Erlang/OTP распространяется под
собственной лицензией EPL (Erlang Public License). Можно заказать коммерческую
поддержку от Ericsson, также существует две компании, которые оказывают
консультационные услуги.
В дистрибутив open-source Erlang входит некоторое количество компонент, которые могут
быть использованы для построения приложений. Эти компоненты полностью совместимы
со средой Erlang, и способны реагировать на ее системные сообщения (load, unload, start,
stop, restart, change code).
HiPE – оптимизирующий компилятор Erlang, генерирующий исполняемый код под
платформы SPARC и х86. Является одним из самых эффективных компиляторов для
динамически типизированных языков на данный момент (т. е. Erlang – один из самых
быстрых динамически типизированных языков). Подробнее с его возможностями можно
ознакомиться здесь http://user.it.uu.se/~kostis/Papers/erlang03.pdf
Inets - HTTP 1.0 сервер и FTP клиент. Отдельно доступен web-сервер Yaws
(http://yaws.hyber.org/), и распределенный кластер Eddie (http://eddie.sourceforge.net/).
Mnesia – распределенная СУБД реального времени. Поддерживает репликацию данных,
хранящихся как в оперативной памяти, так и на диске, допускает динамическое изменение
схемы БД, и позволяет хранить сложные данные нерегулярной структуры. Mnesia
чрезвычайно быстра, так как выполняется в том же адресном пространстве, что и
использующее ее приложение (Mnesia написана на Erlang, так же как и приложение).
Mnesia является прекрасным примером выразительности Erlang: на большом ли
количестве языков можно написать полнофункциональную распределенную СУБД
промышленного уровня уложившись в менее чем 20000 строк кода?
Orber - CORBA v2.0 Object Request Broker (ORB).
SNMP – Расширяемый SNMP v1/v2 агент и MIB компилятор.
Утилиты и Библиотеки
Поставка open-source Erlang содержит следующие утилиты и библиотеки:
Appmon – утилита мониторинга групп процессов с графическим интерфейсом (как
локальных, так и удаленных узлов).
ASN.1 – пакет поддержки ASN.1 времени компиляции и выполнения. Поддерживается
Basic Notation и правила кодирования BER и PER.
Compiler – компилятор Erlang.
Debugger – отладчик с графическим интерфейсом.
ERTS – среда выполнения, включающая виртуальную машину, сборщик мусора, и демон
отображения портов.
GS – библиотека для написания GUI.
IC – IDL-компилятор для Erlang и С (OMG's Interface Definition Language)
Jive – позволяет Java приложениям и апплетам взаимодействовать с приложениями
Erlang.
Kernel – код на С необходимый для работы системы Erlang: встроенные функции;
сервисы загрузки и именования; загрузчики, линкеры и средства логгирования; системные
интерфейсы; и т. д.
MESH – обработка метрик и измерений, включая SNMP MIB.
Mnemosyne – (Опциональный) язык запросов для Mnesia.
Mnesia Session – интерфейсы к Mnesia для других языков, определенные с помощью IDL,
которые обеспечивают доступ к Mnesia посредством протоколов IIOP и erl_interface.
OS monitor (OS_MON) – мониторинг использования CPU, дисковой и оперативной
памяти, включая SNMP v1/v2 MIBs. Интерфейсы к Solaris syslogd и Windows NT event log.
Parse tools – генератор парсеров LALR-1 для Erlang (yecc), аналогичный yacc. Yecc
генерирует код парсера на Erlang по описанию грамматики в нотации BNF.
PMan – утилита для просмотра состояния и трассировки процессов Elrang (в т. ч.
работающих на удаленных узлах).
SASL – обработка отчетов об ошибках/отказах/процессе выполнения, просмотр отчетов,
управление релизами, регулирование перегрузки (release handling, overload regulation)
Stdlib – библиотеки: ввода-вывода, табличных хранилищ данных (ETS и DETS), работы
со словарями и графами, списками, строками, множествами, очередями; регулярными
выражениями, и математическими функциями. Также, содержит интерпретатор Erlang,
лексический анализатор, парсер, верификатор (lint), и pretty-priner. Framework для
разработки отказоустойчивых серверных приложений, обработки событий, конечных
автоматов. И многое другое.
Table visualizer – утилита для просмотра таблиц Mnesia и ETS.
Toolbar – упрощает доступ к Erlang Tools.
Tools – анализ code coverage, профайлер, трассировщик, режим для редактора Emacs,
генератор тэгов для Emacs, утилита управления сборкой (make), утилита для анализа
графа вызовов.
Некоторые компании, использующие Erlang











Bluetail/Alteon/Nortel (распределенный отказоустойчивый сервис электронной
почты, SSL акселлератор)
Cellpoint (мобильные сервисы зависящие от местоположения абонента)
Corelatus (SS7 signalling black box).
Eddie robust webserver (распределенный отказоустойчивый кластер Web-серверов с
глобальными управлением трафиком и балансировкой нагрузки)
Finnish Meteorological Institute (Data acquisition and real-time monitoring)
Mobilearts (GSM and UMTS services)
Motivity Telecom (SS7/ISDN Gateways)
Schlund + Partner (Messaging and Interactive Voice Response services)
T-Mobile (previously one2one) (advanced call control services)
Telia (a telecomms operator)
Vail Systems (Interactive Voice Response systems)
Download