SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
Escalando	
  hasta	
  las	
  10.000	
  
pe1ciones	
  por	
  segundo	
  
Sergio	
  Arroyo	
  Cuevas	
  
sergio.arroyo@taptapnetworks.com	
  
@delr3ves	
  
@TAPTAP_Networks	
  
Proveedor	
  de	
  
campañas	
  
Proveedor	
  de	
  
“escaparates”	
  
inventario	
  
AdServer	
  
Forecas1ng	
  
SSP	
  
AdExchange	
  
Subasta	
  
DSP	
  
Bidder	
  
SDK	
  
1.	
  Dame	
  
anuncios	
  
2.	
  Hay	
  un	
  escaparate	
  
	
  disponible,	
  	
  
¿cuánto	
  me	
  dais?	
  
•  ¿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	
  
¿CÓMO	
  AFRONTAMOS	
  EL	
  RETO?	
  
Redis	
  
Storm	
  
Hadoop	
  
MongoDB	
  
Amazon	
  S3	
  
Dev Team Bidder
Dev Team Bidder
Round	
  0	
  
DRPCSpout	
  
BidRequest	
  
Crea1vi1es	
   RequestLog	
  
RetrieveCampaignsByGeohash	
  
CampaignCrea1vi1es	
   PacingReached	
   IsAc1ve	
   Scheduling	
   FrequencyCapping	
   BlockedByPublisher	
  
Intersec1on	
  
CalculateWinner	
  
BidResponse	
  
ResultLog	
  
Round	
  0	
  
¡40	
  QPS!	
  
¿Seguro?	
  
KO
Dev Team Bidder
•  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	
  
•  Paralelizar	
  1ene	
  un	
  sobre-­‐coste	
  
•  La	
  serialización	
  es	
  cara	
  y	
  aburrida	
  de	
  
programar	
  
	
  
	
  
Round	
  1	
  
DRPCSpout	
  
CojoBolt	
  
RequestLog	
  ResponseLog	
  
¡500	
  QPS!	
  
¿Seguro?	
  
KO
Dev Team Bidder
•  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	
  
Round	
  2	
  
Round	
  2	
  
Round	
  2	
  
¡500	
  QPS!	
  
¿Seguro?	
  
KO
Dev Team Bidder
•  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	
  
•  Monitorizar	
  es	
  importante	
  para	
  nosotros	
  
Round	
  3	
  
Round	
  3	
  
CORE	
  
PORTS	
  
ADAPTERS	
  
Round	
  3	
  
CORE	
  
STORM	
  
REDIS	
  
Round	
  3	
  
CORE	
  
DROPWIZARD	
  +	
  STORM	
  
MONGO	
  +	
  REDIS	
  
Round	
  3	
  
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());!
...!
Métricas	
  siempre	
  visibles	
  
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());!
"}!
}	
  
¡3500	
  QPS!	
  
¡¡Seguro!!	
  
KO
Dev Team Bidder
Round	
  5	
  
Round	
  5	
  
¡10000	
  QPS!	
  
KO
Dev Team Bidder
•  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	
  
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	
  
“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	
  
•  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	
  
Cuidado	
  con	
  el	
  tamaño	
  del	
  heap	
  
•  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	
  
Cada	
  pieza	
  del	
  puzzle	
  es	
  mo1vo	
  de	
  
preocupaciones.	
  
Sobreingenieria	
  es	
  evil	
  
•  Miedo	
  al	
  cambio.	
  
•  Sen1miento	
  de	
  pertenencia.	
  
•  Ser	
  exesivamente	
  conservador.	
  
•  Fíate	
  de	
  tus	
  ins1ntos.	
  
“La	
  inercia	
  te	
  frena	
  ¿WTF?”	
  
Q&A	
  
Muchas	
  Gracias	
  
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!
info@sonatalocal.com!
@TAPTAP_Networks & @SONATAlocal!

Más contenido relacionado

Similar a Escalando hasta las 10.000 peticiones por segundo

Azure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realAzure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realSoftware Guru
 
Evolucion de big data @ mercadolibre.com
Evolucion de big data @ mercadolibre.comEvolucion de big data @ mercadolibre.com
Evolucion de big data @ mercadolibre.comGabriel Eisbruch
 
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...SolidQ
 
Ahorre hasta un 90% en ambientes productivos con instancias Spot
Ahorre hasta un 90% en ambientes productivos con instancias SpotAhorre hasta un 90% en ambientes productivos con instancias Spot
Ahorre hasta un 90% en ambientes productivos con instancias SpotAmazon Web Services LATAM
 
Lado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxiLado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxiJosé Carlos García Serrano
 
Escalabilidad en azure web sites y sql database
Escalabilidad en azure web sites y sql databaseEscalabilidad en azure web sites y sql database
Escalabilidad en azure web sites y sql databaseEduardo Castro
 
Ahorre hasta un 90% en ambientes productivos con instancias spot
Ahorre hasta un 90% en ambientes productivos con instancias spotAhorre hasta un 90% en ambientes productivos con instancias spot
Ahorre hasta un 90% en ambientes productivos con instancias spotAmazon Web Services LATAM
 
Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloSoftware Guru
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorAlberto Gimeno
 
