Erlang/OTPUn Mundo Concurrente
¿Quién soy?○ Programador desde los 12 años... unos 20 años programando en: Perl,Python, Ruby, PHP, Java, C/C++, JavaScript...
¿Qué es Yuilop?○ Mensajería Instantánea entre usuarios○ SMS a los que no son usuarios○ VoIP entre usuarios○ Llamadas a los...
¿Qué es Yuilop?
¿Qué es Erlang?○ Nació en 1986 como una extensión de Prolog en los laboratorios Ericsson.○ Lenguaje○ ¿Funcional o no? ... ...
Progresión Informática○ Carrera de los Hertzios vs CoresCuando estás en un atasco de tráfico con un Porsche, todo lo que p...
Caso○ En 2005, sistemas C++ y MySQL○ Máx. 80 usuarios concurrentes○ Crashes son muy frecuentes○ En 2006, sistemas C++, Pyt...
Caso
¿Quién usa Erlang?...
El camino de Yuilop○ Android y PHP (vía HTTP)○ Falta de instantaneidad en los mensajes○ Hace falta una gran infraestructur...
OOP vs Actor Model
OOP vs Actor Model
Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne ...
Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne ...
Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne ...
Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne ...
Características del Lenguaje○ Asignaciones únicas> A = 1.1> A = 2.** exception error: no match of right hand side value 2○...
Características del Lenguaje○ Capacidad numérica1> fact:fact(128).38562048236258042173567706592346364061749310959022359027...
Características del Lenguaje○ Matching> "Hola " ++ Quien = "Hola mundo!"."Hola mundo!"> Quien."mundo!"○ Conjuntos> A = [1,...
Comportamientos - OTP○ gen_server: servidores genéricos, actores base.○ gen_fsm: máquinas de estados finitos.○ gen_event: ...
FSM-module(ascensor).-behaviour(gen_fsm).-compile([export_all]). % para simplificar, cambiar por -export().start_link() ->...
Apache vs Yaws
Libros en inglés
Libro en castellanohttp://erlang.bosqueviejo.net
¿Preguntas?
Agradecimientos○ IEEE sección España○ Universidad Miguel Hernández○ Yuilop
Upcoming SlideShare
Loading in …5
×

Erlang otp yuilop - ieee developer days 2013

602 views

Published on

Presentación dictada en el IEEE Developer Days 2013 en la Universidad Miguel Hernández de Elche.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
602
On SlideShare
0
From Embeds
0
Number of Embeds
96
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Erlang otp yuilop - ieee developer days 2013

  1. 1. Erlang/OTPUn Mundo Concurrente
  2. 2. ¿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 yErlang.○ Administrador de sistemas desde los 22 años... unos 10 años administrandoWindows, GNU/Linux y BSD.○ En definitiva... DevOps.○ En Yuilop: Senior Core Server Developer.○ Contacto:○ Blog: http://bosqueviejo.net○ Twitter: @MRonErlang
  3. 3. ¿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:
  4. 4. ¿Qué es Yuilop?
  5. 5. ¿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
  6. 6. Progresión Informática○ Carrera de los Hertzios vs CoresCuando estás en un atasco de tráfico con un Porsche, todo lo que puedes hacer esconsumir más combustible que el resto estando parado. La escalabilidad va de construircarreteras 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.
  7. 7. 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
  8. 8. Caso
  9. 9. ¿Quién usa Erlang?...
  10. 10. 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
  11. 11. OOP vs Actor Model
  12. 12. OOP vs Actor Model
  13. 13. Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne StroustrupEjemplo típico del factorial
  14. 14. Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne StroustrupEjemplo típico del factorial (C)factorial(int f) {int i;for (i=f-1; i>1; i--) {f = f * i;}return f;}
  15. 15. Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne StroustrupEjemplo típico del factorial (C recursivo)factorial(int f) {if (f <= 1) {return f;}return f * factorial(f-1);}
  16. 16. Sintaxis de ErlangSolo hay dos tipos de lenguajes:aquellos de los que la gente se queja yaquellos que nadie usa.-- Bjarne StroustrupEjemplo típico del factorial (Erlang)factorial(0) -> 0;factorial(1) -> 1;factorial(N) -> N * factorial(N-1).
  17. 17. 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 of12 when is_integer(Value) -> "OK";_ -> "FAIL";end.○ Paso de mensajesPid = spawn(fun micode/0),Pid ! "hola mundo!",receiveAny -> io:format("OK")end.
  18. 18. Características del Lenguaje○ Capacidad numérica1> fact:fact(128).3856204823625804217356770659234636406174931095902235902788284032763734025751655435606861685885073615340300518330589163475921729322624988577661149552450393577600346447092792476924955852800000000000000000000000000000002> fact:fact(1024).541852879605885728307692194468385473800155396353801344448287027068321061207337660373314098413621458671907918845708980753931994165770187368260454133333721939108367528012764993769768292516937891165755680659663747947314518404886677672556125188694335251213677274521963430770133713205796248433128870088436171654690237518390452944732277808402932158722061853806162806063925435310822186848239287130261690914211362251144684713888587881629252104046295315949943900357882410243934315037444113890806181406210863953275235375885018598451582229599654558541242789130902486944298610923153307579131675745146436304024890820442907734561827369030502252796926553072967370990758747793127635104702469889667961462133026237158973227857814631807156427767644064591085076564783456324457736853810336981776080498707767046394272605341416779125697733374568037475186676265961665615884681450263337042522664141862157046825684773360944326737493676674915098953768112945831626643856479027816385730291542667725665642276826058264393884514911976419675509290208592713156362983290989441052732125187249527501314071676405516936190781821236701912295767363117054126589929916482008515781751955466910902838729232224509906388638147771255227782631322385756948819393658889908993670874516860653098...
  19. 19. 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).
  20. 20. 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.
  21. 21. 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).
  22. 22. Apache vs Yaws
  23. 23. Libros en inglés
  24. 24. Libro en castellanohttp://erlang.bosqueviejo.net
  25. 25. ¿Preguntas?
  26. 26. Agradecimientos○ IEEE sección España○ Universidad Miguel Hernández○ Yuilop

×