Stream Processing

Me
Eu faço perguntas em reuniões que eu não sei nada e reunião explode; não é de propósito
Me chamaram de Mini Hitler
Lista de pontos de presença da Azion

O que é uma CDN

Por que isso é importante?

  • Os clientes são cobrados pelo tráfego que passa pela CDN.
  • Queremos mostrar o consumo em tempo real.
  • ... para todos os clientes.

Como resolver isso?

Poderíamos simplesmente ir somando o total

... se não tivéssemos várias máquinas processando.

Como resolver isso?

Poderíamos mandar todos os dados para um banco de dados e ir marcando os registros como processados

... se isso não significasse que o banco cresceria infinitamente.

... a não ser que registros antigos fosse apagados.

... que é o que serviços de mensageria fazem.

Message Brokers

Kafka Logo RabbitMQ Logo AWS SQS Logo ZeroMQ Logo

Batch Processing

sudo cat /etc/shadow | cut -d ':' -f 2 | sort | uniq -c
  • Entrada: conteúdo do arquivo /etc/shadow
  • Processamento: capturando o segundo campo separado por ":"
  • Agrupamento: ordenamento dos dados (sort + uniq)
  • Saída: total de duplicados (ainda uniq)

Batch processing seria o caso de processar os dados de um dia.

Se novos dados entrassem no total do dia, bastaria reprocessar os dados do dia.

ou do mês, ou do ano.

Apache Spark Logo Apache Hadoop Logo

Programação Funcional

Buzzwords!

  • Teoria das Categorias!
  • Monads!
  • Functors!

Funções Puras

Uma função é considerada pura se ela sempre retorna o mesmo resultado para os mesmos parâmetros.

def mult(a):
    return a * 4
mult(2)
8
mult(2)
8
class LightSwitch:
    def __init__(self):
        self.state = False

    def switch(self):
        self.state = not self.state
        print(self.state)
light = LightSwitch()
light.switch()
True
light.switch()
False
print()
INSERT INTO table (value, value)

Imutabilidade

Uma vez que o dado é gerado, ele nunca muda.

(Transparência referencial)

  • map()
  • reduce()
  • fold()
  • (map lambda iterator)
  • (reduce lambda iterator)
  • (fold lambda iterator start)
  • map: transforma cada um dos elementos do iterador através do função lambda em uma nova lista.
  • reduce: remove elementos do iterador que não sejam verdadeiros pelo lambda e produz uma nova lista.
  • fold: converte todos os elementos da lista em um único valor, começando com um valor adicionar (por exemplo, sum).