Big Data, Performance, Posix, RTB no mercado de publicidade online

83
Tiago Peczenyj Weborama BIG DATA, PERFORMANCE, POSIX, RTB E OS DESAFIOS DA PROPAGANDA NA WEB

description

Vou colocar uma série de links e erratas na descrição, ja ja

Transcript of Big Data, Performance, Posix, RTB no mercado de publicidade online

Page 1: Big Data, Performance, Posix, RTB no mercado de publicidade online

Tiago Peczenyj

Weborama

BIG DATA, PERFORMANCE,

POSIX, RTB E OS DESAFIOS DA

PROPAGANDA NA WEB

Page 2: Big Data, Performance, Posix, RTB no mercado de publicidade online

Tiago Peczenyj@pac_manProgramador poliglota (ruby, java, perl, python, lua) trabalhei por quase 5 anos com distribuição de vídeos na globo.com.

Hoje sou Software Engineer no time de Big Data da Weborama (França).

Bebo cerveja nas horas vagas.

QUEM SOU EU?

Page 3: Big Data, Performance, Posix, RTB no mercado de publicidade online

PROPAGANDA

Page 4: Big Data, Performance, Posix, RTB no mercado de publicidade online

QUEM ANUNCIA?

Page 5: Big Data, Performance, Posix, RTB no mercado de publicidade online

O QUE AS EMPRESAS BUSCAM?

Page 6: Big Data, Performance, Posix, RTB no mercado de publicidade online

LUCRO!

Page 7: Big Data, Performance, Posix, RTB no mercado de publicidade online

É UM CUSTO

NECESSÁRIO PARA OS

NEGÓCIOS

PROPAGANDA

Page 8: Big Data, Performance, Posix, RTB no mercado de publicidade online

PROPAGANDA NA INTERNET

Page 9: Big Data, Performance, Posix, RTB no mercado de publicidade online

WHY?

Page 10: Big Data, Performance, Posix, RTB no mercado de publicidade online

É LÁ QUE ESTÁ A MINHA AUDIÊNCIA

Page 11: Big Data, Performance, Posix, RTB no mercado de publicidade online

OFERTA X DEMANDA

Page 12: Big Data, Performance, Posix, RTB no mercado de publicidade online

O “AD SERVER”

Page 13: Big Data, Performance, Posix, RTB no mercado de publicidade online

IFRAME + REDIRECTS

Page 14: Big Data, Performance, Posix, RTB no mercado de publicidade online

MUITOS REDIRECTS

Page 15: Big Data, Performance, Posix, RTB no mercado de publicidade online

MONETIZAÇÃO

Page 16: Big Data, Performance, Posix, RTB no mercado de publicidade online

CPC – custo por clickCPM – custo por mil impressões

CPA – custo por ação

TIPOS

Page 17: Big Data, Performance, Posix, RTB no mercado de publicidade online

CAMPANHA OFF LINE

Page 18: Big Data, Performance, Posix, RTB no mercado de publicidade online

CAMPANHA ON LINE

Page 19: Big Data, Performance, Posix, RTB no mercado de publicidade online

O “Ad Server” precisa decidir qual campanha sera mostrada

É preciso decidir também o que mostrar

PARA UM DADO USUARIO…

Page 20: Big Data, Performance, Posix, RTB no mercado de publicidade online

EXEMPLO : BANNERS

Page 21: Big Data, Performance, Posix, RTB no mercado de publicidade online

MUITOS BANNERS

Page 22: Big Data, Performance, Posix, RTB no mercado de publicidade online

VEJAMOS…

Page 23: Big Data, Performance, Posix, RTB no mercado de publicidade online

DYNAMIC CREATIVE OPTIMIZATION

Page 24: Big Data, Performance, Posix, RTB no mercado de publicidade online

DCO

Dynamic ElementsSection of the ad that changes dynamically, during ad view.

Page 25: Big Data, Performance, Posix, RTB no mercado de publicidade online

WORKFLOW

Page 26: Big Data, Performance, Posix, RTB no mercado de publicidade online

ADOBE CREATIVE SUITE EXTENSION

+

+

Page 27: Big Data, Performance, Posix, RTB no mercado de publicidade online

O ad server sabe o ip de origem do request http

Utilizando uma base de dados geográfica (ex MaxMind) posso saber qual a provavel localização do visitante

Posso então fazer referências locais (nome do País, Estado, Cidade, Bairro…)

