Top Banner
Erlang/OTP Un Mundo Concurrente
26

Erlang otp yuilop - ieee developer days 2013

Jul 16, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Erlang otp   yuilop - ieee developer days 2013

Erlang/OTPUn Mundo Concurrente

Page 2: Erlang otp   yuilop - ieee developer days 2013

¿Quién soy?

○ Programador desde los 12 años... unos 20 años programando en: Perl, Python, Ruby, PHP, Java, C/C++, JavaScript, Pascal, Modula-2, Basic y Erlang.

○ Administrador de sistemas desde los 22 años... unos 10 años administrando Windows, GNU/Linux y BSD.

○ En definitiva... DevOps.

○ En Yuilop: Senior Core Server Developer.

○ Contacto:

○ Blog: http://bosqueviejo.net

○ Twitter: @MRonErlang

Page 3: Erlang otp   yuilop - ieee developer days 2013

¿Qué es Yuilop?

○ Mensajería Instantánea entre usuarios

○ SMS a los que no son usuarios

○ VoIP entre usuarios

○ Llamadas a los que no son usuarios

○ Chat de grupo entre usuarios

○ Número yuilop para ser llamado por cualquier otro teléfono

○ Más info:

Page 4: Erlang otp   yuilop - ieee developer days 2013

¿Qué es Yuilop?

Page 5: Erlang otp   yuilop - ieee developer days 2013

¿Qué es Erlang?

○ Nació en 1986 como una extensión de Prolog en los laboratorios Ericsson.

○ Lenguaje○ ¿Funcional o no? ... mejor híbrido.○ Orientado a la Concurrencia... Modelo Actor

○ Máquina Virtual o Plataforma○ Gestión y Planificador de Procesos (soporta más de 1.000.000 procs)○ Gestor de Memoria○ Intérprete de comandos (shell)○ Interfaz transparente para comunicación entre nodos

○ Características○ Distribuido○ Tolerante a fallos○ Escalable○ Cambio de código en caliente

Page 6: Erlang otp   yuilop - ieee developer days 2013

Progresión Informática

○ Carrera de los Hertzios vs Cores

Cuando estás en un atasco de tráfico con un Porsche, todo lo que puedes hacer es consumir más combustible que el resto estando parado. La escalabilidad va de construir

carreteras más anchas, no coches más rápidos.-- Steve Swartz

○ Programación Orientada a Objetos se atribuye a Alan Kay (Smalltalk)

○ Modelo Actor se atribuye a Carl Hewitt por un estudio de 1977.

Page 7: Erlang otp   yuilop - ieee developer days 2013

Caso

○ En 2005, sistemas C++ y MySQL

○ Máx. 80 usuarios concurrentes

○ Crashes son muy frecuentes

○ En 2006, sistemas C++, Python y MySQL

○ Máx. 1.000 usuarios concurrentes

○ Requiere reinicios, el código es difícil de mantener... muchos errores

○ En 2007, sistemas Erlang, Python y MySQL

○ De 20.000 a 1.000.000 de usuarios concurrentes en Call of Duty 4○ De 500 a 50.000 peticiones por segundo○ De 50 a 1.850 servidores

Page 8: Erlang otp   yuilop - ieee developer days 2013

Caso

Page 9: Erlang otp   yuilop - ieee developer days 2013

¿Quién usa Erlang?

...

Page 10: Erlang otp   yuilop - ieee developer days 2013

El camino de Yuilop

○ Android y PHP (vía HTTP)

○ Falta de instantaneidad en los mensajes○ Hace falta una gran infraestructura además de ayudas:

■ Memcache■ APC■ FPM, FastCGI, Ngnix, ...

○ Android, iOS y Java (vía XMPP)

○ OpenFire no sirve para una cantidad alta de usuarios concurrentes○ Los deadlocks de Java hacen que todo caiga

○ Android, iOS, BlackBerry, Windows Phone y Erlang (vía XMPP)

○ Escalabilidad asegurada○ Más de 2 millones de usuarios con alto grado de concurrencia

Page 11: Erlang otp   yuilop - ieee developer days 2013

OOP vs Actor Model

Page 12: Erlang otp   yuilop - ieee developer days 2013

OOP vs Actor Model

Page 13: Erlang otp   yuilop - ieee developer days 2013

Sintaxis de Erlang

Solo hay dos tipos de lenguajes:aquellos de los que la gente se queja y

aquellos que nadie usa.-- Bjarne Stroustrup

Ejemplo típico del factorial

Page 14: Erlang otp   yuilop - ieee developer days 2013

Sintaxis de Erlang

Solo hay dos tipos de lenguajes:aquellos de los que la gente se queja y

aquellos que nadie usa.-- Bjarne Stroustrup

Ejemplo típico del factorial (C)

factorial(int f) { int i; for (i=f-1; i>1; i--) { f = f * i; } return f; }

Page 15: Erlang otp   yuilop - ieee developer days 2013

Sintaxis de Erlang

Solo hay dos tipos de lenguajes:aquellos de los que la gente se queja y

aquellos que nadie usa.-- Bjarne Stroustrup

Ejemplo típico del factorial (C recursivo)

factorial(int f) { if (f <= 1) { return f; } return f * factorial(f-1); }

