Uma versão mais curta da apresentação anterior (FISL / TDC) para o grupo de arquitetura da ThoughtWorks Brasil. Atualizada com exemplos mais recentes da utilização de Stream Processing (em produção) por grandes empresas como Uber e Spotify.
6. 6
Batch Processing
● Batch Processing no sentido de grandes operações que
ocorrem sobre conjuntos de dados de forma não-interativa
● Processamento de folha de pagamento
MapReduce
7. 7
Stream Processing
● Stream Processing no sentido de pipelines de dados para o
processamento de fluxos de dados contínuos
● Processamento dos Trending Topics do Twitter
13:00 14:008:00 9:00 10:00 11:00 12:00 Processing Time
14. 14
Como isso surgiu?
● Dataflow relacional
● Surge como uma evolução sobre os Bancos de Dados
Relacionais
● Solução de problemas específicos
● Operações financeiras
● Monitoramento de logística
● Monitoramento de fábricas
15. 15
Explosão de abordagens relacionada
Devido às necessidades de processamento de larga escala das
empresas de internet (e.g. Google, LinkedIn, Twitter)
● Complex Event Processing (CEP)
● Event Sourcing
● Baseado nos conceitos de DDD do ambiente corporativo
● Reactive programming
● Reactive manifesto
“[…] queremos sistemas que sejam responsivos,
resilientes, elásticos e orientados a mensagens. Nós
chamamos esses sistemas de Sistemas Reativos”
17. 17
Como realmente funciona?
● Conceitos fundamentais
● Como processar a entrada/saída de dados?
● Data Source / Data Sink
● Como realizar transformações sobre os dados?
● PEs (Elementos processadores)
● Como representar os passos do processamento?
● DAG (Grafo direcionado acíclico)
● Como particionar o processamento? Janelas?
● Windowing
● Event time
● Processing time
30. 30
Como programamos?
● Apache Beam
● Combinação de Batch e strEAM
● Projeto da Apache criado em Janeiro de 2016
● Esforço para unificar batch processing e stream processing
● API funcional suportada por diversos projetos:
● Apache Spark
● Apache Flink
● Google Dataflow
31. 31
Resultados de um time por hora
gameEvents.
[… input …]
.apply(“LeaderBoardTeamFixedWindows”, Window
.<GameActionInfo>into(FixedWindows.of(
Duration.standardMinutes(Durations.minutes(60))))
.triggering(AfterWatermark.pastEndOfWindow()
.withEarlyFirings(
AfterProcessingTime.pastFirstElementInPane()
.plusDelayOf(Durations.minutes(5)))
.withLateFirings(
AfterProcessingTime.pastFirstElementInPane()
.plusDelayOf(Durations.minutes(10)))
.withAllowedLateness(
Duration.standardMinutes(120))
.accumulatingFiringPanes())
.apply(“ExtractTeamScore”,
new ExtractAndSumScore(“team”))
[… output …]
33. 33
Netflix
● Múltiplas ferramentas, seguindo o mantra de “Freedom and
Responsability” da empresa
● Utilizado massivamente para análise de dados, em múltiplos
casos de uso: Visualização de vídeos, Atividades na UI, Logs
de erros, dentre outros.
● Inicialmente, agrupamento de dados e jobs MapReduce
através do Apache Chukwa
● Métricas operacionais (telemetria) através do Netflix Atlas
(Time series database)
● Insights em real-time e exploração através do Netflix Mantis
● Mais recentemente, Keystone SPaaS (Stream Processing as a
service): Apache Samza / Apache Flink
39. 39
Uber
● O Uber utiliza fortemente Stream Processing para gerar
visualizações e insights sobre seus dados
● Eles utilizam ferramentas open source conhecidas como
Apache Samza e Apache Spark
● Mais recentemente, foi criado o projeto AthenaX, que utiliza
a engine do Apache Flink para criar uma solução integrada
de Stream Processing que provê uma interface SQL-like para
as consultas
42. 42
Uber - AthenaX
● 70% das consultas são feitas utilizando a interface SQL-like
● Agrupamento de ordens feitas para o Restaurant Manager
do Uber EATS em janelas fixas nos últimos 15 minutos
43. 43
Uber - AthenaX
● Ganhos potenciais dos restaurantes no Restaurant
Manager do Uber EATS agrupados em janelas deslizantes
pelos últimos 15 minutos
45. 45
Spotify
● Trabalham com arquitetura lambda, inicialmente com
Apache Storm (Stream) e Hadoop/Hive (Batch) e, após terem
movido a infraestrutura para o Google Cloud em 2014,
utilizam Dataflow (Stream) e BigQuery (Batch).
● Utilizavam Apache Kafka como mensageria e moveram-se
para o Pulsar (Google Cloud Pub/Sub)
● Utilizam Stream Processing para recomendação, detecção
de bugs através de análise de logs, targeting de ads, dentre
outros.
49. 49
Zalando
● Uma das maiores empresas de retail da Europa, utiliza
Apache Flink para monitoramento de processos de negócio
● Monitoramento de eventos de ordem de compra
(ORDER_CREATED), onde as diversas partes
(PARCEL_SHIPPED) devem ser entregues respeitando um
certo threshold (e.g. 7 dias), caso contrário deve ser
disparado um evento de cancelamento
(THRESHOLD_EXCEEDED)
52. 52
Importância & Desafios
● Importância
● Resolve diversos dos problemas no processamento de
dados de diversas tecnologias emergentes, tais como:
● Internet das coisas (IoT)
● Aplicações móveis em larga escala
● Desafios
● Como unificar as diferentes APIs/Vendors
● Como integrar diferentes abordagens de Stream
Processing
● Confiabilidade / Semântica / Tolerância a falhas
53. 53
Tópicos para Discussão
● Sempre precisamos de batch jobs em nossos sistemas?
Quando utilizar uma arquitetura lambda ou uma arquitetura
kappa? Quais os prós-e-contras?
● Reactive Programming, Event Storming e Stream Processing,
como se relacionam?
● Realmente precisamos de frameworks de Stream
Processing? Quão difícil é construir sistemas reativos
customizados para os nossos clientes?
● Qual a diferença das frameworks de Stream Processing e
Time-series databases? Em quais casos de uso devemos
optar por um ou outro?
54. Obrigado!
Para mais perguntas e sugestões:
Otávio Carvalho
ocarvalh@thoughtworks.com
@otaviocarvalho
ThoughtWorks Brazil – Porto Alegre Office