Što učiniti

kada klijent poželi servirati 110 milijuna geotargetiranih bannera s VPS-a?

Luka Mužinić

@lmuzinic

@trikoder

@netakademija

wogibtswas.at

Klijent:

"znate one widgete što ste davno napravili,
mi bi to htjeli pustiti u produkciju"

...

"pa nemamo još točne brojke, ali otprilike
110 milijuna prikaza mjesečno"

...

"halo, HALO?"

Developer:

...

"odlično, bit će mi drago vidjeti ih u živo.
Budući da nikada nismo pričali o brojkama, o kojem broju prikaza govorimo?"

...

"to su poprilično impresivne brojke,
predlažem da prvo isprobamo da li je moguće bez ulaganja u dodatni hardware"

...

Što je to uopće widget?

Stress test 1/2

Idemo vidjeti koliko requestova u sekundi trenutno rješenje može podnjeti? Cilj: ~45 req/s


7


#fail

Cache 101

optimizacija koda

8

keširaj DB upite

9

keširaj Sphinx upite

12


ponekada je pametno da requestovi uopće ne dođu do aplikacije
- Tomicius Rasimus

Nginx to the rescue

http://nginx.org/en/docs/http/ngx_http_memcached_module.html

http://wiki.nginx.org/HttpRedis

Primjer konfiguracije 1/2


# widget nginx + memcached
location /widget/ {
    set $memcached_key $geoip_city$uri;

    if ($arg_company != '') {
        set $memcached_key $memcached_key?company=$arg_company
    }

    default_type text/html;
    memcached_pass 127.0.0.1:11211;
    error_page 404 = @fallback;
    expires +7200;
}

Primjer konfiguracije 2/2


location @fallback {
    proxy_pass http://apache.application.server:8081;
    proxy_buffering off;
    proxy_redirect off;
}

Stress test 2/2

Idemo vidjeti koliko requestova u sekundi novo rješenje može podnjeti? Cilj: ~45 req/s


~2010 req/s


so much #win

Feedback

with keepalive https://gist.github.com/gjuric/7580148

~2035 req/s

:( values too big to have described effect

Razine cachea

4. po IP adresi (cca. jako puno)

3. po gradu (cca. 1145 kom)

2. po regijama (9 kom)

1. cijela Austrija (1 kom)

Konačno rješenje

VPS, 4 core, 8 GB

load zanemariv

36m req/mj

u peakovima 50-60 req/s

dodatni memcache fallback

Alternative

Varnish, raznorazni web acceleratori, podrška za ESI...

Kako motivirati klijenta?

želim ljude koji dolaze s rješenjima, a ne problemima

iskoristite trokut cjenkanja

novac, vrijeme, opseg posla

kvaliteta

Niste sami!

komunicirajte s kolegama, sistem administratorima, hosterima, klijentima, šefovima

Don't bullshit!

Errors, boo-boos, tips and tricks

cache stampedo

zagrijavanje cachea

GA analytics

održati memcache na životu

Add Memcache fallback


upstream memcached_backed {
	server 192.168.1.1:11211;
	server 192.168.1.2:11211;
}

# widget nginx + memcached
location /widget/ {
	memcached_pass memcached_backed;
	memcached_next_upstream error;
}

Thx!

@tomyz0r, @ivedrna, @msvrtan, @goran_juric and many others

We are hiring!

posao@trikoder.net

Bai!

Pitanja?

Nešto za ponjeti kući

jeste li ikada vidjeli u teretani tipa koji vježba samo bicepse?

biti najbolji developer nije dovoljno

ne budite taj tip!