SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Этот безумный, безумный

        Erlang
Структуры данных

● lists (proplists)
● sets
● dict
● gb_trees
● queue
● orddicts
● ordsets
● digraph
● array
OTP

● gen_server
● supervisor
● gen_fsm
● gen_event
gen_server
-module(mygenserv).
%-behaviour(gen_server).
-export([start_link/0]).
-export([init/1, handle_call/3, handle_cast/2]).
-export([sync_incr/0, async_incr/0, get_value/0]).

start_link() ->
   gen_server:start_link({local, ?MODULE}, ?MODULE, 0, []).

sync_incr() ->
  gen_server:call(?MODULE, incr).

async_incr() ->
  gen_server:cast(?MODULE, incr).

get_value() ->
  gen_server:call(?MODULE, get_value).

init(I) ->
   State = I,
   {ok, State}.

handle_call(get_value, _From, State) ->
  {reply, State, State}.
handle_call(incr, _From, State) ->
  {reply, State, State + 1}.

handle_cast(incr, State) ->
  {noreply, State + 1}.
supervisor
-module(myapp_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).

start_link() ->
   supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init(_) ->
   MyGenServSpec = {
                    mygenserv,
                    {mygenserv, start_link, []},
                    permanent,
                    5000,
                    worker,
                    [mygenserv]
                 },
   ChildSpecs = [MyGenServSpec]
   {ok, {one_for_one, 100, 1}, ChildSpecs}.
Хранилища и БД из коробки

● ETS – in-memory хранилище


● DETS – дисковое хранилище


● Mnesia – распределенная база данных на базе ETS&DETS
rebar

# git clone https://github.com/basho/rebar

# cd rebar

# make

# cp rebar ~/src/myproject

# cd ~/src/myproject
rebar.config