Também é possivel saber o provedor de acesso (Intelig, Vivo, Net…)

ALEM DO RANDÔMICO

Page 28: Big Data, Performance, Posix, RTB no mercado de publicidade online

HTTP HEADER / USER AGENT

Page 29: Big Data, Performance, Posix, RTB no mercado de publicidade online

O Sistema OperacionalNome do Browser / versãoSe é um Mobile, Tablet, Video Game ou Desktop

Posso inferir alguns perfis de consumo!

SABENDO O USER AGENT

Page 30: Big Data, Performance, Posix, RTB no mercado de publicidade online

RETARGETING

Page 31: Big Data, Performance, Posix, RTB no mercado de publicidade online

Com retargeting, eu posso marcar um usuário para mostrar insistentemente uma campanha de forma a acelerar uma possivel conversão.

O protocolo HTTP é stateless, porém é possivel utilizar COOKIES para identificar usuarios

Estabelecemos uma sessão para cada usuario no nosso “ad server”

RETARGETING

Page 32: Big Data, Performance, Posix, RTB no mercado de publicidade online

COOKIES

Page 33: Big Data, Performance, Posix, RTB no mercado de publicidade online

Funcionam muito bem juntosPorém é relativamente caroSolução: aumentar eficiencia ao restringir o grupo de usuarios, ao qual tenha mais potencial de convergir após algumas impressões

Surgem os perfis geográficos, demograficos e comportamentais.

DCO + RETARGETING

Page 34: Big Data, Performance, Posix, RTB no mercado de publicidade online

BIG DATA!

Page 35: Big Data, Performance, Posix, RTB no mercado de publicidade online

Cada vez que um banner / ads é impresso eu sei: Qual Usuário / Cookie está envolvido

Aonde ele está geográficamenteQual é o aparelho, resolução da tela, sistema operacional

Qual pagina ele visitou!

BIG DATA!!

Page 36: Big Data, Performance, Posix, RTB no mercado de publicidade online

SALVANDO O REQUEST

Page 37: Big Data, Performance, Posix, RTB no mercado de publicidade online

A partir do Historico do Usuário, eu posso usar uma série de Algoritmos de Inteligência Artificial para determinar os provaveis perfis

A segmentação é algo constante, feita a cada vez que o usuario surge na internet

Os Algoritmos não são fixos ( a pesquisa é constante)

Surgem novas Oportunidades de Negócio, Algoritmos e Competidores

BIG DATA!!!

Page 38: Big Data, Performance, Posix, RTB no mercado de publicidade online

Existem muitas empresas no ramo de tracking de usuarios segundo alguns criterios.

É possivel trocar informações sobre um determinado usuario de forma a melhorar os perfis existentes.

Geralmente é feito através da troca de pixels

DATA PROVIDERS

Page 39: Big Data, Performance, Posix, RTB no mercado de publicidade online

Domínio A quer trocar dados com o Domínio B

1. No domínio A adicionamos <img src> para um pixel 1x1 localizado no domínio B

2. O domínio B redireciona para o A, utilizando uma determinada regra de formação de url + query string

3. O domínio A salva localmente as informações e serve um pixel 1x1 gif

PIXEL SYNC

Page 40: Big Data, Performance, Posix, RTB no mercado de publicidade online

Cookies:dominioA => id=XdominioB => id=Y

“A” quer saber qual o id do usuario X no dominio “B". Add pixel:

http://dominioB.com/pixel.gif?from=A (que redireciona para)

http://dominioA.com/pixel.gif?id=Y

“A” salva internamente no perfi l de X:

Ids => { dominio B => Y }

EXEMPLO PIXEL SYNC

Page 41: Big Data, Performance, Posix, RTB no mercado de publicidade online

Vimos ser possivel marcar usuarios para retargeting, alterar o conteudo de acordo com o perfi l, mas como determinar para quem mostrar a propaganda?

A regra para escolher uma dada campanha pode levar em conta o sistema operacional, tipo de aparelho mobile, região geográfica e alguns tipos de perfis mais simples.

Escolher individuos baseados em algoritmos mais complexos/especificos exige ser o ad server.

Exige?

PARA QUEM?

Page 42: Big Data, Performance, Posix, RTB no mercado de publicidade online

REAL TIME BIDDING!

Page 43: Big Data, Performance, Posix, RTB no mercado de publicidade online

