Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Abstract
●
“How we build a W.I.F.E.* system using Python”
– *Wireless In-Flight Entertainment
●
Main topics:
– 1) Product requirements
– 2) Architecture decisions
– 3) Atypical challenges
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Hi!
●
I'm David Arcos
●
Python/Django developer since 2008
●
Co-organizer of Python Barcelona
●
Lead engineer at Immfly
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Immfly
Private & Confidential
Immfly is a new Entertainment, Retail and
Communication platform for the in-flight
experience.
Focused on the European domestic flights
market, Immfly offers wireless content to
passengers via their Personal Electronic
Devices.
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
1) The product requirements
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
How does it work?
The passenger's device
(smartphone/tablet/laptop)
connects to the wif
(no internet!)
and opens the app
(web/android/ios)
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
What kind of services?
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
What kind of services?
●
Flight information
●
View TV Shows, videos
●
Read newspapers, magazines
●
Get guides, offers, deals
●
Etc...
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
But it's off-line
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
We need eventual connectivity
●
Update the contents
“I don't want yesterday's newspaper!”
●
Send “booking” actions to external APIs
●
Do payments
●
Send emails
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Ground mode
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Ground mode
●
Keep the experience after landing
●
Bring your contents with you
●
Get email confrmations
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
2) The Architecture
●
In the airplane:
– Frontend & Backend
– System services
– Hardware
●
In the datacenter:
– The "Hangar"
– Ingests
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Frontend apps
●
Web app:
●
Mobile apps:
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Backend API
●
“A powerful and
flexible toolkit
that makes it easy
to build Web APIs”
●
“The web
framework for
perfectionists
with deadlines”
●
“A widely used
general-purpose,
high-level
programming
language”
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
HTTP server
●
Monitor and
control:
– API
– daemons
– celery
●
WSGI Server●
Web Server
●
Static contents
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Databases
●
NoSQL data
– Cache, sessions
– Metrics, expirations
●
SQL data
– Django ORM
– Critical transactions
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Network
Fabric
– Initializing
– Other tasks
Ansible
– Deployment
– Confg
Management
– Pull mode
SSH
– Through VPN
– Hidden port
– PK Auth
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Hardware
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Wireless Access Points
●
3 WAPs per plane
●
Provide the WiFi
●
Isolated users
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Aircraft Server
●
Embedded computer
– Hardened, certifed
●
Xen with Ubuntu VMs
●
Internal 3G data card
●
Avionics bus
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Avionics data bus
● altitude
● flight_id
● ground_speed
● heading
● latitude
● longitude
● mach_speed
● outside_temperature
● pitch
● roll
● wind_speed
● yaw
We have access to this data, in real-time:
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Discrete-time signals
● DCFAILSIG
● ACFAILSIG
● OVERTEMPSIG
● GSM_POWER_STATUS
● ENB2SIG
● ENB1SIG
● ENB0SIG
● GSMSIG_STATUS
● CPLD_REV0
● CPLD_REV1
● SYSENSIG
● ENB3SIG
● ENB4SIG
● ENB5SIG
● ALERT
● CONFIGSIG0
● CONFIGSIG1
● CONFIGSIG2
● INTTEST_OUT
● INTTEST_IN
● ISO_OUT0
● ISO_OUT1
● ISO_OUT2
● ISO_OUT3
● GPIO_DCFAILSIG
● GPIO_ACFAILSIG
● GPIO_OVERTEMPSIG
● GPIO_SYSENSIG
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
The Hangar
●
Hosted in the Internet
●
Central point
●
Orchestrates the
operations
●
Update contents,
databases, code...
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Hangar Operations
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Resource ingest
●
Thousands of resources, from ~20 providers
– Per language
– Per country
– Per category: Videos, Readings, Deals...
●
Some external APIs are questionable:
– Missing SSL, Documentation...
– Manually updates to an ftp...
– Data in excel fles...
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Ingesting videos
●
Ingest from SFTP / AWS S3
●
Send to AWS ElasticTranscoder
– Convert to HLS
●
Sync chunk by chunk
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Ingesting reading
●
Ingest from SFTP / AWS S3
●
Celery task:
– Reduce size (image resolution)
– Generate thumbnails
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Ground mode
●
Similar to the “Aircraft” mode
●
Minor differences:
– No Videos (we don't have the permissions)
– More focus on destination offers
– Online functionality (like “forgot my password”)
●
Made to scale
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
3) Atypical challenges
●
Specifc perks of working with aircrafts
●
Dealing with airplanes has extra challenges
●
Problems we weren't expecting beforehand
●
Also, “mistakes where made”
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Regulations & Certifications
End of 2013, EASA allowed use of PEDs
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Certificate everything!
●
Had to certifcate every step
– The hardware was already certifed
– The WAPs were already certifed
– Lots of wireless tests
●
Even the smallest screw has to be certifed!
●
Took us 6-9 months!
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Certificate everything!
●
Had to certifcate every step
– The hardware was already certifed
– The WAPs were already certifed
– Lots of wireless tests
●
Even the smallest screw has to be certifed!
●
Took us 6-9 months!
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Intermittent connectivity
●
We get 30~90m of connectivity per day
– 10-15 minutes after each flight
●
Sometimes, roaming applies
– Limited synchro
●
Improve the deployment tools
●
Optimize the performance
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Hard shutdown
●
Electrical power is suddenly removed, and our
airplane server is turned off
●
Happens often:
– When changing power from engine to external,
after landing
– If there is a storm, or just if the pilot wishes
●
We could only mitigate...
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Mistake: trusted the hardware
●
File system corruption
– The HDD write buffer is sometimes lost
– Corrupted fles
– fsck at start
– sync after each deploy
– Added several consistency checks (for contents)
●
Internal clock corruption
– Logs showed wrong times
– Added NTP checks (requires connectivity)
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
The CAP Theorem
“It's impossible for a distributed system to
simultaneously provide all three:”
- Consistency
All nodes see the same data at the same time
- Availability
Guarantee that every request receives a response
- Partition tolerance
Continue to operate despite network partitioning
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Big mistake: try to beat the CAP
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Settled for “Eventual Consistency”
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Recap
●
Complex project with lots of features
– Kept a modular design
●
Could implement everything
– helped by existing Python libraries
●
Learned a lot from unexpected challenges
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Conclusions
●
Python made it possible!
●
Very versatile, covers all our use cases
●
“We stand on the shoulders of giants”
●
Developed in a short time
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Thanks for attending!
- Get the slides at http://slideshare.net/DZPM
- We're hiring! http://immfly.com/jobs
Python in the Sky – EuroPython 2015 David Arcos - @DZPM
Questions?

