astricon 2016 - scaling ari and production
TRANSCRIPT
![Page 1: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/1.jpg)
ARI Scaling & Production
Dan Jenkins
@dan_jenkins
![Page 2: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/2.jpg)
Dan Jenkins
@dan_jenkins
5th Astricon!
Author of node-asterisk-ami package on github/npm
Lego
![Page 3: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/3.jpg)
Google Developer Expert
Web Technologies GDE
@dan_jenkins
![Page 4: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/4.jpg)
Real Time Communications Consultancy
@nimbleapeltd
![Page 5: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/5.jpg)
I've become fairly well known to use lego images
in my slide decks...
@dan_jenkins
![Page 6: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/6.jpg)
They're interesting
@dan_jenkins
![Page 7: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/7.jpg)
And I ♥ Lego.
@dan_jenkins
![Page 8: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/8.jpg)
So its Lego time!
@dan_jenkins
![Page 9: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/9.jpg)
A tale of two parts
![Page 10: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/10.jpg)
Scaling ARI
@dan_jenkins
![Page 11: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/11.jpg)
Scaling is how we handle traffic to and from Asterisk via the ARI interface in a way
that we can support load
@dan_jenkins
![Page 12: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/12.jpg)
Production
@dan_jenkins
![Page 13: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/13.jpg)
How to architect your ARI app for running in
production, failing over, monitoring and reporting
@dan_jenkins
![Page 14: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/14.jpg)
Who knows of the ARI?
@dan_jenkins
![Page 15: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/15.jpg)
Who's built something with the ARI?
@dan_jenkins
![Page 16: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/16.jpg)
Who's deployed an ARI app to production?
@dan_jenkins
![Page 17: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/17.jpg)
Lets deconstruct how things work with the other Asterisk interfaces...
@dan_jenkins
![Page 18: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/18.jpg)
Built in Dialplan Applications
app_queue app_dial
app_*
@dan_jenkins
![Page 19: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/19.jpg)
Built in, no thought needed. Contributors have sorted
everything...right?
@dan_jenkins
![Page 20: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/20.jpg)
AMIAsterisk Manager Interface
@dan_jenkins
![Page 21: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/21.jpg)
TCP connection to Asterisk
@dan_jenkins
![Page 22: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/22.jpg)
Build something to scale AMI yourself
@dan_jenkins
![Page 23: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/23.jpg)
Asterisk
@dan_jenkins
![Page 24: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/24.jpg)
Asterisk
@dan_jenkins
![Page 25: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/25.jpg)
AMI Proxy
https://github.com/davetroy/astmanproxy
@dan_jenkins
![Page 26: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/26.jpg)
AstMan Proxy
Asterisk Asterisk Asterisk
@dan_jenkins
![Page 27: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/27.jpg)
(Fast)AGI
Asterisk Gateway Interface
@dan_jenkins
![Page 28: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/28.jpg)
AGI adds processes to our Asterisk
instance
Making our Asterisk instance busier
@dan_jenkins
![Page 29: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/29.jpg)
Asterisk Asterisk Asterisk
@dan_jenkins
![Page 30: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/30.jpg)
FastAGI allowed a TCP call out to something,
somewhere else
@dan_jenkins
![Page 31: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/31.jpg)
You can load balance these calls out using a
TCP Proxy
@dan_jenkins
![Page 32: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/32.jpg)
TCP Load Balancer
Asterisk Asterisk Asterisk
@dan_jenkins
![Page 33: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/33.jpg)
But there are reasons I love the ARI compared to AMI and AGI
@dan_jenkins
![Page 34: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/34.jpg)
It does greatthings with minimal
fuss and issue@dan_jenkins
![Page 35: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/35.jpg)
It does things "the Web" way
@dan_jenkins
![Page 36: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/36.jpg)
Thank you Asterisk Team!
@dan_jenkins
![Page 37: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/37.jpg)
Before we look at how to scale the ARI, we need to understand
what it is
@dan_jenkins
![Page 38: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/38.jpg)
What makes up the ARI?
@dan_jenkins
![Page 39: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/39.jpg)
Dialplan
Its beautiful isn't it? 4 lines. That's it!
(It would be better without the Dialplan)
[Astricon] exten = 100,1,Verbose(1, "Astricon call, woot") same = n,Stasis(dangerous-demos) same = n,Hangup()
@dan_jenkins
![Page 40: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/40.jpg)
HTTP Interface and a Websocket for Events
@dan_jenkins
![Page 41: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/41.jpg)
HTTP
curl -v -u asterisk:asterisk -X POST "http://localhost:8088/ari/channels/1400609726.3/
play?media=sound:hello-world"
@dan_jenkins
![Page 42: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/42.jpg)
Websocket{ "application":"hello-world", "type":"StasisStart", "timestamp":"2014-05-20T13:15:27.131-0500", "args":[], "channel":{ "id":"1400609726.3", "state":"Up", "name":"PJSIP/1000-00000001", "caller":{ "name":"", "number":""}, "connected":{ "name":"", "number":""}, "accountcode":"", "dialplan":{ "context":"default", "exten":"1000", "priority":3}, "creationtime":"2014-05-20T13:15:26.628-0500"} }
@dan_jenkins
![Page 43: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/43.jpg)
Call sessions from Asterisk are tied to a Websocket session
@dan_jenkins
![Page 44: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/44.jpg)
Writing your ARI app for Production
@dan_jenkins
![Page 45: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/45.jpg)
With Dialplan Applications we don't
need to care about latency or load
@dan_jenkins
![Page 46: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/46.jpg)
If Asterisk couldn't cope, then you've got bigger
issues.
@dan_jenkins
![Page 47: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/47.jpg)
In attempt to fix that, you'd put Asterisk on a bigger
box
@dan_jenkins
![Page 48: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/48.jpg)
Or spin up another and put it behind a SIP proxy or
something
@dan_jenkins
![Page 49: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/49.jpg)
Its kinda an already solved problem
@dan_jenkins
![Page 50: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/50.jpg)
But writing external applications to Asterisk is
a different ball game.
@dan_jenkins
![Page 51: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/51.jpg)
More moving parts.
@dan_jenkins
![Page 52: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/52.jpg)
More connected services.
@dan_jenkins
![Page 53: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/53.jpg)
More to monitor.
@dan_jenkins
![Page 54: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/54.jpg)
VoIP infrastructure grows into a Service Oriented
Architecture
@dan_jenkins
![Page 55: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/55.jpg)
Where Asterisk is just a small part of it.
@dan_jenkins
![Page 56: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/56.jpg)
So what do we need to care about when building
& deploying your ARI app?
@dan_jenkins
![Page 57: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/57.jpg)
Latency
@dan_jenkins
![Page 58: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/58.jpg)
Don't put your ARI app too far away
@dan_jenkins
![Page 59: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/59.jpg)
Its not like a normal API being consumed.
@dan_jenkins
![Page 60: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/60.jpg)
Making decisions and informing Asterisk of them shouldn't be hundreds of
milliseconds away
@dan_jenkins
![Page 61: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/61.jpg)
Make your app do your thing
@dan_jenkins
![Page 62: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/62.jpg)
Conference engine with your feature set
@dan_jenkins
![Page 63: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/63.jpg)
Outbound Dialer via your Customer API/
CRM
@dan_jenkins
![Page 64: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/64.jpg)
Your specific idea.
@dan_jenkins
![Page 65: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/65.jpg)
Your specific issue.
@dan_jenkins
![Page 66: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/66.jpg)
Don't aim to replace app_dial / app_queue /
app_voicemail / *
@dan_jenkins
![Page 67: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/67.jpg)
Do your thang!
@dan_jenkins
![Page 68: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/68.jpg)
Logging
@dan_jenkins
![Page 69: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/69.jpg)
Log out data that is useful.
@dan_jenkins
![Page 70: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/70.jpg)
Pipe that data to a centralised place
The ELK Stack for example
(Elasticserch | Logstash | Kibana)
@dan_jenkins
![Page 71: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/71.jpg)
Think of future you reading the logs.
Are they useful?
@dan_jenkins
![Page 72: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/72.jpg)
Metrics
@dan_jenkins
![Page 73: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/73.jpg)
Send stats out of your application
StatsD - data points specific to your application
@dan_jenkins
![Page 74: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/74.jpg)
And then graph and utilise them
(Telegraf | InfluxDB | Grafana)
@dan_jenkins
![Page 75: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/75.jpg)
Inter process communication
@dan_jenkins
![Page 76: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/76.jpg)
Does your app need to talk to other apps serving the
same ARI app name?
@dan_jenkins
![Page 77: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/77.jpg)
Got a call on another Asterisk/ARI app and need
to terminate it?
@dan_jenkins
![Page 78: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/78.jpg)
How do you tell that other App to terminate the call?
@dan_jenkins
![Page 79: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/79.jpg)
Scaling
@dan_jenkins
![Page 80: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/80.jpg)
Lets take a step away from Asterisk
@dan_jenkins
![Page 81: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/81.jpg)
Deploying and scaling a HTTP Service in
Production
@dan_jenkins
![Page 82: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/82.jpg)
HTTP Proxy/Load Balancer
HTTP Service
HTTP Service
HTTP Service
@dan_jenkins
![Page 83: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/83.jpg)
Deploying a service that communicates
with an API
@dan_jenkins
![Page 84: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/84.jpg)
Consuming HTTP Based API
@dan_jenkins
![Page 85: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/85.jpg)
HTTP Proxy/Load Balancer
External API
External API
External API
@dan_jenkins
![Page 86: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/86.jpg)
Consuming Websocket Event API
@dan_jenkins
![Page 87: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/87.jpg)
HTTP/TCP Proxy/Load Balancer
External API
External API
External API
@dan_jenkins
![Page 88: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/88.jpg)
They all have a load balancer
@dan_jenkins
![Page 89: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/89.jpg)
If there is state involved then the application deals
with that
@dan_jenkins
![Page 90: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/90.jpg)
Back to Asterisk
@dan_jenkins
![Page 91: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/91.jpg)
The ARI Websocket is tied to one or many
Stasis/ARI Apps
@dan_jenkins
![Page 92: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/92.jpg)
You can't have multiple Websockets tied to one Asterisk using the same
App name
@dan_jenkins
![Page 93: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/93.jpg)
Asterisk
Stasis App Name "hello-world"
@dan_jenkins
![Page 94: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/94.jpg)
Asterisk
Stasis App Name "hello-world"
@dan_jenkins
![Page 95: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/95.jpg)
Each Asterisk can only handle 1
Websocket per App Name
@dan_jenkins
![Page 96: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/96.jpg)
You can have one web socket handle
multiple app names
@dan_jenkins
![Page 97: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/97.jpg)
For example, a conferencing ARI App
@dan_jenkins
![Page 98: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/98.jpg)
Simple 1 Asterisk and 1 ARI App
@dan_jenkins
![Page 99: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/99.jpg)
Asterisk
Stasis App Name "conferencing"
@dan_jenkins
![Page 100: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/100.jpg)
Pros and Cons
Pros Cons
• Simple • Doesn't scale• You lose all your calls when
your app fails
@dan_jenkins
![Page 101: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/101.jpg)
Not so simple 2 Asterisk and 1 ARI App
@dan_jenkins
![Page 102: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/102.jpg)
AsteriskAsterisk
Stasis App Name "conferencing"
@dan_jenkins
![Page 103: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/103.jpg)
Pros and Cons
Pros Cons
• Can potentially handle more calls than a single Asterisk
• Doesn't scale• You lose all your calls when
your app fails• There will eventually be a
bottleneck in your application
@dan_jenkins
![Page 104: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/104.jpg)
ComplexMultiple Asterisk &
Multiple Process (1:1)
@dan_jenkins
![Page 105: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/105.jpg)
AsteriskAsteriskAsteriskAsterisk
Stasis App Name "conferencing"
@dan_jenkins
![Page 106: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/106.jpg)
Pros and Cons
Pros Cons
• Fairly simple • You lose all calls on that Asterisk when your app fails
• Nightmare configuring it• Not flexible
@dan_jenkins
![Page 107: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/107.jpg)
Really Complex1 Asterisk & Multiple Processes(through some dial plan magic)
@dan_jenkins
![Page 108: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/108.jpg)
Asterisk
Stasis App Names
"conferencingA" "conferencingB" "conferencingC" "conferencingD"
@dan_jenkins
![Page 109: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/109.jpg)
Pros and Cons
Pros Cons
• There are none • Complicated to maintain in your Dialpan
• If Asterisk dies, you lose all your calls
@dan_jenkins
![Page 110: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/110.jpg)
Add in Automated infrastructure and you've got a mess
@dan_jenkins
![Page 111: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/111.jpg)
AsteriskAsteriskAsteriskAsterisk
Stasis App Names
"conferencingA" ...
"conferencingZ"
Asterisk
@dan_jenkins
![Page 112: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/112.jpg)
AsteriskAsteriskAsteriskAsterisk
Stasis App Names
"conferencingA" ...
"conferencingZ"
Asterisk
@dan_jenkins
![Page 113: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/113.jpg)
Pros and Cons
Pros Cons
• There are none • Complicated to maintain in your Dialpan
• If Asterisk dies, you lose all your calls
• A huge mess
@dan_jenkins
![Page 114: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/114.jpg)
So how do we scale?
@dan_jenkins
![Page 115: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/115.jpg)
So how do we scale easily?
@dan_jenkins
![Page 116: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/116.jpg)
Quite simply, today, there is only one way.
@dan_jenkins
![Page 117: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/117.jpg)
ARI Proxy & Message Bus
@dan_jenkins
![Page 118: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/118.jpg)
2 ARI Proxies Available
Both support the same Message Bus Message format (https://github.com/nvisibleinc/go-ari-library/wiki/Message-Format)
@dan_jenkins
![Page 119: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/119.jpg)
Message Bus
RabbitMQ
NATS (Go Proxy only)
@dan_jenkins
![Page 120: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/120.jpg)
AsteriskAsteriskAsteriskAsterisk
Stasis App Name "conferencing"Message Bus
Proxy Proxy Proxy Proxy
*n
*n
@dan_jenkins
![Page 121: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/121.jpg)
Libraries that support it
Go
.Net
Soon Node.js
@dan_jenkins
![Page 122: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/122.jpg)
Libraries that support itGo
.Net
Soon Node.js
What library do you use? PHPARI? ari4java?
@dan_jenkins
![Page 123: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/123.jpg)
We need better library support
@dan_jenkins
![Page 124: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/124.jpg)
None of this is perfect
@dan_jenkins
![Page 125: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/125.jpg)
I wish Asterisk gave us a way of easily scaling with ARI
@dan_jenkins
![Page 126: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/126.jpg)
We talked about it at AstriDevCon this year
@dan_jenkins
![Page 127: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/127.jpg)
Should Asterisk do this or should an external
Proxy do it?
@dan_jenkins
![Page 128: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/128.jpg)
I'm not sure.
(And I was the one who brought it up)
@dan_jenkins
![Page 129: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/129.jpg)
Building with ARI is more complicated
than "Using Asterisk"@dan_jenkins
![Page 130: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/130.jpg)
But that's no different to learning how to ride your bikewithout stabilisers
@dan_jenkins
![Page 131: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/131.jpg)
And you don't ride your bike with stabilisers any more do you?
@dan_jenkins
![Page 132: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/132.jpg)
Its time to get on the bike and start peddling
@dan_jenkins
![Page 133: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/133.jpg)
And hope you don't fall off
@dan_jenkins
![Page 134: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/134.jpg)
But if you do, just get back up and try again
@dan_jenkins
![Page 136: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/136.jpg)
Come see Dangerous Demos Later!
![Page 137: Astricon 2016 - Scaling ARI and Production](https://reader033.vdocument.in/reader033/viewer/2022052207/5879257a1a28abf13a8b8037/html5/thumbnails/137.jpg)
https://upload.wikimedia.org/wikipedia/commons/2/21/250_365_-_Bricks_(4247555680).jpg
https://www.flickr.com/photos/clement127/ (Huge thank you to clement127 for all their pictures over the years)
https://en.wikipedia.org/wiki/Lego#/media/File:LEGO_Building_At_KSC.jpg
https://www.flickr.com/photos/kalexanderson/8145886918
https://c2.staticflickr.com/8/7482/15936739285_460b008ec5_b.jpg
https://www.flickr.com/photos/arul72/23816127556
https://www.flickr.com/photos/kalexanderson/6101914287