Upload
vasil-remeniuk
View
4.149
Download
0
Embed Size (px)
Citation preview
yzh44yzh.com
● Немного истории
● Обзор языка
● Многопоточность● Устойчивость к ошибкам● Распределенность● Горячее обновление
● Live Coding: сервис сокращенных ссылок
● OTP фреймворк
● Сфера применения. Истории успеха.
● Импровизация по другим темам :)
yzh44yzh.com
Немного истории
● Ericsson 70-e годы. Язык и ОС PLEX
● 1985 г – исследование существующих языков
● 1987 г – началась разработка Erlang
● 1995 г – релиз Erlang
● 1996 г – релиз OTP
● 1998 г – Erlang/OTP выпущены в open source
● 2006 г – рост популярности платформы
yzh44yzh.com
Обзор языка.
● Многопоточность
● Устойчивость к ошибкам
● Распределенность
● Горячее обновление
yzh44yzh.com
Обзор языка. Многопоточность.
● Shared memory with locks? Нет (ну почти нет)
● Software transactional memory? Нет (ну почти нет)
● Futures, Promises и подобное? Нет
● Message Passing – это оно :)
yzh44yzh.com
Обзор языка. Многопоточность.
run() -> Pid = spawn(fun ping/0), Pid ! self(), receive pong -> ok end.
ping() -> receive From -> From ! pong end.
yzh44yzh.com
Обзор языка. Устойчивость к ошибкам.
Try … catch – не нужно
Defensive Programming – не нужно
yzh44yzh.com
Обзор языка. Горячее обновление.
● Обновить beam
● Использовать инфраструктуру OTP фреймворка
yzh44yzh.com
OTP фреймворк.
Set of principles:● Supervision Trees● Behaviours● Applications● Releases
yzh44yzh.com
OTP фреймворк. gen_server.
● init/1
● handle_call/3
● handle_cast/2
● handle_info/2
● terminate/2
● code_change/3
yzh44yzh.com
OTP фреймворк. gen_event.
● gen_event:start({local, manager_name}).
● gen_event:add_handler(manager_name, handler_module, []).
● gen_event:notify(manager_name, event).
● gen_event:delete_handler(manager_name, handler_module, []).
yzh44yzh.com
OTP фреймворк. supervisor.
Restart Strategy:
● one_for_one
● one_for_all
● rest_for_one
yzh44yzh.com
OTP фреймворк. supervisor.
Child Specification:
● Id = term()
● StartFunc = {M, F, A}
● Restart = permanent | transient | temporary
● Shutdown = brutal_kill | integer() >=0 | infinity
● Type = worker | supervisor
● Modules = [Module]
yzh44yzh.com
OTP фреймворк. application.
Directory Structure:
● src -- contains the Erlang source code.
● ebin -- contains the Erlang object code, the beam files.
● include -- used for include files.
● priv -- used for application specific files.
yzh44yzh.com
OTP фреймворк. application.
application resource file
{application, ch_app, [{description, "Channel allocator"}, {vsn, "1"}, {modules, [ch_app, ch_sup, ch3]}, {registered, [ch3]}, {applications, [kernel, stdlib, sasl]}, {mod, {ch_app,[]}} ]}.
yzh44yzh.com
Сфера применения.
Долгоживущие сервеные приложения, обеспечивающие коммуникацию большого числа пользователей.
● computer telephony
● messaging systems
● retail and commercial banking
● enterprise
● web services
yzh44yzh.com
Истории успеха.
AXD301 ATM Switch
● telephony-class 10–160 Gbps ATM switch
● 1.5 million lines of Erlang code
● has been installed in networks all over the world
● largest “Voice over ATM” backbone in the world
● 99.9999999% availability.
● Erlang code was 4 to 10 times shorter than similar systems written in C/C++, Java, and PLEX
yzh44yzh.com
Истории успеха.
CouchDB
● open source database made by Damien Katz
● schema-less replicated document store, storing objects in JSON format
● and accessed through a RESTful interface.
● first version of CouchDB in C++
● entire C++ code base was replaced with Erlang
● one of the best known Erlang open source applications currently being used in production systems worldwide.