Slide 1

Slide 1 text

¡ B I E N V E N I D O S ! M Á Q U I N A V I R T U A L D E E R L A N G 1 A L I A S N O R B E R T O . O R T I G O Z A @ H I P H O O X

Slide 2

Slide 2 text

Objetivo • Entender los principales conceptos detrás de la Máquina Virtual de Erlang (BEAM) • Entender algunas de las diferencias entre la BEAM y otras máquinas virtuales (JVM, V8)

Slide 3

Slide 3 text

H I S T O R I A • Creada por Joe Armstrong, Robert Virding y Mike Williams • Primera versión, 1986 (Interprete de Prolog) • Segunda versión, 1988 (JAM) • Tercera versión, 1993 (BEAM) • Versión actual 18.0 3

Slide 4

Slide 4 text

¿ Q U É I N C L U Y E L A B E A M ? • Máquina virtual • Mecanismos para comunicarse con el mundo exterior • Ports y NIFs • Funciones inter construidas (BIFs) • No JIT 4

Slide 5

Slide 5 text

¿ P O R Q U É U S A R L A B E A M ? • Alta disponibilidad • Tolerancia a Fallos • Sistemas distribuidos • Escalabilidad 5

Slide 6

Slide 6 text

H O Y VA M O S A V E R • Procesos • Schedulers • Manejo de Memoria 6

Slide 7

Slide 7 text

Procesos

Slide 8

Slide 8 text

Para empezar, vamos a hablar de un sistema que es tolerante a fallos, distribuido, escalable y tiene alta disponibilidad.

Slide 9

Slide 9 text

Internet

Slide 10

Slide 10 text

¿Por qué Internet tiene estas propiedades?

Slide 11

Slide 11 text

11 Internet Computadora B Computadora C Mensajes Computadora A

Slide 12

Slide 12 text

• Cada computadora está aislada de las demás. • No comparten memoria u otros recursos. 12

Slide 13

Slide 13 text

13 Internet Computadora B Computadora C Mensajes Computadora A

Slide 14

Slide 14 text

14 Computadora A Proceso B Java App Proceso C Node.js App Mensajes Proceso A Erlang App

Slide 15

Slide 15 text

• Cada programa está aislado dentro de un proceso del Sistema Operativo. • No comparten memoria u otros recursos. 15

Slide 16

Slide 16 text

16 Computadora A Proceso B Java App Proceso C Erlang App Mensajes Proceso A Node.js App

Slide 17

Slide 17 text

17 Proceso A Node.js Tu código

Slide 18

Slide 18 text

☹ • Los Módulos, Clases, Paquetes no están aislados. • Todos ellos comparten la misma memoria y otros recursos. Si algo sale mal todo el proceso del SO se muere. 18

Slide 19

Slide 19 text

¿Cómo debería de ser?

Slide 20

Slide 20 text

20 Computadora A Proceso B Node.js App Proceso C Java App Mensajes Proceso A Erlang App

Slide 21

Slide 21 text

21 Erlang App Funcionalidad A Funcionalidad B Funcionalidad C Mensajes

Slide 22

Slide 22 text

¿Cómo se vería entonces desde afuera?

Slide 23

Slide 23 text

23 Computadora A Erlang Node Módulo Módulo Módulo Módulo Módulo Módulo Erlang Node Módulo Módulo Módulo Módulo Módulo Módulo Erlang Node Módulo Módulo Módulo Módulo Módulo Módulo

Slide 24

Slide 24 text

Internet 24

Slide 25

Slide 25 text

25

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Schedulers

Slide 28

Slide 28 text

28 Proceso del SO BEAM Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang

Slide 29

Slide 29 text

S C H E D U L E R S • La BEAM crea un Thread del SO por cada core en la máquina. • Un Scheduler utiliza un Thread del SO. • Cada Scheduler tiene colas de ejecución. • Cada scheduler maneja su propia memoria. 29

Slide 30

Slide 30 text

M Á Q U I N A V I RT U A L S C H E D U L E R S C H E D U L E R S C H E D U L E R S C H E D U L E R C P U O S T H R E A D C P U O S T H R E A D C P U O S T H R E A D C P U O S T H R E A D Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso

Slide 31

Slide 31 text

S C H E D U L E R S • Hacen balanceo de carga. • Controlan la ejecución de los procesos • Cada proceso es re encolado para ejecución después de 2000 reducciones (Un proceso no puede apropiarse del procesador y bloquear otros procesos) 31

Slide 32

Slide 32 text

Memoria

Slide 33

Slide 33 text

Erlang es muy eficiente

Slide 34

Slide 34 text

Process

Slide 35

Slide 35 text

M E M O R I A D E N T R O D E L A B E A M • Heap del proceso • Tablas de ETS • Tablas de Atomos (tamaño fijo) • Espacio para Binarios Grandes (> 64 bytes, Conteo de referencias) • Código • … 35

Slide 36

Slide 36 text

H E A P D E L P R O C E S O • Permite recolectar cada proceso de forma independiente. • El Colector de basura es más eficiente. • El Colector de basura es más simple (No es necesario implementar un colector en tiempo real: Azul) • Disminuye la necesidad de sincronización entre threads (Esto es mejor entre mayor sea al número de procesadores) 36

Slide 37

Slide 37 text

C O L E C T O R D E B A S U R A • Copying Collector • Generacional • 2 espacios o zonas: nueva y vieja • Datos nuevos son mantenidos en el espacio nuevo por un número determinado de colecciones, antes de pasar a la zona vieja. 37

Slide 38

Slide 38 text

Conclusiones

Slide 39

Slide 39 text

El diseño de la BEAM es diferente a otras VMs conocidas.

Slide 40

Slide 40 text

Su diseño está enfocado a aislamiento, tolerancia a fallos, baja latencia y alta disponibilidad

Slide 41

Slide 41 text

Erlang no es esencialmente difícil de aprender.

Slide 42

Slide 42 text

Los conceptos no son tan diferentes como inicialmente parecen.

Slide 43

Slide 43 text

43

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

¿Erlang Factory Lite 2016?

Slide 46

Slide 46 text

¿ElixirConf 2016?