![Page 2: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/2.jpg)
![Page 3: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/3.jpg)
@TAPTAP_Networks
![Page 4: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/4.jpg)
![Page 5: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/5.jpg)
![Page 6: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/6.jpg)
Proveedor de campañas
Proveedor de “escaparates” inventario
AdServer
Forecas1ng
![Page 7: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/7.jpg)
![Page 8: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/8.jpg)
SSP AdExchange
Subasta
DSP Bidder
SDK
1. Dame anuncios
2. Hay un escaparate disponible, ¿cuánto me dais?
![Page 9: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/9.jpg)
• ¿Qué campaña ponemos? • ¿Cuánto pagamos por ella? • Necesitamos muchísimas pe1ciones
Problemas
• Tiempo de respuesta < 100ms • Siempre hay que dar una respuesta válida • Almacenamos todas las pe1ciones • No podemos precalcular el resultado
Restricciones
![Page 10: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/10.jpg)
¿CÓMO AFRONTAMOS EL RETO?
![Page 11: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/11.jpg)
![Page 12: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/12.jpg)
![Page 13: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/13.jpg)
Redis Storm
Hadoop MongoDB
Amazon S3
![Page 14: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/14.jpg)
Dev Team Bidder
![Page 15: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/15.jpg)
Dev Team Bidder
![Page 16: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/16.jpg)
Round 0 DRPCSpout
BidRequest
Crea1vi1es RequestLog
RetrieveCampaignsByGeohash
CampaignCrea1vi1es PacingReached IsAc1ve Scheduling FrequencyCapping BlockedByPublisher
Intersec1on
CalculateWinner
BidResponse
ResultLog
![Page 17: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/17.jpg)
Round 0
![Page 18: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/18.jpg)
¡40 QPS! ¿Seguro?
KO
Dev Team Bidder
![Page 19: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/19.jpg)
• Paralelizar Iene un sobre-‐coste • La serialización es cara y aburrida de programar
• No sabemos que pasa por dentro • “Real1me processing” != comunicación sincrona
Lecciones aprendidas
![Page 20: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/20.jpg)
• Paralelizar 1ene un sobre-‐coste • La serialización es cara y aburrida de programar
Round 1
DRPCSpout
CojoBolt
RequestLog ResponseLog
![Page 21: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/21.jpg)
¡500 QPS! ¿Seguro?
KO
Dev Team Bidder
![Page 22: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/22.jpg)
• Paralelizar 1ene un sobre-‐coste • La serialización es cara y aburrida de programar
• No sabemos que pasa por dentro • “Real1me processing” != comunicación sincrona
• Redis no nos sirve como Storage principal
Lecciones aprendidas
![Page 23: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/23.jpg)
Round 2
![Page 24: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/24.jpg)
Round 2
![Page 25: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/25.jpg)
Round 2
![Page 26: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/26.jpg)
¡500 QPS! ¿Seguro?
KO
Dev Team Bidder
![Page 27: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/27.jpg)
• Paralelizar 1ene un sobre-‐coste • La serialización es cara y aburrida de programar
• No sabemos que pasa por dentro • “RealIme processing” != comunicación sincrona
• Redis no nos sirve como Storage principal
Lecciones aprendidas
![Page 28: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/28.jpg)
• Monitorizar es importante para nosotros
Round 3
![Page 29: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/29.jpg)
Round 3
CORE
PORTS
ADAPTERS
![Page 30: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/30.jpg)
Round 3
CORE
STORM
REDIS
![Page 31: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/31.jpg)
Round 3
CORE
DROPWIZARD + STORM
MONGO + REDIS
![Page 32: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/32.jpg)
Round 3
![Page 33: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/33.jpg)
Cómo conseguimos las métricas?
@Timed(name = "BidRequests") !public Response bid(...) { !
"//Do your magic here!}
...!Histogram validFoundCampaigns = Metrics.newHistogram("FoundCampaigns");!
validFoundCampaigns.update(filteredCampaigns.size()); !...!
![Page 34: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/34.jpg)
Métricas siempre visibles
![Page 35: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/35.jpg)
Enviando métricas a Graphite
public static void configureMetricsReporter( !" "GraphiteConfiguration graphiteConfiguration) { !"if (graphiteConfiguration != null && graphiteConfig.isEnabled()) { !
GraphiteReporter.enable( !" " " "graphiteConfig.getGraphiteSendMetricsPeriodInSeconds(), " " " "TimeUnit.SECONDS, !" " " "graphiteConfig.getGraphiteHost(),!
graphiteConfig.getGraphitePort(), "!" " " "graphiteConfig.getGraphiteMetricsId());!"} !
}
![Page 36: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/36.jpg)
![Page 37: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/37.jpg)
![Page 38: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/38.jpg)
¡3500 QPS! ¡¡Seguro!!
KO
Dev Team Bidder
![Page 39: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/39.jpg)
Round 5
![Page 40: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/40.jpg)
Round 5
![Page 41: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/41.jpg)
¡10000 QPS!
KO
Dev Team Bidder
![Page 42: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/42.jpg)
• En cuanto solucionas un cuello de botella aparecerá el siguiente.
• Por mucho que lo intentemos tendemos a la op1mización prematura.
• La algoritmia no nos ha resuelto el problema. • Busca una librería de métricas para tu stack. • Un entorno de trabajo higiénico es imprescindible.
Lecciones aprendidas
![Page 43: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/43.jpg)
![Page 44: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/44.jpg)
Entre 175 y 250 GB diarios de datos comprimidos (1,6TB en crudo) • Escritura en disco en diferido • Discos SSD • Envío por lotes a S3
Problemas de almacenamiento
![Page 45: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/45.jpg)
“Si devuelve void, puede esperar”
public void log( ! final RTBImplementationBean request, ! final AdExchange adExchange) { ! FutureTask futureLog = new FutureTask(new Callable() { ! @Override! public Object call() throws Exception { !
" synchLog(request, adExchange);!" " "return null; !" } !" );!
futureLog.run();!}
Rest Server Worker PubSub DB
A nivel de código
A nivel arquitectónico
![Page 46: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/46.jpg)
• Si necesitas backups, ten en cuenta que necesita el doble de memoria de la que vas a usar.
Redis va como un 1ro pero…
Backup instance
![Page 47: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/47.jpg)
Cuidado con el tamaño del heap
![Page 48: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/48.jpg)
• De dicas más 1empo a: – Programar vs Despelgar? – Diagnos1car vs Corregir? – Bugs vs Features?
• Opacidad • Pérdida del control
Cuida tu entorno de trabajo
![Page 49: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/49.jpg)
Cada pieza del puzzle es mo1vo de preocupaciones.
Sobreingenieria es evil
![Page 50: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/50.jpg)
• Miedo al cambio. • Sen1miento de pertenencia. • Ser exesivamente conservador. • Fíate de tus ins1ntos.
“La inercia te frena ¿WTF?”
![Page 51: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/51.jpg)
Q&A Muchas Gracias
![Page 52: Escalando hasta las 10.000 peticiones por segundo](https://reader033.vdocumento.com/reader033/viewer/2022042504/55a475d51a28abee268b4582/html5/thumbnails/52.jpg)
Spain!(headquarters)!
! Pº Castellana 111, 1st floor!
28046 Madrid – Spain!+34 91 101 1001!
<<<<
USA!! !
747 3rd Avenue!NY, NY 10017!
+1 516 206 2392!
Colombia!! !
Carrera 7, nº71 – 21. Torre B!Piso 13 – 15!
Bogotá, Colombia!+57 1 31 35 913!
Contact us at :!www.taptpanetworks.com & www.sonatalocal.com!
[email protected]!@TAPTAP_Networks & @SONATAlocal!