Aguentando porrada na Black Friday 2014

As vitrines de personalização da Chaordic estão integradas nos maiores e-commerces do país, o que na prática significa que cerca de 40% dos pedidos do e-commerce nacional passam pelos nossos sistemas.

Atender a essa enorme quantidade de requisições com qualidade é um grande desafio, especialmente em época de Black Friday. Em 2011 a Chaordic atingiu um pico de 70 mil requisições por minuto (RPMs) durante a Black Friday. Em 2012 foram cerca de 200 mil RPMs e em 2013 foram 313 mil RPMs (mais de 5 mil requisições por segundo). A figura abaixo mostra o pico de RPMs nas últimas 3 edições da Black Friday (em milhares de RPMs).

Alt text

A ansiedade pela chegada da Black Friday todos os anos é tanta que nós até fazemos um bolão pra ver quem acerta o pico máximo de RPM. Para este ano estamos esperando picos de até 650k rpms (mais de 10 mil por segundo) e o tempo de resposta não pode passar de 70ms! =]

Como responder rapidamente?

A figura abaixo, mostra um breve resumo da arquitetura que montamos para atender toda esta demanda com qualidade.

Alt text

As requisições primeiramente chegam ao ELB (Elastic Load Balancer) da Amazon, que distribui as mesmas para as máquinas do OnSite Server, um sistema escrito em Node.js e otimizado para alta capacidade de processamento em paralelo. Caso a requisição seja relativa ao carregamento de recomendações, uma consulta ao cache do Redis é feita, garantindo baixos tempos de resposta.

Se a informação não estiver presente no Redis, então o OnSite Server dispara uma requisição ao Platform, um sistema altamente disponível que utiliza a base de dados Cassandra. Atualmente contamos com 48 servidores em nosso cluster, um dos maiores clusters dessa tecnologia da América Latina, de acordo com informações obtidas no último Cassandra Summit.

O Platform, por sua vez, tenta acessar a informação dentro de seu próprio cache Redis e, caso esta informação ainda não esteja ali presente, uma consulta ao Cassandra é feita. O sistema de cache que usamos é bastante eficiente e apenas 10% das requisições de leitura que recebemos chegam até a base de dados. Este é o principal fator que contribui para a velocidade de nossos sistemas.

E como garantir alta disponibilidade?

Os sistemas da Chaordic estão distribuídos em diferentes Availability Zones (AZs) da Amazon. Ou seja, se uma AZ por ventura sofrer algum tipo de problema, os servidores em uma outra AZ conseguem dar conta do recado. Além disso, o próprio Cassandra garante alta disponibilidade, com sua arquitetura completamente descentralizada (sem ponto único de falha) e estratégia de replicação de dados em múltiplos data-centers.

Outro componente importante desta arquitetura é o escalonamento automático das máquinas. Se por ventura houver um incremento expressivo do número de acessos, novas máquinas são lançadas automaticamente para garantir o desempenho. O mesmo acontece em caso de falha de algum servidor, que automaticamente é substituído por outro saudável.

Além dos componentes citados anteriormente, fazemos a gestão de streaming com Kafka e algumas entidades são armazenadas e indexadas no Elastic Search, mas isto ficará para um outro post.

Monitoramento

Mesmo com uma arquitetura robusta, pequenos problemas acontecem e precisamos agir antes que estes pequenos problemas tornem-se grandes problemas. =]

Investimos bastante em sistemas de monitoramento e alerta de nossa infraestrutura. Só no Librato, são mais de 40 mil métricas coletadas por minuto. Já publicamos no Monkeys um post sobre monitoramento e análise em tempo real.

Época de Black Friday é operação de guerra. Todos caórdicos muito atentos ao gráficos, alertas e logs de sistema.

Alt text

E que venha a próxima!