[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG ArgentinaCodealike
 
AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...
AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...
AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...Amazon Web Services
 
Migrando Rails Apps entre Cloud y Bare Metal Servers
Migrando Rails Apps entre Cloud y Bare Metal ServersMigrando Rails Apps entre Cloud y Bare Metal Servers
Migrando Rails Apps entre Cloud y Bare Metal ServersEdwin Cruz
 
Técnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverTécnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverEnrique Catala Bañuls
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Luis Bosque
 

Similar a Escalando hasta las 10.000 peticiones por segundo (20)

Ricardo - Meetup Python Madrid marzo 2023.pptx
Ricardo - Meetup Python Madrid marzo 2023.pptxRicardo - Meetup Python Madrid marzo 2023.pptx
Ricardo - Meetup Python Madrid marzo 2023.pptx
 
Azure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realAzure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo real
 
Evolucion de big data @ mercadolibre.com
Evolucion de big data @ mercadolibre.comEvolucion de big data @ mercadolibre.com
Evolucion de big data @ mercadolibre.com
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
Gánale la partida a tu SQL Server, configuración ideal para que todo vaya bie...
 
Gapand2017 rediscahe
Gapand2017 rediscaheGapand2017 rediscahe
Gapand2017 rediscahe
 
Ahorre hasta un 90% en ambientes productivos con instancias Spot
Ahorre hasta un 90% en ambientes productivos con instancias SpotAhorre hasta un 90% en ambientes productivos con instancias Spot
Ahorre hasta un 90% en ambientes productivos con instancias Spot
 
Oracle GG presentacion
Oracle GG presentacionOracle GG presentacion
Oracle GG presentacion
 
Lado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxiLado oscuro de big data y el ingeniero del siglo xxi
Lado oscuro de big data y el ingeniero del siglo xxi
 
Escalabilidad en azure web sites y sql database
Escalabilidad en azure web sites y sql databaseEscalabilidad en azure web sites y sql database
Escalabilidad en azure web sites y sql database
 
Ahorre hasta un 90% en ambientes productivos con instancias spot
Ahorre hasta un 90% en ambientes productivos con instancias spotAhorre hasta un 90% en ambientes productivos con instancias spot
Ahorre hasta un 90% en ambientes productivos con instancias spot
 
Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vuelo
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
 
[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina
 
AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...
AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...
AWS Presentacion Universidad de los Andes "Escalando para sus primeros 10 Mil...
 
Migrando Rails Apps entre Cloud y Bare Metal Servers
Migrando Rails Apps entre Cloud y Bare Metal ServersMigrando Rails Apps entre Cloud y Bare Metal Servers
Migrando Rails Apps entre Cloud y Bare Metal Servers
 
Deep Learning, Python, C# y Azure
Deep Learning, Python, C# y AzureDeep Learning, Python, C# y Azure
Deep Learning, Python, C# y Azure
 
Técnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql serverTécnicas avanzadas para resolver tus problemas de sql server
Técnicas avanzadas para resolver tus problemas de sql server
 
Scrum para uno
Scrum para unoScrum para uno
Scrum para uno
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
 

Escalando hasta las 10.000 peticiones por segundo

  • 1. Escalando  hasta  las  10.000   pe1ciones  por  segundo   Sergio  Arroyo  Cuevas   sergio.arroyo@taptapnetworks.com   @delr3ves  
  • 2.
  • 4.
  • 5.
  • 6. Proveedor  de   campañas   Proveedor  de   “escaparates”   inventario   AdServer   Forecas1ng  
  • 7.
  • 8. SSP   AdExchange   Subasta   DSP   Bidder   SDK   1.  Dame   anuncios   2.  Hay  un  escaparate    disponible,     ¿cuánto  me  dais?  
  • 9. •  ¿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  
  • 11.
  • 12.
  • 13. Redis   Storm   Hadoop   MongoDB   Amazon  S3  
  • 16. Round  0   DRPCSpout   BidRequest   Crea1vi1es   RequestLog   RetrieveCampaignsByGeohash   CampaignCrea1vi1es   PacingReached   IsAc1ve   Scheduling   FrequencyCapping   BlockedByPublisher   Intersec1on   CalculateWinner   BidResponse   ResultLog  
  • 18. ¡40  QPS!   ¿Seguro?   KO Dev Team Bidder
  • 19. •  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  
  • 20. •  Paralelizar  1ene  un  sobre-­‐coste   •  La  serialización  es  cara  y  aburrida  de   programar       Round  1   DRPCSpout   CojoBolt   RequestLog  ResponseLog  
  • 21. ¡500  QPS!   ¿Seguro?   KO Dev Team Bidder
  • 22. •  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  
  • 26. ¡500  QPS!   ¿Seguro?   KO Dev Team Bidder
  • 27. •  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  
  • 28. •  Monitorizar  es  importante  para  nosotros   Round  3  
  • 29. Round  3   CORE   PORTS   ADAPTERS  
  • 30. Round  3   CORE   STORM   REDIS  
  • 31. Round  3   CORE   DROPWIZARD  +  STORM   MONGO  +  REDIS  
  • 33. 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());! ...!
  • 35. 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());! "}! }  
  • 36.
  • 37.
  • 38. ¡3500  QPS!   ¡¡Seguro!!   KO Dev Team Bidder
  • 42. •  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  
  • 43.
  • 44. 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  
  • 45. “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  
  • 46. •  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  
  • 47. Cuidado  con  el  tamaño  del  heap  
  • 48. •  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  
  • 49. Cada  pieza  del  puzzle  es  mo1vo  de   preocupaciones.   Sobreingenieria  es  evil  
  • 50. •  Miedo  al  cambio.   •  Sen1miento  de  pertenencia.   •  Ser  exesivamente  conservador.   •  Fíate  de  tus  ins1ntos.   “La  inercia  te  frena  ¿WTF?”  
  • 52. 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! info@sonatalocal.com! @TAPTAP_Networks & @SONATAlocal!