alta disponibilidad con erlang/elixir - norberto ortigoza

39
High Availability with Erlang/Elixir Norberto Ortigoza @hiphoox

Upload: software-guru

Post on 11-May-2015

330 views

Category:

Software


4 download

DESCRIPTION

Norberto Ortigoza es instructor para América Latina por parte de Big Nerd Ranch, la empresa de cursos para iOS más importante del mundo. Es Director de Desarrollo en Diverza y co-fundador del grupo Cocoaheads en el Distrito Federal dirigido a desarrolladores en OSX y iOS. También es instructor oficial de Rubymotion. Ha sido programador por más de 20 años, donde ha empleado Sistemas operativos y lenguajes como NeXT, OSX, Solaris, Windows, Smalltalk, Objective-C, C, Java, C#, Ruby, PHP, Python, Perl y en los últimos días Elixir y Go. Ha impartido cursos de desarrollo en India, USA, Colombia, Bélgica y México. Es Ingeniero en Computación por parte de la Facultad de Ingeniería de la UNAM. Tiene estudios de Maestría en Ciencias de la Computación por la UNAM. Diplomado en Procesos y Arquitectura de Software por parte del SEI - Carnegie Mellon University.

TRANSCRIPT

Page 1: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

High Availability with Erlang/Elixir

Norberto Ortigoza @hiphoox

Page 2: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Availability: state of being possible to get or use

Page 3: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Server Server Server

Cluster

Page 4: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Server

App Server App Server App Server

Page 5: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Operating System

Process A Process B Process C

Page 6: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

System

Micro service Micro Service Micro Service

Page 7: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Isolation

Page 8: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

–Alan Kay on the Meaning of “Object-Oriented Programming”

“OOP to me means only messaging, local retention and protection and

hiding of state-process, and extreme late-binding of all things..”

Page 9: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Erlang has lightweight processes

Page 10: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Process

Page 11: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Erlang has messaging

Page 12: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza
Page 13: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Erlang has live code upgrade

Page 14: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza
Page 15: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

An Operating System on its own

Page 16: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza
Page 17: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

So, What do we do when we detect an error?

Page 18: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Let it crash!

Page 19: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

How?

Page 20: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Detect and know why it crashed

Page 21: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Process A Process BMonitor

Page 22: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Process A Process BLink

Page 23: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Supervision Trees

Page 24: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Application

App

Supervisor

Worker Worker Worker

Page 25: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Application

App

Supervisor

Worker Worker Worker

Application

App

Supervisor

Worker Worker Worker

Page 26: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Client

App

Supervisor

Worker Worker Worker

Server

App

Supervisor

Worker Worker Worker

Server

App

Supervisor

Worker Worker Worker

BEAM

Page 27: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

BEAM

Client Client Client Client

Client Client Client Client

Page 28: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

262,144 process default limite, scales to

millions

Page 29: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza
Page 30: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Open Telecom Platform (OTP)

Page 31: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

GenServer GenEvent Supervisor Application Agent Task Elixir

Page 32: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Fault tolerance implies scalability

Page 33: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

To make things fault-tolerant we have to make sure they are

made from isolated components

Page 34: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

If the components are isolated they can run in

parallel

Page 35: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Things that are isolated and can run in parallel

are scalable!

Page 36: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

Elixir

Page 37: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

defmodule Hello do IO.puts "Defining the function world"

def world do IO.puts "Hello World" end

IO.puts "Function world defined"end

Hello.world

Page 38: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

References

• http://www.infoq.com/presentations/Building-Highly-Available-Systems-in-Erlang

• http://www.infoq.com/presentations/self-heal-scalable-system

• http://www.infoq.com/presentations/fault-tolerance-101-qcon-london

Page 39: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza

39