SlideShare a Scribd company logo
ELIXIR/PHOENIX
BUILD YOUR OWN
REAL-TIME WEB
SERVICE WITH
PRESENTED BY:
CHI-CHI EKWEOZOR
AT:
MANCHESTER LAMBDA LOUNGE
MON 17 OCT 2016
TODAY’S WEB:
Hundreds of millions of interconnected services
continuously exchanging data.
Reliability, concurrency, fault-tolerance, scalability,
all expected as the norm.
WHY ELIXIR?
WHY PHOENIX?
BUILDING REAL-TIME WEB SERVICES
ABOUT ME:
▸ Chi-chi Ekweozor (@thisischichi):
▸ Contract Software engineer - C/C++, PHP, JavaScript,
and now Elixir
▸ Previously a social media marketing consultant!
▸ Combined social media know how with Elixir/Phoenix to
create Assenty, a real-time Question & Answer tool for
event organisers.
INTENDED AUDIENCE:
This talk is intended for web developers with some
familiarity with functional programming concepts.
It is a high level overview of the Phoenix web
framework which is written in Elixir, a relatively new
functional programming language.
No prior experience with Elixir is required.
WE’LL COVER:
▸ Why Elixir?
▸ What is Phoenix?
▸ What are Phoenix Channels?
▸ How do they work?
▸ Assenty Live Demo: Phoenix Channels in Production
IS IT FUNCTIONAL?
WHY ELIXIR?
ELIXIR IS A DYNAMIC,
FUNCTIONAL LANGUAGE
DESIGNED FOR BUILDING …
elixir-lang.org
SCALABLE AND
MAINTAINABLE APPLICATIONS.
elixir-lang.org
ELIXIR LEVERAGES THE
ERLANG VM, KNOWN FOR
RUNNING LOW-LATENCY,
elixir-lang.org
DISTRIBUTED AND FAULT-
TOLERANT SYSTEMS, WHILE
ALSO BEING SUCCESSFULLY
elixir-lang.org
USED IN WEB DEVELOPMENT
AND THE EMBEDDED
SOFTWARE DOMAIN.
elixir-lang.org
Build Your Own Real-Time Web Service with Elixir Phoenix
ELIXIR’S
STRENGTHS:
WHY ELIXIR?
▸ An extensible and well-documented dynamic language
with Ruby-inspired syntax, undergirded by Erlang’s 30 year
old, tried and tested virtual machine known as BEAM
▸ In-built pattern matching and the pipe operator |> makes it
easy to work with and reason about immutable data
▸ Mix: an impressive tooling ecosystem that adds rock solid
libraries for authentication, metrics, crypto, embedded
systems support and much more
RATIONALE FOR CREATING ELIXIR:
“WHEN DESIGNING THE
ERLANG LANGUAGE AND THE
ERLANG VM,
José Valim, creator, Elixir
JOE, MIKE AND ROBERT DID
NOT AIM TO IMPLEMENT A
FUNCTIONAL PROGRAMMING
LANGUAGE,
José Valim, creator, Elixir
THEY WANTED A RUNTIME
WHERE THEY COULD BUILD
DISTRIBUTED, FAULT-
TOLERANT APPLICATIONS.
José Valim, creator, Elixir
IT JUST HAPPENED THAT THE
FOUNDATION FOR WRITING
SUCH SYSTEMS SHARE MANY
OF THE FUNCTIONAL
José Valim, creator, Elixir
PROGRAMMING PRINCIPLES.
AND IT REFLECTS IN BOTH
ERLANG AND ELIXIR.
José Valim, creator, Elixir
BENEFIT OF CODING IN ELIXIR:
AT LEAST TWO THINGS YOU STAND TO GAIN WITH ELIXIR:
▸ Because of data immutability, concurrency is a lot easier to
understand, and use:
▸ Your application or program will use all available cores
on your machine to function. It just does.
▸ A single function definition lets you define different
implementations depending on its arguments:
▸ Your application or program will be easier to modularise
and test.
WE’LL COVER:
▸ Why Elixir?
▸ What is Phoenix?
▸ What are Phoenix Channels?
▸ How do they work?
▸ Assenty Live Demo: Phoenix Channels in Production
IS IT REAL-TIME?
AND THIS PHOENIX?
INTRODUCING PHOENIX:
▸ Phoenix is a web development framework written in Elixir
which implements the server-side MVC pattern.
▸ Many of its components and concepts will seem familiar to
those of us with experience in other web frameworks like
Ruby on Rails or Python's Django.
▸ Phoenix is made up of a number of distinct parts, each
with its own purpose and role to play in building a web
application.
Excerpted from the Phoenix Framework Guides
ENDPOINT
PHOENIX FRAMEWORK COMPONENT:
HANDLES ALL ASPECTS OF
REQUESTS UP UNTIL THE POINT
WHERE THE ROUTER TAKES OVER
ROUTER
PHOENIX FRAMEWORK COMPONENT:
PARSES INCOMING REQUESTS AND
DISPATCHES THEM TO THE CORRECT
CONTROLLER/ACTION, PASSING
PARAMETERS AS NEEDED
MODELS
PHOENIX FRAMEWORK COMPONENT:
USES ECTO, AN ELIXIR FRAMEWORK
FOR PERSISTENCE TO READ AND
PERSIST DATA TO AN UNDERLYING
DATABASE
CONTROLLERS
PHOENIX FRAMEWORK COMPONENT:
PROVIDE FUNCTIONS,
CALLED ACTIONS, TO
HANDLE REQUESTS
VIEWS
PHOENIX FRAMEWORK COMPONENT:
RENDER TEMPLATES AND
ACT AS A PRESENTATION
LAYER
TEMPLATES
PHOENIX FRAMEWORK COMPONENT:
HTML FILES INTO WHICH WE
PASS DATA TO FORM
COMPLETE HTTP RESPONSES
CHANNELS
PHOENIX FRAMEWORK COMPONENT:
MANAGE (WEB) SOCKETS FOR
EASY REAL-TIME COMMUNICATION
PUBSUB
PHOENIX FRAMEWORK COMPONENT:
UNDERGIRDS THE CHANNEL
LAYER AND ALLOWS CLIENTS
TO SUBSCRIBE TO TOPICS
WE’LL COVER:
▸ Why Elixir?
▸ What is Phoenix?
▸ What are Phoenix Channels?
▸ How do they work?
▸ Assenty Live Demo: Phoenix Channels in Production
Build Your Own Real-Time Web Service with Elixir Phoenix
WHAT ARE PHOENIX CHANNELS?
▸ Channels are a really exciting and powerful part of
Phoenix that allow us to easily add soft real-time features
to our applications.
▸ Channels are based on a simple idea - sending and
receiving messages. Senders broadcast messages about
topics.
▸ Receivers subscribe to topics so that they can get those
messages. Senders and receivers can switch roles on the
same topic at any time.
Excerpted from the Phoenix Framework Guides
CHARACTERISTICS OF SOFT REAL-TIME SYSTEMS:
▸ You don’t have to hit every deadline, as opposed to the
case in hard real-time systems.
▸ Performance will degrade if too many are missed but
results are still valid after the deadline.
▸ Examples: airline reservation systems.
▸ Contrast with hard real-time systems where you must
absolutely hit every deadline. Examples: nuclear systems,
aircraft control systems, defence applications.
TRADITIONAL STATELESS REQUEST-RESPONSE MODEL:
Image taken from Programming Phoenix by Chris McCord, Bruce Tate, and José Valim
PHOENIX CHANNELS GIVE YOU STATEFUL CONVERSATIONS:
Image taken from Programming Phoenix by Chris McCord, Bruce Tate, and José Valim
A SINGLE CLIENT ON A PAGE
CONNECTS DIRECTLY WITH A
PROCESS ON THE SERVER…
Chris McCord, Phoenix creator
CALLED A CHANNEL.
Chris McCord, Phoenix creator
SINCE ELIXIR CAN SCALE TO
MILLIONS OF SIMULTANEOUS
PROCESSES THAT MANAGE
Chris McCord, Phoenix creator
MILLIONS OF CONCURRENT
CONNECTIONS, YOU DO NOT
HAVE TO RESORT TO THE …
Chris McCord, Phoenix creator
REQUEST/RESPONSE MODEL
TO MAKE THINGS EASY TO
SCALE OR EVEN MANAGE.
Chris McCord, Phoenix creator
A CLIENT CONNECTS TO A
CHANNEL AND THEN SENDS
AND RECEIVES MESSAGES.
Chris McCord, Phoenix creator
THAT’S IT.
Chris McCord, Phoenix creator
WHAT PHOENIX CHANNELS MAKE POSSIBLE:
▸ With Channels, neither senders nor receivers have to be
Elixir processes.
▸ They can be anything that we can teach to communicate
over a Channel - a JavaScript client, an iOS app, another
Phoenix application, our watch.
▸ Whereas request/response interactions are stateless,
conversations in a long-running process can be stateful.
Excerpted from the Phoenix Framework Guides
WE’LL COVER:
▸ Why Elixir?
▸ What is Phoenix?
▸ What are Phoenix channels?
▸ How do they work?
▸ Assenty Live Demo: Phoenix Channels in Production
WHAT’S INSIDE?
UNDERSTANDING PHOENIX CHANNELS
Build Your Own Real-Time Web Service with Elixir Phoenix
HOW DO PHOENIX CHANNELS WORK?
▸ A Phoenix channel is a conversation.
▸ The channel sends messages, receives messages, and
keeps state. We call the messages events.
▸ A Phoenix conversation is about a topic, and it maps onto
application concepts like a chat room, a game, or in
Assenty's case, the question board for an event.
Excerpted from Programming Phoenix by Chris McCord, Bruce Tate, and José Valim
BENEFIT OF USING PHOENIX CHANNELS:
▸ For sophisticated user interactions like interactive pages or
multiplayer games, you don’t have to work so hard to keep
track of the conversation by using cookies, databases, or
the like.
▸ Each call to a channel simply picks up where the last one
left off.
▸ A client establishes a new connection with a web socket.
That socket is transformed through the life of the
conversation with the server.
Excerpted from Programming Phoenix by Chris McCord, Bruce Tate, and José Valim
COMPONENTS OF
A PHOENIX
CHANNEL:
Build Your Own Real-Time Web Service with Elixir Phoenix
USER SOCKET
PHOENIX CHANNEL COMPONENT:
THIS MODULE SERVES AS
THE STARTING POINT FOR
ALL SOCKET CONNECTIONS
RESPONSIBLE FOR
AUTHENTICATING, IT ALSO
DEFINES THE TRANSPORT
LAYERS THAT WILL HANDLE
THE CONNECTION BETWEEN
THE CLIENT AND THE SERVER.
TOPIC
PHOENIX CHANNEL COMPONENT:
JUST AS A CONTROLLER
PASSES AN ID PARAMETER
TO REPRESENT A RESOURCE
FOR A CONTROLLER, WE
USE A TOPIC ID TO SCOPE
A CHANNEL CONNECTION.
WHEN CLIENTS JOIN A
CHANNEL, THEY MUST PROVIDE
A TOPIC. CLIENTS CAN JOIN
ANY NUMBER OF CHANNELS
AND ANY NUMBER OF
TOPICS ON A CHANNEL.
CHANNEL
PHOENIX CHANNEL COMPONENT:
THIS MODULE ALLOWS
CONNECTIONS AND LETS USERS
DISCONNECT AND SEND EVENTS
IT SUPPORTS 4 CALLBACKS:
JOIN(), HANDLE_IN(),
HANDLE_OUT(), HANDLE_INFO()
1. JOIN():
CLIENTS JOIN TOPICS ON
A CHANNEL
2. HANDLE_IN():
RECEIVES DIRECT
CHANNEL EVENTS
3. HANDLE_OUT():
INTERCEPTS BROADCAST
EVENTS
4. HANDLE_INFO():
RECEIVES PLATFORM (OTP)
MESSAGES
CLIENT LIBRARY
PHOENIX CHANNEL COMPONENT:
A CONSTRUCT THAT CAN
CONNECT DIRECTLY TO THE
SERVER
PHOENIX CURRENTLY
SHIPS WITH ITS OWN
JAVASCRIPT CLIENT.
IOS, ANDROID, AND C#
CLIENTS HAVE BEEN
RELEASED WITH PHOENIX 1.0.
YOUR CLIENT CODE
PHOENIX CHANNEL COMPONENT:
THIS JAVASCRIPT OBJECT ADDS REAL-TIME
FUNCTIONALITY TO YOUR APPLICATION BY
LISTENING FOR EVENTS GENERATED BY THE
CALLBACKS (JOIN(), HANDLE_* ETC) DEFINED
IN ELIXIR AND RESPONDING APPROPRIATELY.
WE’LL COVER:
▸ Why Elixir?
▸ What is Phoenix?
▸ What are Phoenix channels?
▸ How do they work?
▸ Assenty Live Demo: Phoenix Channels in Production
WHAT IS ASSENTY?
▸ Assenty is a real-time question and answer tool for event
organisers.
▸ Written in Elixir, and running on the Phoenix framework, it
provides a platform for capturing and persisting questions
posted to an event’s ‘question board’
▸ A question board is an online archive of questions and answers
discussed at a physical or virtual event.
▸ As each question and answer submitted to a question board is
persisted to the database, it is easily shared via social media.
PHOENIX CHANNELS LIVE DEMO:
▸ Visit the Question Board created during the live demo
▸ Thank you to all the participants!
THE END
THAT’S ALL FOLKS!
REFERENCES & RESOURCES
▸ Elixir website http://elixir-lang.org/
▸ On Functional Elixir http://blog.plataformatec.com.br/2016/05/
beyond-functional-programming-with-elixir-and-erlang/
▸ Elixir Guides http://elixir-lang.org/getting-started/
introduction.html
▸ Phoenix Overview http://www.phoenixframework.org/docs/
overview
▸ Erlang and Functional Programming link

