Поведения — behaviours Erlang-е

Автор: admin от 22-01-2018, 12:45, посмотрело: 167

Добрый день.

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

Зачем нужны поведения? Поведение — суть определение интерфейса. Установка контракта между вызывающей стороной и имплементацией. Ну и все что из этого вытекает в случаях обычного определения интерфейса класса. Только в этом случае мы определяем интерфейс модуля.

Модуль может выполнять больше, чем одно поведение, но надо аккуратно смотреть, чтобы поведения не пересекались.

Если поведения декларируют функцию, совпадающую по имени и количеству параметров, то при компиляции появляется логичное предупреждение conflicting behaviours.

Синтаксическая сторона очень проста. Я положу код для примера и потом продолжу описание.

Категория: Компании / Microsoft

 

Как Discord масштабировал Elixir на 5 млн одновременных пользователей

Автор: admin от 9-08-2017, 22:15, посмотрело: 369

С самого начала Discord активно использовал Elixir. Виртуальная машина Erlang стала идеальным кандидатом для создания высокопараллельной системы реального времени, которую мы собирались создать. Первоначальный прототип Discord был разработан на Elixir; сейчас он лежит в основе нашей инфраструктуры. Задача и предназначение Elixir простые: доступ ко всей мощи Erlang VM через гораздо более современный и дружественный язык и набор инструментов.



Прошло два года. Сейчас у нас пять миллионов одновременных пользователей, а через систему проходят миллионы событий в секунду. Хотя мы абсолютно не сожалеем о выборе архитектуры, пришлось проделать массу исследований и экспериментов, чтобы добиться такого результата. Elixir — это новая экосистема, а экосистеме Erlang не хватает информации о её использовании в продакшне (хотя Erlang in Anger — это нечто). По итогу всего пути, пытаясь приспособить Elixir для работы в Discord, мы извлекли некоторые уроки и создали ряд библиотек.
->

Категория: Программирование / Веб-разработка

 

Создание движка для блога с помощью Phoenix и Elixir / Часть 10. Тестирование каналов

Автор: admin от 14-07-2017, 10:20, посмотрело: 285

Создание движка для блога с помощью Phoenix и Elixir / Часть 10. Тестирование каналов

От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.»



В этой части мы научимся тестировать каналы.

->

Категория: Программирование / Веб-разработка

 

Создание движка для блога с помощью Phoenix и Elixir / Часть 9. Каналы

Автор: admin от 10-07-2017, 00:15, посмотрело: 199

Создание движка для блога с помощью Phoenix и Elixir / Часть 9. Каналы


От переводчика: «Elixir и Phoenix — прекрасный пример того, куда движется современная веб-разработка. Уже сейчас эти инструменты предоставляют качественный доступ к технологиям реального времени для веб-приложений. Сайты с повышенной интерактивностью, многопользовательские браузерные игры, микросервисы — те направления, в которых данные технологии сослужат хорошую службу. Далее представлен перевод серии из 11 статей, подробно описывающих аспекты разработки на фреймворке Феникс казалось бы такой тривиальной вещи, как блоговый движок. Но не спешите кукситься, будет действительно интересно, особенно если статьи побудят вас обратить внимание на Эликсир либо стать его последователями.



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

->

Категория: Программирование / Веб-разработка

 

JaCarta Authentication Server и JaCarta WebPass для OTP-аутентификации в Linux SSH

Автор: admin от 29-06-2017, 13:40, посмотрело: 844

В этой статье мы поговорим об основных этапах настройки аутентификации в Linux SSH для замены парольной аутентификации одноразовыми паролями — в статье описан сценарий аутентификации в сессию SSH-подключения к Linux OS посредством одноразовых паролей с использованием устройства JaCarta WebPass.



JaCarta Authentication Server и JaCarta WebPass для OTP-аутентификации в Linux SSH
->

Категория: Программирование / Системное администрирование / Информационная безопасность / Linux / Криптография

 

Как устроены протоколы в Elixir

Автор: admin от 15-05-2017, 15:15, посмотрело: 318

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


Elixir – это функциональный язык программирования общего назначения, который работает на виртуальной машине BeamVM. От Erlang отличается синтаксисом, более похожим на Ruby, и расширенными возможностями метапрограммирования.


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


Тогда как же они устроены внутри? Какой overhead дает код с использованием протоколов? Попробуем разобраться.


