Content Delivery - in a DevOps World

52
1 Leif Hedstrom Content Delivery - in a DevOps World Chief Architect, Cisco Cloud Services July 8, 2012

description

Content Delivery - in a DevOps World. Leif Hedstrom. Chief Architect, Cisco Cloud Services. July 8, 2012. One of the drivers to Open S ource Traffic Server Committer for Apache Traffic Server VP of Apache Traffic Server PMC ASF member Chief Architect, Cisco Cloud Services - PowerPoint PPT Presentation

Transcript of Content Delivery - in a DevOps World

Page 1: Content Delivery -  in a  DevOps  World

1

Leif Hedstrom

Content Delivery- in a DevOps World

Chief Architect, Cisco Cloud Services

July 8, 2012

Page 2: Content Delivery -  in a  DevOps  World

2

Who am I?• One of the drivers to Open Source Traffic Server• Committer for Apache Traffic Server• VP of Apache Traffic Server PMC• ASF member• Chief Architect, Cisco Cloud Services

[email protected]

[email protected]

@zwoop

+zwoop

Page 3: Content Delivery -  in a  DevOps  World

3

Why DevOps? A short story

Page 4: Content Delivery -  in a  DevOps  World

4

It’s a disaster!

http://www.flickr.com/photos/historyinanhour/4775644390/

Page 5: Content Delivery -  in a  DevOps  World

5

Smart people trying to figure it out…

Page 6: Content Delivery -  in a  DevOps  World

6

Still a disaster, oh the humanity!

http://www.flickr.com/photos/historyinanhour/4775644390/

Page 7: Content Delivery -  in a  DevOps  World

7

In the mean time …

http://people.apache.org/~weijin/weijin.jpg

Page 8: Content Delivery -  in a  DevOps  World

8

Small fix, big results

index 30ed932..b74defa 100644--- a/iocore/net/UnixNetVConnection.cc+++ b/iocore/net/UnixNetVConnection.cc@@ -574,6 +574,9 @@ UnixNetVConnection::do_io_close(int alerrno /* = -1 */ ) write.vio.nbytes = 0; write.vio.op = VIO::NONE; + EThread *t = this_ethread();+ bool close_inline = !recursion && nh->mutex->thread_holding == t;+ INK_WRITE_MEMORY_BARRIER; if (alerrno && alerrno != -1) this->lerrno = alerrno;@@ -582,11 +585,8 @@ UnixNetVConnection::do_io_close(int alerrno /* = -1 */ ) else closed = -1; - if (!recursion) {- EThread *t = this_ethread();- if (nh->mutex->thread_holding == t)- close_UnixNetVConnection(this, t);- }+ if (close_inline)+ close_UnixNetVConnection(this, t); }

Page 9: Content Delivery -  in a  DevOps  World

9

I’m happy!

http://www.flickr.com/photos/mhedstrom/6763754839/

Page 10: Content Delivery -  in a  DevOps  World

10

DevOps reward (well, maybe … )

Page 11: Content Delivery -  in a  DevOps  World

11

So what is DevOps?• To me, it’s a collaborative, community driven

way of developing software, services and IT solutions.

• Tear down the borders (and rifts!) between Development and Operations.

• Thrives on healthy Open Source communities.

Page 12: Content Delivery -  in a  DevOps  World

12

Page 13: Content Delivery -  in a  DevOps  World

13

Page 14: Content Delivery -  in a  DevOps  World

14

QPS is no longer a meaningful metric

Page 15: Content Delivery -  in a  DevOps  World

15

…Other things matters…

Page 16: Content Delivery -  in a  DevOps  World

16

… and don’t forget features• Handling thousands of concurrent users• Extensible (e.g. plugins, or scripts)• Correctness• HTTP/1.1

• Keep-Alive• Chunking• etc.

Page 17: Content Delivery -  in a  DevOps  World

17

When all you have is a hammer …

http://www.flickr.com/photos/aai/6936657289/

Page 18: Content Delivery -  in a  DevOps  World

18

Evaluate the features that matters to you!ATS HAproxy ngin

xSquid Varnish mod_proxy

Worker Threads Y N N N Y Y

Multi-Process N Y Y N Y YEvent-driven Y Y Y Y sometimes YPlugin APIs Y N Y part Y YForward Proxy Y N N Y N YReverse Proxy Y Y Y Y Y YTransp. Proxy Y Y N Y N NLoad Balancer weak Y Y Y Y YPersistent Cache Y N Y Y sorta YESI Y N N Y kinda NICP Y N N Y N NKeep-Alive Y N Y Y Y YSSL Y N Y Y N YPipeline Y N Y Y N Y