More Related Content

PDF
How Elixir helped us scale our Video User Profile Service for the Olympics
PDF
Learn Elixir at Manchester Lambda Lounge
PDF
Phoenix for Rubyists
PPTX
From Ruby to Elixir
PDF
Erlang, LFE, Joxa and Elixir: Established and Emerging Languages in the Erlan...
PDF
Elixir – Peeking into Elixir's Processes, OTP and Supervisors
PDF
Concurrency, Robustness & Elixir SoCraTes 2015
PPTX
Architecting for Continuous Delivery
How Elixir helped us scale our Video User Profile Service for the Olympics
Learn Elixir at Manchester Lambda Lounge
Phoenix for Rubyists
From Ruby to Elixir
Erlang, LFE, Joxa and Elixir: Established and Emerging Languages in the Erlan...
Elixir – Peeking into Elixir's Processes, OTP and Supervisors
Concurrency, Robustness & Elixir SoCraTes 2015
Architecting for Continuous Delivery

What's hot (20)

PDF
Micro Service – The New Architecture Paradigm
PPTX
DDD loves Actor Model and Actor Model loves Elixir
PPTX
2600Hz - Least Cost Routing in the Cloud
PDF
Micro Services - Small is Beautiful
PDF
Microservice - All is Small, All is Well?
PPTX
Maintaining the Front Door to Netflix : The Netflix API
PDF
The Netflix API for a global service
PDF
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
PPTX
JakartaJS: Serverless in production
PDF
Manchester Expert Talks (April 2017) - Breaking Down Your Build: Architectura...
PPTX
Refactoring Organizations - A Netflix Study (QCon NYC 2017)
PDF
PDF
Micro Services - Smaller is Better?
PPTX
Chatbots with Serverless
PPTX
Exactly Once Delivery - Natan Silnitsky
PPTX
Idempotent REST APIs
PPTX
Maintaining the Netflix Front Door - Presentation at Intuit Meetup
PDF
Apache Kafka Core Concepts
PDF
Why docker@localhost is not even remotely near DevOps?
PPTX
Netflix Edge Engineering Open House Presentations - June 9, 2016
Micro Service – The New Architecture Paradigm
DDD loves Actor Model and Actor Model loves Elixir
2600Hz - Least Cost Routing in the Cloud
Micro Services - Small is Beautiful
Microservice - All is Small, All is Well?
Maintaining the Front Door to Netflix : The Netflix API
The Netflix API for a global service
Ransack, an Application Built on Ansible's API for Rackspace -- AnsibleFest N...
JakartaJS: Serverless in production
Manchester Expert Talks (April 2017) - Breaking Down Your Build: Architectura...
Refactoring Organizations - A Netflix Study (QCon NYC 2017)
Micro Services - Smaller is Better?
Chatbots with Serverless
Exactly Once Delivery - Natan Silnitsky
Idempotent REST APIs
Maintaining the Netflix Front Door - Presentation at Intuit Meetup
Apache Kafka Core Concepts
Why docker@localhost is not even remotely near DevOps?
Netflix Edge Engineering Open House Presentations - June 9, 2016
Ad

