Предыдущая запись | Следующая запись
Мы используем 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 на любом другом языке, то на фоне этой задачи это так себе недостатки. На уровне мелкого недоразумения.
Это очень интересный язык программирования, созданный специально для написания отказоустойчивых высоконагруженных масштабируемых систем. Долгое время он использовался преимущественно в области телекома, но затем "вырвался на свободу".
На этом языке написаны:
- 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 на любом другом языке, то на фоне этой задачи это так себе недостатки. На уровне мелкого недоразумения.
- Где:дома
- Настроение:
calm


Comments
Могу подсказать, где можно спросить:
- Несколько Эрлангистов тусуется на RSDN - поищите там поиском
- Вот несколько Erlang-людей в ЖЖ: Мамут, Курилка, Gaperton - по-моему что-то коммерческое они делали
- Есть тусовка вокруг сайта Мамута "Erlang по-русски"
- Есть русскоязычная Google-группа
Читаю с огромным удовольствием, спасибо!
Привет, Рома! :-)
Взаимодействие с C/C++ не удобно если надо передавать не примитивы, а структурированные сообщения. В этом случае имеет смысл смотреть в сторону UBF от Hal Snyder -- простой формат для передачи структур, есть реализация как для Erlang так и для C.
Из того что неудобно мне -- нет поддержки карринга, хотя самому дописать просто. До недавнего времени не было никакой поддержки статической типизации. При необходимости поднять ноду, связь с которой нестабильна, код обрастает интересными подробностями.
В этом плане писать на JoCaml проще.
Ты не мог бы дать прямую ссылку на реализацию UBF? А то гугл находит много документов, но центра не видно.
Еще, можно чуть подробнее про нестабильную связь с нодами и чем в этой ситуации проще в JoCaml? Врядли это нас реально коснется, но полезно знать такие нюансы.
Про "нестабильную связь" распишу в понедельник, как вернусь в город с дачи.
Моё описание по второй части откладывается дня на два -- на даче порезал пальцы, и в таком виде набирать текст плохо получается.
Скорейшего заживания! :-)
http://en.wikipedia.org/wiki/Process_ca
http://en.wikipedia.org/wiki/Join_calcu
На основе этих калькулюсов можно посмотреть и многие другие интересные языки.
А по поводу Java, сейчас уже вроде есть realtime jvm-ы.
Поэтому все черезчур мудреное, а также то, на чем еще никто не сумел написать что-нибудь типа ejabberd, отвергалось моментально :-)
Привет! :-)
Ага, привет, привет :)
Да, спасибо! :-)