Page 19: Content Delivery -  in a  DevOps  World

19

Forward proxy

Page 20: Content Delivery -  in a  DevOps  World

20

Transparent (or intercepting) proxy

Page 21: Content Delivery -  in a  DevOps  World

21

Reverse proxy

Page 22: Content Delivery -  in a  DevOps  World

22

Page 23: Content Delivery -  in a  DevOps  World

23

Enemies of all content delivery

Server latency3-Way handshake

Congestion controlDNS lookups

(Page flow)

Page 24: Content Delivery -  in a  DevOps  World

24

Enemies of all content delivery

Server latency3-Way handshake

Congestion controlDNS lookups

(Page flow)

Page 25: Content Delivery -  in a  DevOps  World

25

TCP 3-way handshake

Page 26: Content Delivery -  in a  DevOps  World

26

Enemies of all content delivery

Server latency3-Way handshake

Congestion controlDNS lookups

(Page flow)

Page 27: Content Delivery -  in a  DevOps  World

27

Congestion control

Page 28: Content Delivery -  in a  DevOps  World

28

Enemies of all content delivery

Server latency3-Way handshake

Congestion controlDNS lookups

(Page flow)

Page 29: Content Delivery -  in a  DevOps  World

29

http://news.example.com/http://finance.example.com/http://groups.example.com/

Page 30: Content Delivery -  in a  DevOps  World

30

http://news.example.com/http://finance.example.com/http://groups.example.com/

vshttp://www.example.com/newshttp://www.example.com/financehttp://www.example.com/groups

Page 31: Content Delivery -  in a  DevOps  World

31

gzip matters

http://www.flickr.com/photos/marcovdz/4520986339/

Page 32: Content Delivery -  in a  DevOps  World

32

Reduce your round-trips!

plain gzipTheoretical limit on 20Mbps 78ms 15msLow latency (17ms RTT) 182ms 105msHigh latency (159ms RTT) 1,340ms 840ms

Page 33: Content Delivery -  in a  DevOps  World

33

Congestion control

Page 34: Content Delivery -  in a  DevOps  World

34

Real example (200KB uncompressed)

200KB (8 RTs) 40KB (5 RTs)17ms RTT 136ms 85ms159ms RTT 1,272ms 795ms

Page 35: Content Delivery -  in a  DevOps  World

35

Keep-alive• A primary tool to fight 3-way handshake

latency• Helps against congestion control too

• But not always… Slow starts begins again after some idle time

Page 36: Content Delivery -  in a  DevOps  World

36

Old Congestion Window Size Algorithm:

IW = min (4*SMSS, max (2*SMSS, 4380 bytes))

(RFC2581)

Typically, 2-4 packets

Page 37: Content Delivery -  in a  DevOps  World

37

New Linux Initial Congestion Window Size Algorithm:

10

Page 38: Content Delivery -  in a  DevOps  World

38

SPDY• Addresses many of the problems related to

latency• Not a standard (yet)• SSL requirements, and other quirks, can be a

hurdle

Page 39: Content Delivery -  in a  DevOps  World

39

Page 40: Content Delivery -  in a  DevOps  World

40

Some history

Page 41: Content Delivery -  in a  DevOps  World

41

The Concurrency problem

Page 42: Content Delivery -  in a  DevOps  World

42

Solution 1: Multi-threading

Page 43: Content Delivery -  in a  DevOps  World

43

Problems with Multi-threading

Page 44: Content Delivery -  in a  DevOps  World

44

Solution 2: Event Processing

Page 45: Content Delivery -  in a  DevOps  World

45

Problems with event processing

Page 46: Content Delivery -  in a  DevOps  World

46http://www.flickr.com/photos/stuartpilbrow/3345896050/

Page 47: Content Delivery -  in a  DevOps  World

47

Traffic Server model

Page 48: Content Delivery -  in a  DevOps  World

48

Four Horseman of Bad Performance• Data copies• Context Switches• Memory allocation• Lock contention

Page 49: Content Delivery -  in a  DevOps  World

49http://www.flickr.com/photos/simpologist/16734948/

Page 50: Content Delivery -  in a  DevOps  World

50

http://www.flickr.com/photos/airosan/2232394342/

Page 51: Content Delivery -  in a  DevOps  World

51

http://trafficserver.apache.org/

Page 52: Content Delivery -  in a  DevOps  World

Thank you.