Python in the Sky

  • 1.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM
  • 2.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Abstract ● “How we build a W.I.F.E.* system using Python” – *Wireless In-Flight Entertainment ● Main topics: – 1) Product requirements – 2) Architecture decisions – 3) Atypical challenges
  • 3.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Hi! ● I'm David Arcos ● Python/Django developer since 2008 ● Co-organizer of Python Barcelona ● Lead engineer at Immfly
  • 4.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Immfly Private & Confidential Immfly is a new Entertainment, Retail and Communication platform for the in-flight experience. Focused on the European domestic flights market, Immfly offers wireless content to passengers via their Personal Electronic Devices.
  • 5.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM 1) The product requirements
  • 6.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM How does it work? The passenger's device (smartphone/tablet/laptop) connects to the wif (no internet!) and opens the app (web/android/ios)
  • 7.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM What kind of services?
  • 8.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM What kind of services? ● Flight information ● View TV Shows, videos ● Read newspapers, magazines ● Get guides, offers, deals ● Etc...
  • 9.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM But it's off-line
  • 10.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM We need eventual connectivity ● Update the contents “I don't want yesterday's newspaper!” ● Send “booking” actions to external APIs ● Do payments ● Send emails
  • 11.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Ground mode
  • 12.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Ground mode ● Keep the experience after landing ● Bring your contents with you ● Get email confrmations
  • 13.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM 2) The Architecture ● In the airplane: – Frontend & Backend – System services – Hardware ● In the datacenter: – The "Hangar" – Ingests
  • 14.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Frontend apps ● Web app: ● Mobile apps:
  • 15.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Backend API ● “A powerful and flexible toolkit that makes it easy to build Web APIs” ● “The web framework for perfectionists with deadlines” ● “A widely used general-purpose, high-level programming language”
  • 16.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM HTTP server ● Monitor and control: – API – daemons – celery ● WSGI Server● Web Server ● Static contents
  • 17.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Databases ● NoSQL data – Cache, sessions – Metrics, expirations ● SQL data – Django ORM – Critical transactions
  • 18.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Network Fabric – Initializing – Other tasks Ansible – Deployment – Confg Management – Pull mode SSH – Through VPN – Hidden port – PK Auth
  • 19.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Hardware
  • 20.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Wireless Access Points ● 3 WAPs per plane ● Provide the WiFi ● Isolated users
  • 21.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Aircraft Server ● Embedded computer – Hardened, certifed ● Xen with Ubuntu VMs ● Internal 3G data card ● Avionics bus
  • 22.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Avionics data bus ● altitude ● flight_id ● ground_speed ● heading ● latitude ● longitude ● mach_speed ● outside_temperature ● pitch ● roll ● wind_speed ● yaw We have access to this data, in real-time:
  • 23.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Discrete-time signals ● DCFAILSIG ● ACFAILSIG ● OVERTEMPSIG ● GSM_POWER_STATUS ● ENB2SIG ● ENB1SIG ● ENB0SIG ● GSMSIG_STATUS ● CPLD_REV0 ● CPLD_REV1 ● SYSENSIG ● ENB3SIG ● ENB4SIG ● ENB5SIG ● ALERT ● CONFIGSIG0 ● CONFIGSIG1 ● CONFIGSIG2 ● INTTEST_OUT ● INTTEST_IN ● ISO_OUT0 ● ISO_OUT1 ● ISO_OUT2 ● ISO_OUT3 ● GPIO_DCFAILSIG ● GPIO_ACFAILSIG ● GPIO_OVERTEMPSIG ● GPIO_SYSENSIG
  • 24.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM The Hangar ● Hosted in the Internet ● Central point ● Orchestrates the operations ● Update contents, databases, code...
  • 25.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Hangar Operations
  • 26.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Resource ingest ● Thousands of resources, from ~20 providers – Per language – Per country – Per category: Videos, Readings, Deals... ● Some external APIs are questionable: – Missing SSL, Documentation... – Manually updates to an ftp... – Data in excel fles...
  • 27.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Ingesting videos ● Ingest from SFTP / AWS S3 ● Send to AWS ElasticTranscoder – Convert to HLS ● Sync chunk by chunk
  • 28.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Ingesting reading ● Ingest from SFTP / AWS S3 ● Celery task: – Reduce size (image resolution) – Generate thumbnails
  • 29.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Ground mode ● Similar to the “Aircraft” mode ● Minor differences: – No Videos (we don't have the permissions) – More focus on destination offers – Online functionality (like “forgot my password”) ● Made to scale
  • 30.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM 3) Atypical challenges ● Specifc perks of working with aircrafts ● Dealing with airplanes has extra challenges ● Problems we weren't expecting beforehand ● Also, “mistakes where made”
  • 31.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Regulations & Certifications End of 2013, EASA allowed use of PEDs
  • 32.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Certificate everything! ● Had to certifcate every step – The hardware was already certifed – The WAPs were already certifed – Lots of wireless tests ● Even the smallest screw has to be certifed! ● Took us 6-9 months!
  • 33.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Certificate everything! ● Had to certifcate every step – The hardware was already certifed – The WAPs were already certifed – Lots of wireless tests ● Even the smallest screw has to be certifed! ● Took us 6-9 months!
  • 34.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Intermittent connectivity ● We get 30~90m of connectivity per day – 10-15 minutes after each flight ● Sometimes, roaming applies – Limited synchro ● Improve the deployment tools ● Optimize the performance
  • 35.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Hard shutdown ● Electrical power is suddenly removed, and our airplane server is turned off ● Happens often: – When changing power from engine to external, after landing – If there is a storm, or just if the pilot wishes ● We could only mitigate...
  • 36.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Mistake: trusted the hardware ● File system corruption – The HDD write buffer is sometimes lost – Corrupted fles – fsck at start – sync after each deploy – Added several consistency checks (for contents) ● Internal clock corruption – Logs showed wrong times – Added NTP checks (requires connectivity)
  • 37.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM The CAP Theorem “It's impossible for a distributed system to simultaneously provide all three:” - Consistency All nodes see the same data at the same time - Availability Guarantee that every request receives a response - Partition tolerance Continue to operate despite network partitioning
  • 38.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Big mistake: try to beat the CAP
  • 39.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Settled for “Eventual Consistency”
  • 40.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Recap ● Complex project with lots of features – Kept a modular design ● Could implement everything – helped by existing Python libraries ● Learned a lot from unexpected challenges
  • 41.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Conclusions ● Python made it possible! ● Very versatile, covers all our use cases ● “We stand on the shoulders of giants” ● Developed in a short time
  • 42.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Thanks for attending! - Get the slides at http://slideshare.net/DZPM - We're hiring! http://immfly.com/jobs
  • 43.
    Python in theSky – EuroPython 2015 David Arcos - @DZPM Questions?