Viewers also liked (20)

PDF
Bottleneck in Elixir Application - Alexey Osipenko
PDF
Real World Elixir Deployment
PDF
Elixir & Phoenix 推坑
ODP
Elixir basics-2
PDF
Building Elixir App Release with Distillery and Docker
PDF
Intro to elixir and phoenix
PDF
Elixir - Easy fun for busy developers @ Devoxx 2016
PDF
Elixir and OTP
PDF
Brief Intro to Phoenix - Elixir Meetup at BukaLapak
PDF
Flow-based programming with Elixir
PDF
Flowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
PDF
Hello elixir (and otp)
PDF
Elixir intro
PDF
ITB2016 - Mixing up the front end with ColdBox elixir
PDF
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
PPTX
BioContainers on ELIXIR All Hands 2017
PDF
Big Data eBook
PDF
Spark as a distributed Scala
PPTX
ELIXIR Webinar: Introducing TeSS
PDF
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
Bottleneck in Elixir Application - Alexey Osipenko
Real World Elixir Deployment
Elixir & Phoenix 推坑
Elixir basics-2
Building Elixir App Release with Distillery and Docker
Intro to elixir and phoenix
Elixir - Easy fun for busy developers @ Devoxx 2016
Elixir and OTP
Brief Intro to Phoenix - Elixir Meetup at BukaLapak
Flow-based programming with Elixir
Flowex: Flow-Based Programming with Elixir GenStage - Anton Mishchuk
Hello elixir (and otp)
Elixir intro
ITB2016 - Mixing up the front end with ColdBox elixir
10 Billion a Day, 100 Milliseconds Per: Monitoring Real-Time Bidding at AdRoll
BioContainers on ELIXIR All Hands 2017
Big Data eBook
Spark as a distributed Scala
ELIXIR Webinar: Introducing TeSS
WEB MINING: PATTERN DISCOVERY ON THE WORLD WIDE WEB - 2011
Ad

