Home

Реклама

Предыдущая запись | Следующая запись

Erlang

  • 29 Июн, 2008 at 11:43 PM
солнце
Мы используем Erlang для серверной части. Для новой, масштабируемой, которая еще даже не столько пишется, сколько прототипируется.

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


На этом языке написаны:
- ejabberd - лучший (по моим ощущениям) Jabber-сервер
- SimpleDB - распределенная база данных, созданная и используемая компанией Amazon (аналог BigTable, используемой в Google)
- Чат в Facebook
- Yaws - легковесный скоростной веб-сервер
- CouchDB - документ-ориентированная распределенная база данных (пока на ранней стадии разработки)
и много других интересных серверных приложений

В области телекома с помощью Erlang созданы системы с отказоустойчивостью в восемь девяток.

Сам язык очень интересен. Его синтаксис унаследован от языка Prolog (также прост и выразителен), но в основе лежит совсем другая философия. Erlang - функциональный язык, которому близка концепция "все - процесс". Создание процессов очень дешево, сами процессы очень дешевы, с точки зрения конструкций языка нет большой разницы, создается процесс локально или на другой машине. Erlang порождает совершенно особый способ мышления, очень хорошо подходящий для создания сервисов.

Язык имеет ограничения (иногда довольно жесткие), во многом исключающие саму возможность написания программ, которые плохо масштабируются. (Примечание: это действительно так, однако я встречал корявые немасштабируемые примеры даже на Erlang - человек на многое способен ;-) ) Часть этих ограничений помогает среде исполнения обеспечивать так называемый soft-realtime - гарантию, что время любого действия будет ограничено некой небольшой константой, пусть не со стопроцентной, но все же с очень высокой вероятностью.

Почему это важно хорошу поймут пишущие высоконагруженные приложения на Java - на их вечные мучения со сборщиком мусора, регулярно "подвешивающим" систему на неопределенный срок, просто больно смотреть. Видел такое своими глазами, причем что интересно - на примере приложения из области телекома. Познакомившись с Erlang я понял, что создатели этого приложения вероятно ошиблись с выбором языка, поставив на Java. ;-)

Продолжая разговор об ограничениях и прочих внутренностях, Erlang - первый язык, поразивший меня тем, насколько в нем все неспроста. А среди людей, активно использующих Erlang оказалось очень много интересных личностей, которые меня очаровали не меньше чем сам язык.

Конечно, есть и недостатки. Это в первую очередь отсутствие действительно удобной среды разработки. ErlIDE и ErlyBird еще слишком нестабильны, а emacs + distel хоть в принципе и неплохи, но очень непривычны и бедноваты для человека, привыкшего к шику MS Visual Studio + Resharper и IntelliJ Idea.

Документация бедновата. Стандартные библиотеки тоже. Сторонние приложения, которые можно использовать в качестве библиотек (это очень Erlang-way) часто либо не очень стабильны, либо недостаточно "фичасты", либо из рук вон плохо документированы. Скудность документации, правда, отчасти компенсируется динамичностью языка - если что-то непонятно, легко попробовать "на лету".

Взаимодействие с C и другими языками выполнено на уровне "так себе". Встроенная поддержка юникода отсутствует. Часть решений, принятых при разработке языка, явно возникла только по той причине, что авторы (по их собственному заявлению) не предполагали, что когда-нибудь Erlang получит столь широкое распространение. К счастью, это не очень большая часть.

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

Comments

( 15 комментариев — Оставить комментарий )
[info]tudum wrote:
29 Июн, 2008 21:16 (UTC)
А нет ли у вас информации, кто ещё в России использует Erlang в коммерческих разработках? Я достоверно знаю только про a1tv.ru.
[info]dimsmol wrote:
29 Июн, 2008 21:38 (UTC)
Знаю, что есть такие люди и такие проекты, неоднократно встречал упоминания, но прямых ссылок не помню.

Могу подсказать, где можно спросить:

- Несколько Эрлангистов тусуется на RSDN - поищите там поиском
- Вот несколько Erlang-людей в ЖЖ: Мамут, Курилка, Gaperton - по-моему что-то коммерческое они делали
- Есть тусовка вокруг сайта Мамута "Erlang по-русски"
- Есть русскоязычная Google-группа
[info]tudum wrote:
29 Июн, 2008 21:45 (UTC)
Спасибо!
[info]vorushin wrote:
30 Июн, 2008 08:46 (UTC)
Охрененно интересно!
Читаю с огромным удовольствием, спасибо!
[info]dimsmol wrote:
30 Июн, 2008 10:18 (UTC)
Рад :-)
Привет, Рома! :-)
[info]lambda_ssp wrote:
3 Июл, 2008 18:31 (UTC)
Я использую Erlang для прототипов разных FSM -- gen_fsm+mnesia очень хороши.

Взаимодействие с C/C++ не удобно если надо передавать не примитивы, а структурированные сообщения. В этом случае имеет смысл смотреть в сторону UBF от Hal Snyder -- простой формат для передачи структур, есть реализация как для Erlang так и для C.

Из того что неудобно мне -- нет поддержки карринга, хотя самому дописать просто. До недавнего времени не было никакой поддержки статической типизации. При необходимости поднять ноду, связь с которой нестабильна, код обрастает интересными подробностями.
В этом плане писать на JoCaml проще.
[info]dimsmol wrote:
4 Июл, 2008 10:49 (UTC)
Спасибо, очень интересный комментарий :-)

Ты не мог бы дать прямую ссылку на реализацию UBF? А то гугл находит много документов, но центра не видно.

Еще, можно чуть подробнее про нестабильную связь с нодами и чем в этой ситуации проще в JoCaml? Врядли это нас реально коснется, но полезно знать такие нюансы.
[info]lambda_ssp wrote:
4 Июл, 2008 15:44 (UTC)
вот ссылка на реализацию UBF: http://www.sics.se/~joe/ubf/site/home.html

Про "нестабильную связь" распишу в понедельник, как вернусь в город с дачи.
[info]dimsmol wrote:
4 Июл, 2008 16:39 (UTC)
Спасибо! :-)
[info]lambda_ssp wrote:
8 Июл, 2008 06:48 (UTC)
Добрый день.
Моё описание по второй части откладывается дня на два -- на даче порезал пальцы, и в таком виде набирать текст плохо получается.
[info]dimsmol wrote:
8 Июл, 2008 07:32 (UTC)
Привет!
Скорейшего заживания! :-)
[info]drugoy_summoner wrote:
12 Сент, 2008 07:24 (UTC)
Немного теоретической справки:
http://en.wikipedia.org/wiki/Process_calculus
http://en.wikipedia.org/wiki/Join_calculus
На основе этих калькулюсов можно посмотреть и многие другие интересные языки.

А по поводу Java, сейчас уже вроде есть realtime jvm-ы.
[info]dimsmol wrote:
12 Сент, 2008 09:20 (UTC)
Всю эту теорию я просматривал, но нам-то нужны практически полезные вещи.
Поэтому все черезчур мудреное, а также то, на чем еще никто не сумел написать что-нибудь типа ejabberd, отвергалось моментально :-)

Привет! :-)
[info]drugoy_summoner wrote:
12 Сент, 2008 09:24 (UTC)
Ну это просто чтобы знать что вообще бывает, плюс помогает лучше понять мир.

Ага, привет, привет :)
[info]dimsmol wrote:
12 Сент, 2008 09:35 (UTC)
> Ну это просто чтобы знать что вообще бывает, плюс помогает лучше понять мир.

Да, спасибо! :-)
( 15 комментариев — Оставить комментарий )

Latest Month

Декабрь 2009
Вс Пн Вт Ср Чт Пт Сб
  12345
6789101112
13141516171819
20212223242526
2728293031  
Разработано LiveJournal.com
Designed by Lilia Ahner