Top Banner
1 Spotify Tech Web/iOS/Android/Native clients Service oriented architecture > 50 services in Java and Python Primarily using Cassandra for persistent storage 7,000 Servers in production ~500 in Engineers worldwide
39

Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

May 08, 2015

Download

Technology

Hakka Labs

Deployment issues surrounding the use of virtualenv within Debian packages at Spotify
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

1

Spotify Tech

Web/iOS/Android/Native clients Service oriented architecture > 50 services in Java and Python Primarily using Cassandra for persistent storage 7,000 Servers in production ~500 in Engineers worldwide

Page 2: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

2

Lost in the forest of dependency building

What have we been doing?

Page 3: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

3

Deploy via Debian Packages

Use Debian Stable repositories Package/Backport needed libraries as needed All Dependencies defined in Debian package Deployed via Puppet/Aptitude

Page 4: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

4

Package  

Mirroring  

Apps  

PyPi  

Page 5: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

5

Spending too much time managing dependencies and not enough building cool shit

What’s wrong with that?

Page 6: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

6

Using Debian Stable does not included latest and greatest

Page 7: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

7

Requires “Backporting” for newer libraries

Page 8: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

8

Does not used normal python packaging

Page 9: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

9

Limited use on developer systems

(or bad/duplicated information)

Page 10: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

10

Full rollback non-existent

Page 11: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

11

What you test is NOT what you deploy

Page 12: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

12

Dependency lock in due to sharing a common python environment

Page 13: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

13

Avoid duplication of effort

There MUST be a better way

Page 14: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

14

Increase stability and repeatability

There MUST be a better way

Page 15: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

15

Offer easy rollback

There MUST be a better way

Page 16: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

16

Scale

There MUST be a better way

Page 17: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

17

Deploying Python @ Scale

What about now?

Page 18: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

18

Enter Dh-viurtualenv

Page 19: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

19

Dh == Debian Helper

•  Registers itself as a Debian Helper •  Bundles the requirements in requirements.txt into virtual environment •  Deploys virtualenv into /usr/share/python/<package-name> •  Still requires native dependencies to be installed via packaging •  Just include the following in the debian/rules:

%:                                dh  $@  -­‐-­‐with  python-­‐virtualenv

Page 20: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

20

Virtualenv  

Mirroring  

Apps  

Pip  

Page 21: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

21

IT Works!

Page 22: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

22

Example: Using Sentry

Define Dependencies in requirements.txt

sentry[postgres]==6.2.0  eventlet==0.13.0  hiredis==0.1.1  django-­‐auth-­‐ldap==1.1.4

Page 23: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

23

Example: Using Sentry

Define Debian dependencies in control file

Build-Depends: python (>= 2.6.6-3~), debhelper (>= 8), dh-virtualenv, python-dev, libpq-dev, libldap2-dev, libsasl2-dev, Standards-Version: 3.9.3 X-Python-Version: >= 2.6

Page 24: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

24

Example: Using Sentry

Use dh_virtualenv in Debian rules file

%: dh $@ --with python-virtualenv

override_dh_virtualenv:

dh_virtualenv --index-url='http://localhost/simple'

Page 25: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

25

Have done this with RPMs as well (@ Amplify)

Within RPM build virtaulenv and mark it as relocatable:

/usr/local/bin/virtualenv --no-site-packages build_venv source build_venv/bin/activate env CFLAGS="$RPM_OPT_FLAGS" easy_install -Z . deactivate /usr/local/bin/virtualenv --relocatable build_venv

Page 26: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

26

Benefits

No longer stuck on Debian stable

Page 27: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

27

Benefits

No more backporting of new libraries or versions

Page 28: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

28

Benefits

Code isolation/use own dependencies

Page 29: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

29

Benefits

Single package rollback option

Page 30: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

30

Benefits

Development and Deployed systems using same cross-platform setup

Page 31: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

31

What’s Next?

Page 32: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

32

Not Sure…

Page 33: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

33

Dh_virtualenv now available (ironically) in Debian Unstable repositories

Page 34: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

34

Still requires managing native dependencies locally

Page 35: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

35

But experimenting with containers!

Page 36: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

36

Stay Tuned!

Page 37: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

37

Whitepaper: http://labs.spotify.com/2013/10/10/packaging-in-your-packaging-dh-virtualenv/ Code: https://github.com/spotify/dh-virtualenv

Thanks to Jyrki Pulliainen and Jim Whitehead @ Spotify Stockholm!

Page 38: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

38

Chris Angove, Chapter Lead - Backend Email: [email protected] Blog: http://labs.spotify.com/ Listen: https://play.spotify.com/

Questions?

Page 39: Deployment Tools and Techniques at Spotify: Virtualenv in debian by Chris Angove

January 24, 2014

Check out spotify.com/jobs or @Spotifyjobs for more information.

Want to join the band?