Similar to Build Your Own Real-Time Web Service with Elixir Phoenix (20)

PDF
Introducing Cloud Native, Event Driven, Serverless, Micrsoservices Framework ...
PDF
FME Hub Unlocked: Your Guide to Sharing and Discovering Resources
PPT
The Anatomy of a Seriously Sophisticated AIR Application
PPTX
News scavenger a SharePoint and Apps Story
PDF
Mobile apps & Server Apis, the weak link? par Emanuele Pecorari
PDF
Open Source Software Business Model
PDF
Shipping and Shifting ~100 Apps with Docker EE
PDF
Introduction to (web) APIs - definitions, examples, concepts and trends
PDF
Scalable Microservices at Netflix. Challenges and Tools of the Trade
PPTX
Microservices and docker
PPT
Mq Lecture
PDF
Success Factors for a Mature Microservices Implementation
PPT
Developing Cross-platform Native Apps with Xamarin
PDF
Empowering Customer Centric NFV - by Sean Chen @ Openstack Summit Paris 2014
PDF
Fiat eco:Drive
PPTX
Cloud Services Powered by IBM SoftLayer and NetflixOSS
PDF
Heroku webcastdeck+20130828
PPTX
Surviving as a Monolith in a Microservices World - by Blair Olynyk, Hyperwallet
PPT
Fall2010 producer summit_openpbs_final
PPTX
PWAs overview
Introducing Cloud Native, Event Driven, Serverless, Micrsoservices Framework ...
FME Hub Unlocked: Your Guide to Sharing and Discovering Resources
The Anatomy of a Seriously Sophisticated AIR Application
News scavenger a SharePoint and Apps Story
Mobile apps & Server Apis, the weak link? par Emanuele Pecorari
Open Source Software Business Model
Shipping and Shifting ~100 Apps with Docker EE
Introduction to (web) APIs - definitions, examples, concepts and trends
Scalable Microservices at Netflix. Challenges and Tools of the Trade
Microservices and docker
Mq Lecture
Success Factors for a Mature Microservices Implementation
Developing Cross-platform Native Apps with Xamarin
Empowering Customer Centric NFV - by Sean Chen @ Openstack Summit Paris 2014
Fiat eco:Drive
Cloud Services Powered by IBM SoftLayer and NetflixOSS
Heroku webcastdeck+20130828
Surviving as a Monolith in a Microservices World - by Blair Olynyk, Hyperwallet
Fall2010 producer summit_openpbs_final
PWAs overview

