BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias QCon New York 2017: Escalando Event Sourcing para downloads da Netflix

QCon New York 2017: Escalando Event Sourcing para downloads da Netflix

Phillipa Avery, engenheira de software sênior da Netflix e Robert Reta, engenheiro de software sênior da Netflix, apresentaram no QCon Nova York 2017 sua arquitetura baseada em Event Sourcing utilizando Cassandra. Atualmente, esta arquitetura impulsiona o recurso de download no Netflix e foi apontada como responsável por melhorar a flexibilidade, confiabilidade, escalabilidade e capacidade de depuração de seus serviços.

Phillipa Avery explicou que o principal desafio do novo recurso de download era o estado do conteúdo. Ao contrário do conteúdo on-line, que possui um processo de licenciamento sem estado, o conteúdo baixado deve ser rastreado para impor várias regras de negócios, por exemplo, limitando o período de tempo que uma licença pode durar ou através de quantos dispositivos um download pode ser executado ao vivo.

Para poder entender melhor sobre o estado cada recurso, Phillipa Avery explicou como a Netflix decidiu adotar uma arquitetura utilizando Event Sourcing:

"A obtenção de eventos fornece um histórico de transações imutáveis de cada mudança de estado que acontece ao longo do histórico de um cliente"

Através do Event Sourcing, Robert Reta explicou que o modelo de domínio é dividido em conjuntos e cada um desses conjuntos podem ser decomposto em eventos que produzem seu estado atual. O que se destaca é que utilizando esta arquitetura, os próprios conjuntos não são persistidos, apenas os eventos.

Robert Reta destacou três componentes principais que uma arquitetura que utiliza Event Sourcing precisa ter:

Event Store: Normalmente um banco de dados que deverá retornar uma lista de eventos obtidos através de um ID. Esses eventos podem ser re-executados para obter um conjunto em seu estado atual.

Aggregate Repository: Responsável por recuperar eventos da Event Store através de uma query. Um conjunto vazio é criado, e então os eventos são adicionados em sequência a este conjunto para obter o evento no estado correto.

Aggregate Service: Uma abstração que só conhece o modelo de domínio. Este serviço envia pedidos de clientes, impõe as regras de negócios e, em seguida, chama o repositório subjacente.

Para sua implementação, a Netflix escolheu Cassandra como Event Store. Esta escolha deveu-se principalmente à forte escalabilidade e características de desempenho que o Cassandra possui. O Snapshotting também foi implementado, o que significa que, em vez de ter que reproduzir todos os eventos para um conjunto, é possível carregar apenas o snapshot mais recente com o estado do evento.

Isso resultou na necessidade responder apenas aos eventos que vieram após o snapshot. Foi utilizado também o framework Kryo, uma biblioteca de serialização de código aberto escrita em Java. Este framework fornece recursos bastante úteis como o controle de eventos.

Robert Reta também abordou a maneira como eles calculam uma nova permissão de download de ponta a ponta. Primeiramente, um cliente fornece um customer ID e um title ID para um serviço baixado. A partir disso, os conjuntos de download vazios são inicializados e todos os eventos correspondentes são re-executados para levá-los ao estado correto. Finalmente, o serviço aplica regras de negócios para verificar se o usuário atingiu o limite de download ou não.

Phillipa Avery resumiu sua experiência com a arquitetura de Event Sourcing, ressaltando o foco em quatro pontos principais:

Flexibilidade: Quando um novo requisito de negócios exigiu um novo modelo de domínio, a melhor forma encontrada foi implementar este requisito de ponta a ponta, obtendo também o benefício adicional de abster-se totalmente do banco de dados.

Depuração: Os eventos forneceram informações de auditoria completas que ajudaram a dar uma visão de tudo o que acontece no sistema, tornando o diagnóstico simples.

Confiabilidade: Os dois pontos de falha da arquitetura estão na utilização do Cassandra e dos serviços. A experiência do usuário sempre foi a prioridade, então, se algo cair, os padrões legítimos serão retornados. Um exemplo disso é sempre permitir que um usuário faça o download de conteúdo se o serviço de download deixar de funcionar.

Escalabilidade: Cassandra permitiu que o aplicativo escalasse facilmente. O único problema era o espaço em disco, pois há muitos dados de evento. No entanto, ao capturar snapshots, os eventos antes deles podem ser armazenados em discos maiores e mais lentos, já que não precisavam ser carregados enquanto estivesse atendendo à requisições de usuários.

A apresentação completa pode ser vista online, onde podem ser encontradas informações adicionais, como detalhes de implementação mais específicos.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT