alta disponibilidad con erlang/elixir - norberto ortigoza
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](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/1.jpg)
High Availability with Erlang/Elixir
Norberto Ortigoza @hiphoox
![Page 2: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/2.jpg)
Availability: state of being possible to get or use
![Page 3: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/3.jpg)
Server Server Server
Cluster
![Page 4: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/4.jpg)
Server
App Server App Server App Server
![Page 5: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/5.jpg)
Operating System
Process A Process B Process C
![Page 6: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/6.jpg)
System
Micro service Micro Service Micro Service
![Page 7: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/7.jpg)
Isolation
![Page 8: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/8.jpg)
–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](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/9.jpg)
Erlang has lightweight processes
![Page 10: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/10.jpg)
Process
![Page 11: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/11.jpg)
Erlang has messaging
![Page 12: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/12.jpg)
![Page 13: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/13.jpg)
Erlang has live code upgrade
![Page 14: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/14.jpg)
![Page 15: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/15.jpg)
An Operating System on its own
![Page 16: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/16.jpg)
![Page 17: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/17.jpg)
So, What do we do when we detect an error?
![Page 18: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/18.jpg)
Let it crash!
![Page 19: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/19.jpg)
How?
![Page 20: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/20.jpg)
Detect and know why it crashed
![Page 21: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/21.jpg)
Process A Process BMonitor
![Page 22: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/22.jpg)
Process A Process BLink
![Page 23: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/23.jpg)
Supervision Trees
![Page 24: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/24.jpg)
Application
App
Supervisor
Worker Worker Worker
![Page 25: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/25.jpg)
Application
App
Supervisor
Worker Worker Worker
Application
App
Supervisor
Worker Worker Worker
![Page 26: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/27.jpg)
BEAM
Client Client Client Client
Client Client Client Client
![Page 28: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/28.jpg)
262,144 process default limite, scales to
millions
![Page 29: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/29.jpg)
![Page 30: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/30.jpg)
Open Telecom Platform (OTP)
![Page 31: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/31.jpg)
GenServer GenEvent Supervisor Application Agent Task Elixir
![Page 32: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/32.jpg)
Fault tolerance implies scalability
![Page 33: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/34.jpg)
If the components are isolated they can run in
parallel
![Page 35: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/35.jpg)
Things that are isolated and can run in parallel
are scalable!
![Page 36: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/36.jpg)
Elixir
![Page 37: Alta disponibilidad con Erlang/Elixir - Norberto Ortigoza](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052303/554fafb1b4c905ad218b5193/html5/thumbnails/39.jpg)
39