SSP E DSP

Page 44: Big Data, Performance, Posix, RTB no mercado de publicidade online

LEILÃO

Page 45: Big Data, Performance, Posix, RTB no mercado de publicidade online

Permite que diferentes DSPs possam disputar o mesmo usuario (competitividade).

Cada DSPs possui um conjunto de campanhas e uma forma proprietária de segmentar os usuarios.

Assim um dado usuario pode ser muito relevante para a DSP A, enquanto não é tão atrativo para a B.

Os dois maiores BIDs pagam.É possivel não fazer nenhum BID.Exige baixa latência nas transações ( da

ordem de 100 ms).

REAL TIME BIDDING

Page 46: Big Data, Performance, Posix, RTB no mercado de publicidade online

Operações relativas a advertising exigem rapidez (ou podem não ser percebidos a tempo) e escalabilidade.

Essencial entender qual é o maior problema relacionado a performance em operações web.

PERFORMANCE/ESCALABILIDADE!

Page 47: Big Data, Performance, Posix, RTB no mercado de publicidade online

BIOS

Page 48: Big Data, Performance, Posix, RTB no mercado de publicidade online

Linguagem não escalaFramework não escalaComponente não escalaBiblioteca não escalaArquiteturas muito bem construidas é que escalam (ou não)

ESCALABILIDADE

Page 49: Big Data, Performance, Posix, RTB no mercado de publicidade online

É possivel desenhar uma aplicação web quase perfeita.

Todavia, uma vez em produção, não raro se adiciona entropia/ruido na arquitetura/aplicação para atender melhor a requisitos de negócios (ditos urgentes)

A soma da aplicação + infraestrutura + arquivos de configuração + sistema operacional + hardware + versões de bibliotecas/ linguagem + aspectos ambientais nem sempre funciona da forma esperada.

ARQUITETURA

Page 50: Big Data, Performance, Posix, RTB no mercado de publicidade online

A duração total de uma tarefa é a soma das durações das sub-tarefas associadas.

Para que uma tarefa seja completada em menos tempo, podemos optar porHardware mais rapidoUtilizar um algoritmo mais eficiente (Big O)

Paralelizar algumas sub-tarefasUtilizar melhor os recursos disponiveisDiminuir o overhead!

PERFORMANCE

Page 51: Big Data, Performance, Posix, RTB no mercado de publicidade online

L1 cache reference 0.5 ns

Branch Mispredict 5 ns

L2 cache reference 7 ns 14 x L1

Mutex lock/unlock 25 ns

Main memory reference 100 ns 14 x L2, 200 x L1

Send 1 K bytes 1 Gbps Net 10.000 ns

Read 1 MB from RAM (sequenc)

250.000 ns

Read 1 MB from SSD (sequenc)

1 ms 4x memory

Disk Seek 10 ms Antigo Delay

Read 1 MB from Disc (sequenc)

20 ms 80x RAM, 20x SSD

Send packet CA->NE->CA 150 ms Netherlands / California

PERFORMANCE

Fonte: https://gist.github.com/jboner/2841832

Page 52: Big Data, Performance, Posix, RTB no mercado de publicidade online

CAOS

Page 53: Big Data, Performance, Posix, RTB no mercado de publicidade online

Manter e evoluir uma aplicação web (advertising por exemplo) é uma tarefa que não deve ser subestimada.

A aplicação depende de uma série de times diferentes para funcionar adequadamente.

Comunicação é essencial

DESIGN

Page 54: Big Data, Performance, Posix, RTB no mercado de publicidade online

É o processo mediante o qual se equilibra aquilo que já sabemos

(assimilação) com aquilo que podemos ser solicitados aprender e que não se ajusta completamente à nossa compreensão (acomodação)

EQUILIBRAÇÃO (PIAGET)

Page 55: Big Data, Performance, Posix, RTB no mercado de publicidade online

A mente humana, para resolução de problemas, funciona de forma causal.

Quando nós não percebemos as causas, nós frequentemente inventamos alguma.

CAUSALIDADE

Page 56: Big Data, Performance, Posix, RTB no mercado de publicidade online

LOAD BALANCE

Page 57: Big Data, Performance, Posix, RTB no mercado de publicidade online

HTTP SESSION

Page 58: Big Data, Performance, Posix, RTB no mercado de publicidade online

HTTP SESSION COOKIE-BASED

