Case	TailTarget:	infraestrutura	e	
modelo	de	desenvolvimento	
Fernando	Babadopulos	
@babadopulos
Nuvem	
Aplicação	Escalável	
Automa4zar	Tarefas	
Deploy	Con=nuo	
Integração	Con=nua	
Testes	Automa4zados
Arquiteturas	Escaláveis	
Arquitete	para	pelo	menos	3	
Assuma	que	alguma	coisa	irá	falhar	
Isole	os	seus	serviços
Architec4ng	for	Scalability	
SHARED	NOTHING
Shared	Nothing	
App	Server	1	 App	Server	2	 App	Server	3	
Cache	1	 Cache	2	 Cache	3	
DB	1	 DB	2	 DB	3
Shared	Nothing	
App	Server	1	 App	Server	2	 App	Server	3	
Cache	1	 Cache	2	 Cache	3	
DB	1	 DB	2	 DB	3	
Cache	4	
-  Sem	ser...
Shared	Nothing	
Play	Framework	 Play	Framework	 Play	Framework	
Redis	Shard	1/
Replica	1	
Redis	Shard	2/
Replica	1	
Redis	...
Escalando	
Use	o	poder	da	
Nuvem	
mas	use	os	seus	
DADOS!
Predição	de	Tráfego	–	Por	que?	
Pode	demorar	muitos	minutos	para	ter	uma	
máquina	no	ar,	até	horas.	Dá	para	esperar	tudo	
...
Predição	de	Tráfego	
700	
800	
900	
1000	
1100	
1200	
1300	
1400	
1500	
1600	
1	 3	 5	 7	 9	 11	 13	 15	 17	 19	 21	 23	 2...
Predição	de	Tráfego	
700	
800	
900	
1000	
1100	
1200	
1300	
1400	
1500	
1600	
1	 3	 5	 7	 9	 11	 13	 15	 17	 19	 21	 23	 2...
Predição	de	Tráfego	
700	
800	
900	
1000	
1100	
1200	
1300	
1400	
1	 3	 5	 7	 9	 11	 13	 15	 17	 19	 21	 23	 25	 27	 29	 3...
Predição	de	Tráfego	
700	
800	
900	
1000	
1100	
1200	
1300	
1400	
1500	
1	 3	 5	 7	 9	 11	 13	 15	 17	 19	 21	 23	 25	 27	...
Muitas	vezes	você	não	precisa	
processar	todos	os	seus	dados
705.166	
1.288.822.081	
62ms	
1,5h
6.931	
12.678.931	
x	1.190.642.440		
651.448	
=	 12.667.692	
Erro	≈	0.088%
Total	de	registros	conhecido	
amostragem	
Total	de	registros	amostrados
REDIS	01	 REDIS	02	 REDIS	03	 REDIS	04	 REDIS	05	
for (Jedis jedis : cluster.getAllShards()) {
}
long dbSize = jedis.dbSiz...
F	 0.728	 OUT	
Tamanho	da	amostra	final	
A
0.461	
B	
0.352	
C
0.831	
D	
0.314	
E
0.816	F	 0.728	
IN
Reservoir	Sampling	Distribuído	
1	 2	 3	 4	 5	
A:0.1	B:0.3	C:0.2	D:0.7	E:0.9	F:0.11		
G:0.4	H:0.6	I:0.76	
J:0.8	K:0.2	L:0....
Reservoir	Sampling	Distribuído	
O	 L	 P	 I	 Z	
1	 2	 3	 4	 5	
A:0.1	B:0.3	C:0.2	D:0.7	E:0.9	F:0.11		
G:0.4	H:0.6	I:0.76	
J...
Reservoir	Sampling	Distribuído	
import org.apache.crunch.lib.Sample;
Sample.reservoirSample(PCollection<T> input, int samp...
Case	TailTarget:	infraestrutura	e	
modelo	de	desenvolvimento	
Fernando	Babadopulos	
@babadopulos
CASE | Tail Target - Arquiteturas Escaláveis
Próximos SlideShares
Carregando em…5
×

CASE | Tail Target - Arquiteturas Escaláveis

401 visualizações

Publicada em

Nesta apresentação, Fernando Babadopulos apresenta o case da Tail Target - Arquiteturas Escaláveis.

TOTVS. Juntos, fazemos melhor.

Aproveite também para conferir as novidades no site da TOTVS. Acesse: http://www.totvs.com. Ficou interessado? Agende uma visita com um de nossos consultores: https://www.totvs.com/contatos.

Siga a TOTVS nas redes sociais:
Facebook: https://www.facebook.com/totvs
Twitter: https://twitter.com/TOTVS
LinkedIn: https://www.linkedin.com/company/totvs

Publicada em: Negócios
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
401
No SlideShare
0
A partir de incorporações
0
Número de incorporações
12
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

CASE | Tail Target - Arquiteturas Escaláveis

  1. 1. Case TailTarget: infraestrutura e modelo de desenvolvimento Fernando Babadopulos @babadopulos
  2. 2. Nuvem Aplicação Escalável Automa4zar Tarefas Deploy Con=nuo Integração Con=nua Testes Automa4zados
  3. 3. Arquiteturas Escaláveis Arquitete para pelo menos 3 Assuma que alguma coisa irá falhar Isole os seus serviços
  4. 4. Architec4ng for Scalability SHARED NOTHING
  5. 5. Shared Nothing App Server 1 App Server 2 App Server 3 Cache 1 Cache 2 Cache 3 DB 1 DB 2 DB 3
  6. 6. Shared Nothing App Server 1 App Server 2 App Server 3 Cache 1 Cache 2 Cache 3 DB 1 DB 2 DB 3 Cache 4 -  Sem server-side session -  Sem sMcky sessions
  7. 7. Shared Nothing Play Framework Play Framework Play Framework Redis Shard 1/ Replica 1 Redis Shard 2/ Replica 1 Redis Shard 1/ Replica 2 MongoDB Master MongoDB Slave 1 MongoDB Slave 2 Redis Shard 2/ Replica 2
  8. 8. Escalando Use o poder da Nuvem mas use os seus DADOS!
  9. 9. Predição de Tráfego – Por que? Pode demorar muitos minutos para ter uma máquina no ar, até horas. Dá para esperar tudo isso? Evite falsas quedas de tráfego
  10. 10. Predição de Tráfego 700 800 900 1000 1100 1200 1300 1400 1500 1600 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 Requests Requests
  11. 11. Predição de Tráfego 700 800 900 1000 1100 1200 1300 1400 1500 1600 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 Requests Requests Linear (Requests)
  12. 12. Predição de Tráfego 700 800 900 1000 1100 1200 1300 1400 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 Requests Requests Linear (Requests)
  13. 13. Predição de Tráfego 700 800 900 1000 1100 1200 1300 1400 1500 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 Requests Predicted Traffic Linear (Requests)
  14. 14. Muitas vezes você não precisa processar todos os seus dados
  15. 15. 705.166 1.288.822.081 62ms 1,5h
  16. 16. 6.931 12.678.931 x 1.190.642.440 651.448 = 12.667.692 Erro ≈ 0.088%
  17. 17. Total de registros conhecido amostragem Total de registros amostrados
  18. 18. REDIS 01 REDIS 02 REDIS 03 REDIS 04 REDIS 05 for (Jedis jedis : cluster.getAllShards()) { } long dbSize = jedis.dbSize(); String key = jedis.randomKey(); String value = jedis.get(key); . . . . .
  19. 19. F 0.728 OUT Tamanho da amostra final A 0.461 B 0.352 C 0.831 D 0.314 E 0.816 F 0.728 IN
  20. 20. Reservoir Sampling Distribuído 1 2 3 4 5 A:0.1 B:0.3 C:0.2 D:0.7 E:0.9 F:0.11 G:0.4 H:0.6 I:0.76 J:0.8 K:0.2 L:0.54 M:0.4 N:0.21 O:0.33 P:0.56 Q:0.32 R:0.23 S:0.21 T:0.32 U:0.22 V:0.7 X:0.12 Y: 0.23 W:0.3 Z:0.76 private SortedMap<Double, MyObject> reservoir; ... if (reservoir.size() < SAMPLE_SIZE) { reservoir.put(score, myObject); } else if (score > reservoir.firstKey()) { reservoir.remove(reservoir.firstKey()); reservoir.put(score, myObject); }
  21. 21. Reservoir Sampling Distribuído O L P I Z 1 2 3 4 5 A:0.1 B:0.3 C:0.2 D:0.7 E:0.9 F:0.11 G:0.4 H:0.6 I:0.76 J:0.8 K:0.2 L:0.54 M:0.4 N:0.21 O:0.33 P:0.56 Q:0.32 R:0.23 S:0.21 T:0.32 U:0.22 V:0.7 X:0.12 Y: 0.23 W:0.3 Z:0.76 H:0.6 D:0.7 E:0.9 F:0.11 I:0.76 R:0.23 Q:0.32 O:0.33 L:0.54 P:0.56 S:0.21 U:0.22 Y:0.23 T:0.32 Z:0.76 COMBINER
  22. 22. Reservoir Sampling Distribuído import org.apache.crunch.lib.Sample; Sample.reservoirSample(PCollection<T> input, int sampleSize) Apache Crunch:
  23. 23. Case TailTarget: infraestrutura e modelo de desenvolvimento Fernando Babadopulos @babadopulos

×