Как устроены протоколы в Elixir

Категория: Программирование

 

Каркас для Telegram-бота на Erlang

Автор: admin от 2-05-2017, 01:50, посмотрело: 771

Некоторое время назад я активно взялся за изучение языка Erlang. В рамках обучения на практике я решил написать бота для Telegram. Фантазии выдумать оригинальную идею бота не хватило, поэтому всё, что получилось на выходе — это хорошая, честная заготовка, в которую можно добавить свои команды, свои обработчики и с этим можно будет жить. Этакий шаблон, который можно заточить под себя при минимальных временных затратах. Подробно — под катом.

Категория: Программирование

 

«Введение в Elixir» — первая книга по Эликсиру на русском

Автор: admin от 5-04-2017, 08:15, посмотрело: 634

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

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

Подробности и промокод внутри

Категория: Программирование / Веб-разработка

 

Простейший HTTP сервер на Golang и Elixir. Сравнение производительности

Автор: admin от 31-03-2017, 11:15, посмотрело: 476

Простейший HTTP сервер на Golang и Elixir. Сравнение производительности
Пару недель назад, я решил взять простейший пример HTTP сервера на Go и измерить его производительность. Потом я смело взял Phoenix, прогнал на тех же тестах, и расстроился. Результаты были не в пользу Elixir/Erlang (45133 RPS у Go и всего 3065 RPS у Phoenix). Но Phoenix — это тяжело. Надо что-то хотя бы примерно равное по простоте и логике разработки тому, что есть на Go: когда есть путь — "/" и handler для него. Логичной аналогией мне показалось решение cowboy + plug, где у нас есть Router, который так же ловит "/" и отвечает на него. Результаты убили — Elixir/Erlang опять оказался медленнее:


Golang
[email protected]:~/go$ wrk -t10 -c100 -d10s http://127.0.0.1:4000/
...
  452793 requests in 10.03s, 58.30MB read
Requests/sec:  45133.28
Transfer/sec:      5.81MB

elixir cowboy plug
[email protected]:~/http_test$ wrk -t10 -c100 -d10s http://127.0.0.1:4000/
...
  184703 requests in 10.02s, 28.57MB read
Requests/sec:  18441.79
Transfer/sec:      2.85MB

Как жить дальше? Две недели я не спал и не ел (почти). Все, во что я верил все эти годы: совершенство vm erlang, ФП, зеленые процессы, было растоптано разорвано, сожжено и пущено по ветру. Немного отойдя от шока, успокоившись, и подтерев сопли я решил разобаться, в чем дело.

Категория: Программирование / Веб-разработка

 

Простейший HTTP сервер на Golang и Elixir. Сравнение производительности

Автор: admin от 31-03-2017, 11:15, посмотрело: 476

Простейший HTTP сервер на Golang и Elixir. Сравнение производительности
Пару недель назад, я решил взять простейший пример HTTP сервера на Go и измерить его производительность. Потом я смело взял Phoenix, прогнал на тех же тестах, и расстроился. Результаты были не в пользу Elixir/Erlang (45133 RPS у Go и всего 3065 RPS у Phoenix). Но Phoenix — это тяжело. Надо что-то хотя бы примерно равное по простоте и логике разработки тому, что есть на Go: когда есть путь — "/" и handler для него. Логичной аналогией мне показалось решение cowboy + plug, где у нас есть Router, который так же ловит "/" и отвечает на него. Результаты убили — Elixir/Erlang опять оказался медленнее:


Golang
[email protected]:~/go$ wrk -t10 -c100 -d10s http://127.0.0.1:4000/
...
  452793 requests in 10.03s, 58.30MB read
Requests/sec:  45133.28
Transfer/sec:      5.81MB

elixir cowboy plug
[email protected]:~/http_test$ wrk -t10 -c100 -d10s http://127.0.0.1:4000/
...
  184703 requests in 10.02s, 28.57MB read
Requests/sec:  18441.79
Transfer/sec:      2.85MB

Как жить дальше? Две недели я не спал и не ел (почти). Все, во что я верил все эти годы: совершенство vm erlang, ФП, зеленые процессы, было растоптано разорвано, сожжено и пущено по ветру. Немного отойдя от шока, успокоившись, и подтерев сопли я решил разобаться, в чем дело.

Категория: Программирование / Веб-разработка

 
Назад Вперед