Page 59: Big Data, Performance, Posix, RTB no mercado de publicidade online

SERVIR ESTATICOS DIRETAMENTE

Page 60: Big Data, Performance, Posix, RTB no mercado de publicidade online

USE CACHE

Page 61: Big Data, Performance, Posix, RTB no mercado de publicidade online

MULTIPLOS REQUESTS EM PARALELO

Page 62: Big Data, Performance, Posix, RTB no mercado de publicidade online

Fazer um bom uso da infraestrutura: servidor web, servidor de aplicação, middlewares, caches, load balance, proxy, etc

Design da solução de forma a evitar ponto unico de falha

Fazer uso racional dos logs / unix signalsAutomatizar e versionar infraestrutura (git + puppet ,

chef…)Possuir ambiente espelho ao produção para

teste/homologaçãoMonitorar tudo (nagios, new relic, statsD)Ferramentas para detecção de problemas (wireshark)Time multidisciplinar ( #devops )

MISCELÂNEA

Page 63: Big Data, Performance, Posix, RTB no mercado de publicidade online

Armazenamento chave/valorMuito rapidoUso intenso de memóriaPossui coleções, listas, etcExpiração de chavesSuporte a scripts em Lua

BIG DATA : REDIS

Page 64: Big Data, Performance, Posix, RTB no mercado de publicidade online

Modelagem de Dados: Um objeto pode ter varias entradas no Redis versus armazenar id => objeto serializado (xml, blob).

Se o acesso ao Redis for um gargalo, minimizar acesso trafegando o mínimo de dados e/ou no mínimo de vezes.

Compare o preço de recuperar o objeto, deserializar, alterar, serializar e armazenar novamente com o tempo de submeter um script lua que faça o mesmo

BIG DATA : REDIS

Page 65: Big Data, Performance, Posix, RTB no mercado de publicidade online

É possivel enviar codigo Lua para o Redis usando EVAL

É possivel executar um script usando EVALSHA

É possivel chamar a funcao atraves de f_<sha1>()

Produz processamento no servidor, mas Lua é eficiente, pode valer a pena.

BIG DATA : REDIS

Page 66: Big Data, Performance, Posix, RTB no mercado de publicidade online

local key = KEYS[1] local value = KEYS[2] local decoder = __LUA(decode)__() -- substituir por f_93983…() local encoder = __LUA(encode)__() -- antes de utilizar

local sereal_string = redis.call( 'get’ , key ) local decoded_string = decoder.decode_sereal(sereal_string) local decoded_number = tonumber(decoded_string) sereal_string = encoder.encode_sereal(decoded_number + value)

return redis.call( 'set’ , key , sereal_string)

REDIS : EXEMPLOSINCREMENTAR VALOR SERIALIZADO

Page 67: Big Data, Performance, Posix, RTB no mercado de publicidade online

Encarar os problemas de forma pragmática

Esconder os detalhes do acesso ao Redis através de uma abstração de alto nivel (um objeto/client/driver)

Lembrar que acesso ao REDIS é I/O (bloqueante), mas não necessariamente devemos entrar em paranóia

REDIS : CONCLUSÃO

Page 68: Big Data, Performance, Posix, RTB no mercado de publicidade online

Banco NoSQL Chave / Valor com alta disponibilidade, tolerante a falhas e com escalabilidade quase linear

Trabalha facilmente com grandes volumes de dados

Não é tão rapido quanto Redis…Excelente para armazenar dados de forma

permanenteSuporta map-reduce em JavaScript e ErlangTrabalha com interfaces Rest e Protocol BufferSuporta multiplos backends plugaveis (Memory,

LevelDB,…)

BIG DATA : RIAK

Page 69: Big Data, Performance, Posix, RTB no mercado de publicidade online

O problema: com uma estrutura de centenas de processos assincronos que acessam MySQL, apresentou, entre outros gargalos, o acesso ao Riak

O Backend da Weborama é totalmente feito em Perl. O driver em questão era o Net::Riak.

Surge a ideia de escrever um novo cliente, extremamente leve e direto (CRUD) utilizando a interface Protocol Buffer.

Nasce o primeiro projeto open-source da Weborama: Riak::Light

RIAK::LIGHT

Page 70: Big Data, Performance, Posix, RTB no mercado de publicidade online

$scalar@array%hash

(PERL)

Page 71: Big Data, Performance, Posix, RTB no mercado de publicidade online

Atualmente está na versão 5.18.1Linguagem procedural (C, shell script, awk, sed)

com suporte à orientação a objetos.Perl versão 5 é mais antigo do que Java, Ruby ou

PHP (backward compatibility insano).Mais de 124.284 módulos disponíveis no CPAN.Presente no começo da web interativa (cgi-bin)Profundas ligações com o movimento open source

(Patch).Movimento de renovação da linguagem Modern PerlBioPerl, CERN, Estante Virtual, Booking.com,

youporn

(PERL)

Page 72: Big Data, Performance, Posix, RTB no mercado de publicidade online

package Point;use Moose; has 'x' => (is => 'rw', isa => 'Int');has 'y' => (is => 'rw', isa => 'Int'); sub clear { my $self = shift; $self->x(0); $self->y(0);}…my $point = Point->new( x=> 1, y => 2);

MOOSE

Page 73: Big Data, Performance, Posix, RTB no mercado de publicidade online

package Point3D;use Moose; extends 'Point'; has 'z' => (is => 'rw', isa => 'Int'); after 'clear' => sub { my $self = shift; $self->z(0);};

MOOSE

Page 74: Big Data, Performance, Posix, RTB no mercado de publicidade online

package Comparable;use Moose::Role;

requires 'compare'; sub equal_to { my ( $self, $other ) = @_; $self->compare($other) == 0;}

package Foo;use Moose;

with ‘Comparable’; # inject equal_to method

sub compare { … }

MOOSE ROLES

Page 75: Big Data, Performance, Posix, RTB no mercado de publicidade online

CRUD -> GET / PUT / DELETEInterface Protocol BufferOrientação a Objetos com MooFoco em PerformanceUso da API POSIX não bufferizada

Timeout I/O

RIAK::LIGHT

Page 76: Big Data, Performance, Posix, RTB no mercado de publicidade online

use Riak::Light;

my $client = Riak::Light->new( host => '127.0.0.1', port => 8087);

$client->is_alive() or die "ops, riak is not alive";

$client->put_raw( foo => baz => "sometext"); # plain/text

my $text = $client->get_raw( foo => 'baz');

$client->del(foo => 'bar');

RIAK::LIGHT

Page 77: Big Data, Performance, Posix, RTB no mercado de publicidade online

Requests/segundo Data::Riak (REST)

Data::Riak (REST) 318

Net::Riak (REST) 478 50%

Riak::Tiny (REST) 544 71%

Data::Riak::Fast (REST)

594 87%

Net::Riak (PBC) 1031 224%

Riak::Light (PBC) 3774 1086%

BENCHMARK (GET)

https://github.com/Weborama/Riak-Light

Page 78: Big Data, Performance, Posix, RTB no mercado de publicidade online

Abstração I/O (socket, arquivos, named pipes)

Bufferizado ou nãoBloqueante ou nãoFunções sysread / syswriteÉ preciso observar que nem sempre vc vai escrever/ler todos os bytes que vc espera de uma vez

ERRNO global

POSIX

Page 79: Big Data, Performance, Posix, RTB no mercado de publicidade online

IO::Socket::INETAlarm (signals)SelectSetsockoptWindows / SunOS / NetBSD 6

TIMEOUT IO

Page 80: Big Data, Performance, Posix, RTB no mercado de publicidade online

As vezes é necessario reescrever a rodaInterface PBC < overhead < RESTUso de secondary indexes pode evitar duplicação de dados

Não acessar diretamente da camada de negócios!

Map/Reduce não apresentou a performance esperada

Dividimos o perfil entre diferentes buckets para propositos diferentes

RIAK CONCLUSÃO

Page 81: Big Data, Performance, Posix, RTB no mercado de publicidade online

Servidor de alta performance escrito em C que permite trabalhar com filtros de Bloom

Verificar se um dado está no Riak é relativamente lento

Armazenas as chaves no Redis utiliza muita memoria

Nesse filtro, um falso negativo é impossivel!Atenuamos o problema pois liberamos

memoria no Redis e poucos requests efetivamente vão ao Riak

https://github.com/armon/bloomd

BLOOMD SERVER

Page 82: Big Data, Performance, Posix, RTB no mercado de publicidade online

Ad Blocking (21 %)Browser refusing third-party cookies

PrivacyBrowser Fingerprint

OUTROS DESAFIOS