deployment tools and techniques at spotify: virtualenv in debian by chris angove

39
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

Upload: hakka-labs

Post on 08-May-2015

5.585 views

Category:

Technology


1 download

DESCRIPTION

Deployment issues surrounding the use of virtualenv within Debian packages at Spotify

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?