Page 16: Erlang otp   yuilop - ieee developer days 2013

Sintaxis de Erlang

Solo hay dos tipos de lenguajes:aquellos de los que la gente se queja y

aquellos que nadie usa.-- Bjarne Stroustrup

Ejemplo típico del factorial (Erlang)

factorial(0) -> 0; factorial(1) -> 1; factorial(N) -> N * factorial(N-1).

Page 17: Erlang otp   yuilop - ieee developer days 2013

Características del Lenguaje

○ Asignaciones únicas

> A = 1. 1 > A = 2. ** exception error: no match of right hand side value 2

○ Lenguaje simple: case, if, try...catch y receive.

case Value of 12 when is_integer(Value) -> "OK"; _ -> "FAIL"; end.

○ Paso de mensajes

Pid = spawn(fun micode/0), Pid ! "hola mundo!", receive Any -> io:format("OK") end.

Page 18: Erlang otp   yuilop - ieee developer days 2013

Características del Lenguaje

○ Capacidad numérica

1> fact:fact(128).385620482362580421735677065923463640617493109590223590278828403276373402575165543560686168588507361534030051833058916347592172932262498857766114955245039357760034644709279247692495585280000000000000000000000000000000

2> fact:fact(1024).541852879605885728307692194468385473800155396353801344448287027068321061207337660373314098413621458671907918845708980753931994165770187368260454133333721939108367528012764993769768292516937891165755680659663747947314518404886677672556125188694335251213677274521963430770133713205796248433128870088436171654690237518390452944732277808402932158722061853806162806063925435310822186848239287130261690914211362251144684713888587881629252104046295315949943900357882410243934315037444113890806181406210863953275235375885018598451582229599654558541242789130902486944298610923153307579131675745146436304024890820442907734561827369030502252796926553072967370990758747793127635104702469889667961462133026237158973227857814631807156427767644064591085076564783456324457736853810336981776080498707767046394272605341416779125697733374568037475186676265961665615884681450263337042522664141862157046825684773360944326737493676674915098953768112945831626643856479027816385730291542667725665642276826058264393884514911976419675509290208592713156362983290989441052732125187249527501314071676405516936190781821236701912295767363117054126589929916482008515781751955466910902838729232224509906388638147771255227782631322385756948819393658889908993670874516860653098...

Page 19: Erlang otp   yuilop - ieee developer days 2013

Características del Lenguaje

○ Matching

> "Hola " ++ Quien = "Hola mundo!". "Hola mundo!" > Quien. "mundo!"

○ Conjuntos

> A = [1,2,3,4,5], B = [2,4,6], A -- B. [1,3,5] > (A -- B) ++ (B -- A). [1,3,5,6]

○ Binarios

{ok, PNG} = file:open("debian-logo.png", [read,binary]), {ok, <<137,"PNG",13,10,26,10,Length:32,"IHDR">>} = file:read(PNG, 16), {ok, <<Width:32, Height:32, Depth:8, Color:8>>} = file:read(PNG, 10), {ok, <<Compression:8, Filter:8, Interlace:8>>} = file:read(PNG, 3), file:close(PNG).

Page 20: Erlang otp   yuilop - ieee developer days 2013

Comportamientos - OTP

○ gen_server: servidores genéricos, actores base.

○ gen_fsm: máquinas de estados finitos.

○ gen_event: manejadores de eventos.

○ supervisor: supervisión de procesos.

○ application: estructura de aplicación.

Page 21: Erlang otp   yuilop - ieee developer days 2013

FSM-module(ascensor).-behaviour(gen_fsm).-compile([export_all]). % para simplificar, cambiar por -export(). start_link() -> gen_fsm:start_link({local, ?MODULE}, ?MODULE, [], []). init([]) -> {ok, planta_baja, []}. planta_baja(bajar, State) -> io:format("Beeep!, opcion incorrecta~n", []), {next_state, planta_baja, State};planta_baja(subir, State) -> io:format("Subiendo a la planta primera~n", []), {next_state, planta_primera, State}. planta_primera(bajar, State) -> io:format("Bajando a la planta baja~n", []), {next_state, planta_baja, State};planta_primera(subir, State) -> io:format("Subiendo a la planta segunda~n", []), {next_state, planta_segunda, State}. planta_segunda(bajar, State) -> io:format("Bajando a la planta primera~n", []), {next_state, planta_primera, State};planta_segunda(subir, State) -> io:format("Beeep!, opcion incorrecta~n", []), {next_state, planta_segunda, State}. % agregamos funciones para facilitar las llamadas% estas son opcionales: boton_subir() -> gen_fsm:send_event(?MODULE, subir). boton_bajar() -> gen_fsm:send_event(?MODULE, bajar).

Page 22: Erlang otp   yuilop - ieee developer days 2013

Apache vs Yaws

Page 23: Erlang otp   yuilop - ieee developer days 2013

Libros en inglés

Page 24: Erlang otp   yuilop - ieee developer days 2013

Libro en castellano

http://erlang.bosqueviejo.net

Page 25: Erlang otp   yuilop - ieee developer days 2013

¿Preguntas?

Page 26: Erlang otp   yuilop - ieee developer days 2013

Agradecimientos

○ IEEE sección España

○ Universidad Miguel Hernández

○ Yuilop