Download - OPTIMERA STHLM! Daniel Stenberg
Daniel Stenberg
Mer data på kortare tid, tack!
2Daniel Stenberg 31:a maj 2010
Daniel Stenberg
Haxx och Fossgruppencurl
libssh2IETF
http://daniel.haxx.se/
3Daniel Stenberg 31:a maj 2010
Agenda
Transport
Framtid
API
4Daniel Stenberg 31:a maj 2010
Protokoll-lager
Link
Internet
Transport
Application
Innehåll som HTML och annat
5Daniel Stenberg 31:a maj 2010
Link- och Internet-lagren
Bild från www.useit.com
50 % mer bandbredd varje år
6Daniel Stenberg 31:a maj 2010
Link och Internet, RTT
● RTT, Round Trip (delay) Time står still eller backar● Genomsnitt till Google inom USA: 90 ms, i världen
100 ms● Telefoner GSM/3G upp till 6000 ms● DSL: 40-50 ms● Kabel: 60 ms● Uppringt modem: 120-150 ms● (MTUs...)
7Daniel Stenberg 31:a maj 2010
TCP Transport: fördröjningar
● DNS resolve Undvik, cacha● Handshake – 3 way Pool, återanvänd● Nagle – vänta för att fylla på mer
Kan stängas av● Slow start Var medveten● Delayed ACKs När 2 är bättre än 1
Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd
8Daniel Stenberg 31:a maj 2010
TCP Transport: fördröjningar
● DNS resolve Undvik, cacha● Handshake – 3 way Pool, återanvänd● Nagle – vänta för att fylla på mer
Kan stängas av● Slow start Var medveten● Delayed ACKs När 2 är bättre än 1
Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd
9Daniel Stenberg 31:a maj 2010
TCP Transport: fördröjningar
● DNS resolve Undvik, cacha● Handshake – 3 way Pool, återanvänd● Nagle – vänta för att fylla på mer
Kan stängas av● Slow start Var medveten● Delayed ACKs När 2 är bättre än 1
Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd
10Daniel Stenberg 31:a maj 2010
TCP Transport: fördröjningar
● DNS resolve Undvik, cacha● Handshake – 3 way Pool, återanvänd● Nagle – vänta för att fylla på mer
Kan stängas av● Slow start Var medveten● Delayed ACKs När 2 är bättre än 1
Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd
11Daniel Stenberg 31:a maj 2010
TCP Transport: fördröjningar
● DNS resolve Undvik, cacha● Handshake – 3 way Pool, återanvänd● Nagle – vänta för att fylla på mer
Kan stängas av● Slow start Var medveten● Delayed ACKs När 2 är bättre än 1
Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd
12Daniel Stenberg 31:a maj 2010
TCP Transport: fördröjningar
● DNS resolve Undvik, cacha● Handshake – 3 way Pool, återanvänd● Nagle – vänta för att fylla på mer
Kan stängas av● Slow start Var medveten● Delayed ACKs När 2 är bättre än 1
Att optimera för mindre fördröjningar och kortare RTT kan leda till sämre throughput och bandbredd
13Daniel Stenberg 31:a maj 2010
HTTP
● Ovanpå TCP så...● Request size, pratigt protokoll● Cookie sizes, cookies skickas alltid om de matchar● Cache friendliness, skicka inte mer HTTP än
nödvändigt● Pipelining, besegra RTT men...● Compression
14Daniel Stenberg 31:a maj 2010
HTTP
● Ovanpå TCP så...● Request size, pratigt protokoll● Cookie sizes, cookies skickas alltid om de matchar● Cache friendliness, skicka inte mer HTTP än
nödvändigt● Pipelining, besegra RTT men...● Compression
15Daniel Stenberg 31:a maj 2010
HTTP
● Ovanpå TCP så...● Request size, pratigt protokoll● Cookie sizes, cookies skickas alltid om de matchar● Cache friendliness, skicka inte mer HTTP än
nödvändigt● Pipelining, besegra RTT men...● Compression
16Daniel Stenberg 31:a maj 2010
HTTP
● Ovanpå TCP så...● Request size, pratigt protokoll● Cookie sizes, cookies skickas alltid om de matchar● Cache friendliness, skicka inte mer HTTP än
nödvändigt● Pipelining, besegra RTT men...● Compression
17Daniel Stenberg 31:a maj 2010
HTTP
● Ovanpå TCP så...● Request size, pratigt protokoll● Cookie sizes, cookies skickas alltid om de matchar● Cache friendliness, skicka inte mer HTTP än
nödvändigt● Pipelining, besegra RTT men...● Compression
18Daniel Stenberg 31:a maj 2010
HTTP
● Ovanpå TCP så...● Request size, pratigt protokoll● Cookie sizes, cookies skickas alltid om de matchar● Cache friendliness, skicka inte mer HTTP än
nödvändigt● Pipelining, besegra RTT men...● Compression
19Daniel Stenberg 31:a maj 2010
HTTP i webbläsare
● Många koppel. Var 2. Numera 6 eller 8. Snart...● Ingen Pipelining● AJAX● “long polling”
20Daniel Stenberg 31:a maj 2010
HTTP i handhållet
● Wifi● GSM/3g● High latency, low bandwidth
21Daniel Stenberg 31:a maj 2010
API
●Hur man gör saker har betydelse
22Daniel Stenberg 31:a maj 2010
Typisk TCP-klient
Så länge klienten lever {
vänta på socket-händelse
Kolla vilken socket som det hände på
Hantera socketen
}
Traditionellt med select() eller poll()
23Daniel Stenberg 31:a maj 2010
10000 koppel ändrar reglerna
● select och poll blir exponentiellt sämre med antalet koppel
24Daniel Stenberg 31:a maj 2010
event-based
● Agera vid händelse på socketen det händer på
● Inte leta, veta
Bild från http://www.monkey.org/~provos/libevent/Bild från http://developers.sun.com
25Daniel Stenberg 31:a maj 2010
event-klient
Function call_on_event {
Hantera trafik på socketen
}
event_wait( &call_on_event)
Libevent, libev, epoll, kqueue,
26Daniel Stenberg 31:a maj 2010
Exempel
● libcurl...● är open source● leds av Daniel● kan FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP,
TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3 och RTSP just nu
● det främsta dataöverförings-libraryt helt enkelt
27Daniel Stenberg 31:a maj 2010
libcurl
● DNS cache● Återanvänder TCP-koppel● API: select-stil● API: event-stil, upp tille mycket snabbare● C10K, upp till C70K
28Daniel Stenberg 31:a maj 2010
Framtiden
● WebSockets● SPDY● SCTP● MPTCP● ...
29Daniel Stenberg 31:a maj 2010
Framtid 1: WebSockets
● WHATWG startade● IETF hybi working group● Browser till server● Lösning på HTTP long-polling problemet● TCP-replacement över TCP● Javascript-centric (kan inte skicka binärt!)● HTTP upgrade● Debatteras ivrigt just nu
30Daniel Stenberg 31:a maj 2010
Framtid 2: SPDY
● Google● HTTP replacement● Multiplexade strömmar över ett koppel● Pririterade strömmar● Server-initierade strömmar● Chrome har implementation● Experiementellt
31Daniel Stenberg 31:a maj 2010
Framtid 3: SCTP
● IETF (RFC 4960, 2007)● Ersätter TCP som transport● Meddelanden, inte byte-strömmar● Flera samtidiga logiska meddelande-strömmar● HTTP över SCTP● Över UDP?● Sannolikhet oklar
32Daniel Stenberg 31:a maj 2010
Framtid 4: MPTCP
● Multi-Path TCP● IETF● Flera vägar mellan source och destination● Kompatibelt API för applikationer● “Snällt mot nätet”● Som gjort för saker med flera interface● Sannolikhet: trolig
33Daniel Stenberg 31:a maj 2010
MPTCP
34Daniel Stenberg 31:a maj 2010
MPTCP ett koppel
35Daniel Stenberg 31:a maj 2010
MPTCP två koppel
36Daniel Stenberg 31:a maj 2010
Summering
● RTT står still fast bandbredd ökar● TCP har fördröjningar● HTTP kör på TCP● Använd rätt API:er● WebSockets, SPDY, SCTP och MPTCP