More from Chi-chi Ekweozor (10)

PDF
Ladies that UX MCR - April 2017 - Lightning Talk
PPT
Manchester Social Media Surgery Events: an Introduction
PPT
The Web Is Your Oyster
PPT
WordCampUK 2009 - Building Audience And Community
PPT
7W7D Update June
PPT
The Importance Of Online Marketing
PPT
A Beginner's Guide to Social Media
PPT
Social Networking: How Can Your Business Benefit?
PPT
Online Film Distribution
PPT
The New Digital Marketing Mix: Breathe Creativity
Ladies that UX MCR - April 2017 - Lightning Talk
Manchester Social Media Surgery Events: an Introduction
The Web Is Your Oyster
WordCampUK 2009 - Building Audience And Community
7W7D Update June
The Importance Of Online Marketing
A Beginner's Guide to Social Media
Social Networking: How Can Your Business Benefit?
Online Film Distribution
The New Digital Marketing Mix: Breathe Creativity

Recently uploaded (20)

PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPTX
L1 - Introduction to python Backend.pptx
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
System and Network Administraation Chapter 3
PDF
Understanding Forklifts - TECH EHS Solution
PPTX
Introduction to Artificial Intelligence
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
AI in Product Development-omnex systems
PPTX
Essential Infomation Tech presentation.pptx
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
Nekopoi APK 2025 free lastest update
PDF
System and Network Administration Chapter 2
VVF-Customer-Presentation2025-Ver1.9.pptx
2025 Textile ERP Trends: SAP, Odoo & Oracle
L1 - Introduction to python Backend.pptx
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Wondershare Filmora 15 Crack With Activation Key [2025
System and Network Administraation Chapter 3
Understanding Forklifts - TECH EHS Solution
Introduction to Artificial Intelligence
Reimagine Home Health with the Power of Agentic AI​
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
How to Migrate SBCGlobal Email to Yahoo Easily
AI in Product Development-omnex systems
Essential Infomation Tech presentation.pptx
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PTS Company Brochure 2025 (1).pdf.......
Odoo Companies in India – Driving Business Transformation.pdf
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Nekopoi APK 2025 free lastest update
System and Network Administration Chapter 2

Build Your Own Real-Time Web Service with Elixir Phoenix