{deps,
   [
     {mochiweb, "v1.1",
        {git, "https://github.com/mochi/mochiweb", {branch, "master"}}
   ]
}.
{erl_opts, [debug_info]}.
# ./rebar create-app appid=myapp
# ./rebar get-deps
# ./rebar compile

# erl -pa ebin

1> application:start(myapp).
# rebar -c

clean                        Clean
compile                       Compile sources

create     template= [var=foo,...] Create skel based on template and vars
create-app [appid=myapp]            Create simple app skel
create-node [nodeid=mynode]           Create simple node skel
list-templates              List available templates

doc                          Generate Erlang program documentation

check-deps                       Display to be fetched dependencies
get-deps                       Fetch dependencies
update-deps                      Update fetched dependencies
delete-deps                     Delete fetched dependencies
list-deps                     List dependencies

generate     [dump_spec=0/1]           Build release with reltool

generate-upgrade previous_release=path Build an upgrade package

generate-appups previous_release=path Generate appup files

eunit       [suite=foo]         Run eunit [test/foo_tests.erl] tests
ct        [suite=] [case=]      Run common_test suites in ./test

xref                         Run cross reference analysis

help                         Show the program options
version                       Show version information
Mochiweb
      git clone https://github.com/mochi/mochiweb


● Легкий высокопроизводительный HTTP-сервер

● mochijson, mochijson2 – Erlang terms в JSON и обратно

● mochiglobal – эмуляция глобальных переменных

● reloader

● Мелкие полезные утилиты (mochinum, mochilists, etc)

● Есть форк с поддержкой websockets
mochiweb_http

mochiweb_http:start([
    {port, 8080},
    {ip, "0.0.0.0"},
    {loop, fun handle_request/1}
]).

handle_request(Req) ->
  Method = Req:get(method),
  Path = Req:get(path),
  GETParams = Req:parse_qs(),
  POSTParams = Req:parse_post(),
  Req:ok({"text/html", "ok"}).
mochijson2

Props = [
   {age, 10},
   {name, <<"Snoopy">>},
   {talents, [<<"jumping">>, <<"barking">>, <<"sleeping">>]}
],
Obj = {struct, Props},

JSON = mochijson2:encode(Obj),

Req:ok({"application/json", JSON}).

...

1> mochijson2:decode(<<"{"a": "test"}">>).
{struct, [{<<"a">>,<<"test">>}] }
reloader

# erl -pa ebin -s reloader

                             # vi src/myapp.erl
                             ...
                             # ./rebar compile

Reloading myapp ... ok.
Другие веб-сервера

● YAWS

● misultin (очень похож на mochiweb, но полегче и попроще)

● cowboy (похож на mochiweb и misultin, но использует не
  parametrized modules, а callbacks)
Riak
          git clone https://github.com/basho/riak

● riak_core – фреймворк для создания распределенных систем

● riak_error – ограничение размера error reports

● lager – фрймворк для логирования

● basho_bench – утилита для измерения производительности

● rebar
lager

lager:error("oh no!")
lager:warning("~s, ~s and ~s, oh my!", [lions, tigers, bears])

2011-07-19 18:02:02 [error] <0.31.0>@test2:start:8 oh no! 2011-07-19 18:02:02
[warning] <0.31.0>@test2:start:9 lions, tigers and bears, oh my!

2011-07-19 17:51:21 [error] <0.60.0> gen_server crash terminated with reason: no match
of right hand value {} in crash:handle_call/3
2011-07-19 17:51:22 [error] <0.60.0> CRASH REPORT Process crash with 0 neighbours
crashed with reason: no match of right hand value {} in crash:handle_call/3
RabbitMQ

 ● Используется для взаимодействия узлов
   распределенных систем
 ● Persistent messaging
 ● Полная поддержка протокола AMQP
 ● Кроссплатформенный
 ● Клиенты на всех популярных языках
 ● Используется в продакшне сотнями компаний (включая
   Echo и Mochi Media)

gen_bunny – библиотека для удобной работы с RabbitMQ в
эрланге
Agner

http://erlagner.org

На сегодняшний день 131 пакет

Mais conteúdo relacionado

Mais procurados

Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
Alexey Nayden
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
ITmozg
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
Anthony Shoumikhin
 

Mais procurados (19)

Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
 
Perl – жив?!
Perl – жив?!Perl – жив?!
Perl – жив?!
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
Coroutines
CoroutinesCoroutines
Coroutines
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
 
PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?PiterPy#3. DSL in Python. How and why?
PiterPy#3. DSL in Python. How and why?
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Comma
CommaComma
Comma
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
PHP basic
PHP basicPHP basic
PHP basic
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 

Semelhante a Erlang tasty & useful stuff

Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
Yuri Zhloba
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
Technopark
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
tyomo4ka
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 

Semelhante a Erlang tasty & useful stuff (20)

Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Cтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDBCтрах и ненависть в MongoDB
Cтрах и ненависть в MongoDB
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
бегун
бегунбегун
бегун
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
бегун
бегунбегун
бегун
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 

Último

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 

Último (9)

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 

Erlang tasty & useful stuff

  • 2. Структуры данных ● lists (proplists) ● sets ● dict ● gb_trees ● queue ● orddicts ● ordsets ● digraph ● array
  • 4. gen_server -module(mygenserv). %-behaviour(gen_server). -export([start_link/0]). -export([init/1, handle_call/3, handle_cast/2]). -export([sync_incr/0, async_incr/0, get_value/0]). start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, 0, []). sync_incr() -> gen_server:call(?MODULE, incr). async_incr() -> gen_server:cast(?MODULE, incr). get_value() -> gen_server:call(?MODULE, get_value). init(I) -> State = I, {ok, State}. handle_call(get_value, _From, State) -> {reply, State, State}. handle_call(incr, _From, State) -> {reply, State, State + 1}. handle_cast(incr, State) -> {noreply, State + 1}.
  • 5. supervisor -module(myapp_sup). -behaviour(supervisor). -export([start_link/0]). -export([init/1]). start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). init(_) -> MyGenServSpec = { mygenserv, {mygenserv, start_link, []}, permanent, 5000, worker, [mygenserv] }, ChildSpecs = [MyGenServSpec] {ok, {one_for_one, 100, 1}, ChildSpecs}.
  • 6. Хранилища и БД из коробки ● ETS – in-memory хранилище ● DETS – дисковое хранилище ● Mnesia – распределенная база данных на базе ETS&DETS
  • 7. rebar # git clone https://github.com/basho/rebar # cd rebar # make # cp rebar ~/src/myproject # cd ~/src/myproject
  • 8. rebar.config {deps, [ {mochiweb, "v1.1", {git, "https://github.com/mochi/mochiweb", {branch, "master"}} ] }. {erl_opts, [debug_info]}.
  • 9. # ./rebar create-app appid=myapp # ./rebar get-deps # ./rebar compile # erl -pa ebin 1> application:start(myapp).
  • 10. # rebar -c clean Clean compile Compile sources create template= [var=foo,...] Create skel based on template and vars create-app [appid=myapp] Create simple app skel create-node [nodeid=mynode] Create simple node skel list-templates List available templates doc Generate Erlang program documentation check-deps Display to be fetched dependencies get-deps Fetch dependencies update-deps Update fetched dependencies delete-deps Delete fetched dependencies list-deps List dependencies generate [dump_spec=0/1] Build release with reltool generate-upgrade previous_release=path Build an upgrade package generate-appups previous_release=path Generate appup files eunit [suite=foo] Run eunit [test/foo_tests.erl] tests ct [suite=] [case=] Run common_test suites in ./test xref Run cross reference analysis help Show the program options version Show version information
  • 11. Mochiweb git clone https://github.com/mochi/mochiweb ● Легкий высокопроизводительный HTTP-сервер ● mochijson, mochijson2 – Erlang terms в JSON и обратно ● mochiglobal – эмуляция глобальных переменных ● reloader ● Мелкие полезные утилиты (mochinum, mochilists, etc) ● Есть форк с поддержкой websockets
  • 12. mochiweb_http mochiweb_http:start([ {port, 8080}, {ip, "0.0.0.0"}, {loop, fun handle_request/1} ]). handle_request(Req) -> Method = Req:get(method), Path = Req:get(path), GETParams = Req:parse_qs(), POSTParams = Req:parse_post(), Req:ok({"text/html", "ok"}).
  • 13. mochijson2 Props = [ {age, 10}, {name, <<"Snoopy">>}, {talents, [<<"jumping">>, <<"barking">>, <<"sleeping">>]} ], Obj = {struct, Props}, JSON = mochijson2:encode(Obj), Req:ok({"application/json", JSON}). ... 1> mochijson2:decode(<<"{"a": "test"}">>). {struct, [{<<"a">>,<<"test">>}] }
  • 14. reloader # erl -pa ebin -s reloader # vi src/myapp.erl ... # ./rebar compile Reloading myapp ... ok.
  • 15. Другие веб-сервера ● YAWS ● misultin (очень похож на mochiweb, но полегче и попроще) ● cowboy (похож на mochiweb и misultin, но использует не parametrized modules, а callbacks)
  • 16. Riak git clone https://github.com/basho/riak ● riak_core – фреймворк для создания распределенных систем ● riak_error – ограничение размера error reports ● lager – фрймворк для логирования ● basho_bench – утилита для измерения производительности ● rebar
  • 17. lager lager:error("oh no!") lager:warning("~s, ~s and ~s, oh my!", [lions, tigers, bears]) 2011-07-19 18:02:02 [error] <0.31.0>@test2:start:8 oh no! 2011-07-19 18:02:02 [warning] <0.31.0>@test2:start:9 lions, tigers and bears, oh my! 2011-07-19 17:51:21 [error] <0.60.0> gen_server crash terminated with reason: no match of right hand value {} in crash:handle_call/3 2011-07-19 17:51:22 [error] <0.60.0> CRASH REPORT Process crash with 0 neighbours crashed with reason: no match of right hand value {} in crash:handle_call/3
  • 18. RabbitMQ ● Используется для взаимодействия узлов распределенных систем ● Persistent messaging ● Полная поддержка протокола AMQP ● Кроссплатформенный ● Клиенты на всех популярных языках ● Используется в продакшне сотнями компаний (включая Echo и Mochi Media) gen_bunny – библиотека для удобной работы с RabbitMQ в эрланге