Por dentro de uma Arquitetura de Sistema capaz de vencer a Black Friday

A Black Friday segue no nosso radar, já que agora faltam menos de 3 meses para o grande evento do ecomerce nacional. Na semana passada, iniciamos um bate-papo sobre o assunto, tendo como foco a preparação de um ecommerce para obter o melhor desempenho de vendas possível.

Neste post, seguimos debatendo o tema, desta vez com dois Diretores de Engenharia da plataforma de ecommerce VTEX: Demetrius Nunes e Renato Fernandes. A startup é organizadora do VTEX Day, evento que reúne grandes nomes do cenário nacional e internacional para falar sobre negócios e transformação digital. Mas é com a Black Friday que a platafoma da VTEX possui uma história de sucesso e, porque não dizer, “total superação”. Afinal, foi com as boas e as más experiências pelo caminho (e sobretudo passando por muito sufoco!) que o Diretor de Engenharia Renato Fernandes ajudou a consolidar a plataforma de ecommerce com total atenção para as boas práticas de SRE.

Práticas essas que ele compartilha no webinar conduzido por nosso CEO, Bruno Pereira, [veja o vídeo na íntegra abaixo] e que teve também Demetrius Nunes como convidado especial. Neste post, você acompanha os principais pontos dessa conversa:

Pereira: Como foi a migração de um datacenter mais tradicional para a nuvem, foi mais ou menos na mesma época em que começou a ter BF, como foi isso?

Renato Fernandes: Na primeira Black Friday ainda não estávamos em nuvem, mas isso foi há muitos anos. A gente já tinha alguns sistemas rodando em nuvem, mas o core principal ainda estava em um datacenter. Daí na Black Friday seguinte, lá por 2013 e 2014, já estávamos rodando tudo na nuvem mesmo.

Pereira: Para uma empresa que deseja entrar no canal online, tipicamente quais são os componentes que fazem parte da oferta da VTEX?

Demetrius Nunes:
Uma das estratégias em que a VTEX atua, é que não fazemos a loja para os nossos clientes: a gente provê a plataforma de tecnologia, com times de desenvolvimento externo, muitas vezes do próprio cliente, e são eles quem trabalham em cima da nossa plataforma. Então, de certa forma, nós somos uma espécie de “AWS para ecommerce”. Talvez mais um Heroku que uma AWS, já que provemos features de mais alto nível. Na verdade, procuramos pensar o site de uma maneira geral: uma loja com catálogo, uma busca, o carrinho de compras; mas isso tudo é apenas a ponta do iceberg daquilo que é mais visível para o usuário.

Por trás disso tem toda uma cadeia de valor que passa pela própria administração da loja, então envolve todo o back-office, que não é uma coisa simples; é um produto bem mais complexo que a frente de loja em si porque, na prática, é necessário receber e gerir pedidos, o que envolve também toda a parte de mensageria com o usuário, a parte da logística de como o produto irá chegar na casa do cliente, a integração com meios de pagamento, preços e promoções. A VTEX também tem capacidade de conexão com marketplaces externos e geração de marketplaces também. Ou seja, nossos clientes podem ser marketplaces que integram vendedores terceiros para venderem ali, então já dá para imaginar a quantidade de componentes que a gente tem. 

A estratégia da VTEX é oferecer uma plataforma integrada, já que temos todos esses recursos nativos na plataforma. E se o cliente preferir substituir algum desses componentes por algum que ele já trabalha, é possível também. Além disso, a gente tem arquitetura de extensibilidade, que a gente chama de VTEX.io, onde oferecemos uma parte nativa superintegrada e pronta para virar uma loja no ar em pouco tempo; por outro lado, se o cliente desejar criar funcionalidades específicas para a sua loja, tanto no backend como no frontend oferecemos uma arquitetura específica com APIs e componentes para construir e gerenciar features usando a plataforma da VTEX. Não precisa se preocupar com infra, o que é mais um diferencial nosso.

Pereira: Como vocês lidam com tolerância a falhas (failover), trazendo uma capacidade para o cliente de seguir funcionando, indendente do que falhou?

Renato Fernandes: Vou usar o exemplo dos meios de pagamento. A plataforma da Vtex procura sempre oferecer a melhor experiência possível para quem está fazendo a compra. Então quando estamos no fechamento de compra, procuramos transacionar o pagamento na hora, para a pessoa saber se o pagamento foi aceito ou não foi, por exemplo. Por outro lado, não há a possibilidade da Vtex garantir que todos os parceiros com os quais precisamos nos comunicar no momento dessa compra, tenham a mesma Reliability que nós temos.

Então, como solução para os meios de pagamento, criamos um mecanismo em que, de forma automática e sem que o cliente precise fazer nada, vamos buscando validar a compra dele; porém, se em algum momento, algo começar a falhar, a plataforma começa a acumular e a fechar pedidos de compra de tal sorte que somente depois que a plataforma voltar a funcionar devidamente a gente volte também a processar os pagamentos. Isso já aconteceu nas primeiras Black Friday que participamos.

Alguns não suportavam a carga, principalmente quando virava meia noite. Mas posso dizer que a Vtex não perdeu venda por causa disso, por ser um chaveamento automático: a gente tentava, não conseguia, acumulada os pagamentos, e depois garantíamos que esses pagamentos fossem processados e quem estivesse fazendo a compra fosse notificado se havia dado certo ou não.

Eu posso citar também outro caso, que é a questão da CDN. Claro, se utiliza muito de CDN para fazer entrega rápida de página, mas também pode acontecer da CDN falhar. Então para que isso não aconteça, trabalhamos com mais de um provedor de CDN, e internamente desenvolvemos um sistema de tal forma que se alguma CDN falhar, a gente automaticamente vira o tráfego para outra CDN. Dessa forma, a gente garante que, caso aconteça uma falha de CDN, que impactaria muito a experiência do cliente, a gente manteria a plataforma funcionando.

Pereira: Quando estamos diante de uma plataforma que abstrai a complexidade, precisamos tomar algumas decisões pelo cliente em momentos críticos para simplificar as operações. Então acaba que vocês precisam prever situações de falha e decidir o que é melhor para o cliente em cada caso. Imagino que essa decisão do que é melhor para o cliente em um cenário que talvez ele não soubesse decidir sozinho deva acontecer com múltiplos componentes da plataforma.

Renato Fernandes:
Muitas vezes a intenção é facilitar mesmo, para que o lojista operando o sistema não tenha que tomar algumas decisões que, se fossemos aguardar até que ele pudesse tomar a decisão, talvez já tivesse perdido muitas vendas. Então a plataforma acaba tomando a decisão para ele da melhor forma possível dentro de uma determinada situação. Mas é claro que ele tem a possibilidade de mudar o adquirente se quiser, por exemplo, para isso basta fazer a alteração no back-office e, automaticamente, o sistema dele vai começar a operar do jeito que ele quiser.

Pereira: Outro desafio bem pesado no ecommerce é a questão do estoque. Tipicamente, quando existe um player que é Omnichannel de verdade, com canal mobile e redes de lojas físicas integradas, por exemplo, como isso acontece? Vocês gerenciam a orquestração do processo completo ou vai também uma carga para o parceiro quando existe um cenário multicanal?

Renato Fernandes: A VTex tem a plataforma para que o usuário possa fazer tudo dentro dela. Essa parte de estoque, não importa se é venda online ou em loja física, a gente consegue concentrar tudo dentro da plataforma e gerenciar esse estoque. E garantir que o cliente não vai vender o que não tem.

Demetrius Nunes: A gente tem uma solução Omnichannel nativa que integra estoque online com loja física e vice-versa, mas existem cenários onde o próprio cliente já tem uma solução que ele já construiu ou que é de outro fornecedor, e aí você precisa fazer integrações. Ele vai construir as integrações que precisa, mas tudo através da nossa plataforma.

Pereira: Como funciona, na etapa de Engenharia de Projeto, a introdução de uma nova feature na arquitetura? Como vocês lidam com o processo de teste de carga, antes de ir para a produção?


Renato Fernandes: A plataforma é monitorada o tempo todo. Como você mesmo falou, temos muitas métricas: de latência, de erro, de performance etc. Quando vai chegando um momento decisivo como a Black Friday, nós intensificamos muito os nossos testes de carga. O time de Engenharia todo para, no sentido de se preparar para fazer esse teste, e garantir uma Black Friday tranquila para todo mundo. Em geral, a gente estressa o sistema em até 5 vezes mais do que poderia ser uma carga de Black Friday. Até muito por causa do que você falou: ao longo do ano, vão surgindo muitas features, elas são testadas, avaliadas, só que a carga da Black Friday é diferente, ela acontece de uma forma diferenciada.

Então, em um período bem anterior à Black Friday (geralmente 4 meses) a gente começa a fazer os testes de carga, e conforme vamos pegando alguma variação que possa dar problema no momento da Black Friday, o time de Engenharia começa a consertar isso tudo, até que marcamos a data do teste de carga final, e a partir daí até a Black Friday, não subimos nenhuma versão, para não incluirmos um novo componente no meio de tudo o que já foi testado anteriormente.

Pereira: A VTEX surgiu mesmo antes da AWS, tem todo um ciclo de vida de aplicações de muitos anos. Atualmente, no modelo padrão que vocês adotam para novas aplicações é mais comum usar containers ou serverless? Como funciona hoje a distribuição de runtimes das aplicações?

Renato Fernandes: Realmente, a gente sempre vem evoluindo no desenvolvimento. Os componentes mais novos hoje são todos desenvolvidos para trabalhar dentro de containers. Aí, a depender do tipo de aplicação, pode acontecer de haver um container por nó, mas está dentro de um container. Uma platforma como a Vetx.io, onde os parceiros podem criar seus próprios componentes, quando a pessoa lança um app na plataforma, ela trabalhar dentro de um container, dentro de um cluster de Kubernetes.

Ainda temos serviços que ainda não estão 100% funcionando dentro de containers, mas todos os serviços novos já funcionam dentro do container, até por conta dos benefícios de desenvolvimento por trás, é uma facilidade muito grande porque você tem a “quase” certeza de que o você está desenvolvendo vai funcionar quando subir a aplicação. E engenheiro sabe como acontece aquela coisa do “na minha máquina funciona” (mas lá na hora não funciona)? Bom, isso diminui bastante quando se começa a usar containers. Então é uma grande vantagem, a plataforma Vtex.io inteira funciona baseada em containers, em cluster Kubernetes, e acho que é uma tendência cada vez maior de ser assim.  

Pereira: Quais foram os principais desafios que vocês enfrentaram para que a solução pudesse atender clientes globalmente e praticamente de todos os fusos horários? A Arquitetura precisou evoluir para se tornar multi-região?

Renato Fernandes: A multi-região contempla vários aspectos, de escalabilidade e legais, por exemplo, então tem muita coisa envolvida. É um assunto muito falado, e também inclui a questão da velocidade da performance, que as CDNs ajudam muito a resolver, porque a CDN já tem essa questão da regionalização dos pops, então uma pessoa que está acessando da Europa, cai numa CDN da Europa, e claro que a performance dela será melhor por causa disso. E a questão da multi região é muito importante até por questões de Reliability também. É difícil acontecer algo muito fora do comum, mas quando acontecer, temos que estar preparados para continuar provendo serviços para nossos clientes. Então essa é uma discussão importante; ser só multi-zona não vai atender mais, com certeza, então acho que é um caminho a ser seguido, poder fazer o deploy de uma plataforma em mais de uma região.

Demetrius Nunes: Uma forma de pensar sobre isso, é que temos 3 camadas: uma é multi-CDN, outra é multi-região e outra, além dessa, é multi-cloud. E cada uma delas oferece um nível de redundância e disponibilidade maior, além dos requisitos que o Renato mencionou de poder precisar distribuir não só os dados, mas também o processamento e o tráfego desses dados em vários lugares a partir de questões legais, por exemplo. Estamos nesse caminho de evolução, hoje já temos alguns serviços onde possuímos esse tipo de redundância, mas é uma jornada, é uma coisa que a gente vai continuar evoluindo conforme as nossas fronteiras vão se expandindo. Temos também que correr atrás de atender a esses requisitos, e esse é um caminho de evolução onde eventualmente vamos falar de multi-cloud em algum momento. 

Assista ao vídeo com a íntegra do bate-papo Demetrius Nunes e Renato Fernandes, da plataforma de ecommerce VTEX:

Por dentro de uma Arquitetura de Sistema capaz de vencer a Black Friday

A Black Friday segue no nosso radar, já que agora faltam menos de 3 meses para o grande evento do ecomerce nacional. Na semana passada, iniciamos um bate-papo sobre o assunto, tendo como foco a preparação de um ecommerce para obter o melhor desempenho de vendas possível.

Neste post, seguimos debatendo o tema, desta vez com dois Diretores de Engenharia da plataforma de ecommerce VTEX: Demetrius Nunes e Renato Fernandes. A startup é organizadora do VTEX Day, evento que reúne grandes nomes do cenário nacional e internacional para falar sobre negócios e transformação digital. Mas é com a Black Friday que a platafoma da VTEX possui uma história de sucesso e, porque não dizer, “total superação”. Afinal, foi com as boas e as más experiências pelo caminho (e sobretudo passando por muito sufoco!) que o Diretor de Engenharia Renato Fernandes ajudou a consolidar a plataforma de ecommerce com total atenção para as boas práticas de SRE.

Práticas essas que ele compartilha no webinar conduzido por nosso CEO, Bruno Pereira, [veja o vídeo na íntegra abaixo] e que teve também Demetrius Nunes como convidado especial. Neste post, você acompanha os principais pontos dessa conversa:

Pereira: Como foi a migração de um datacenter mais tradicional para a nuvem, foi mais ou menos na mesma época em que começou a ter BF, como foi isso?

Renato Fernandes: Na primeira Black Friday ainda não estávamos em nuvem, mas isso foi há muitos anos. A gente já tinha alguns sistemas rodando em nuvem, mas o core principal ainda estava em um datacenter. Daí na Black Friday seguinte, lá por 2013 e 2014, já estávamos rodando tudo na nuvem mesmo.

Pereira: Para uma empresa que deseja entrar no canal online, tipicamente quais são os componentes que fazem parte da oferta da VTEX?

Demetrius Nunes:
Uma das estratégias em que a VTEX atua, é que não fazemos a loja para os nossos clientes: a gente provê a plataforma de tecnologia, com times de desenvolvimento externo, muitas vezes do próprio cliente, e são eles quem trabalham em cima da nossa plataforma. Então, de certa forma, nós somos uma espécie de “AWS para ecommerce”. Talvez mais um Heroku que uma AWS, já que provemos features de mais alto nível. Na verdade, procuramos pensar o site de uma maneira geral: uma loja com catálogo, uma busca, o carrinho de compras; mas isso tudo é apenas a ponta do iceberg daquilo que é mais visível para o usuário.

Por trás disso tem toda uma cadeia de valor que passa pela própria administração da loja, então envolve todo o back-office, que não é uma coisa simples; é um produto bem mais complexo que a frente de loja em si porque, na prática, é necessário receber e gerir pedidos, o que envolve também toda a parte de mensageria com o usuário, a parte da logística de como o produto irá chegar na casa do cliente, a integração com meios de pagamento, preços e promoções. A VTEX também tem capacidade de conexão com marketplaces externos e geração de marketplaces também. Ou seja, nossos clientes podem ser marketplaces que integram vendedores terceiros para venderem ali, então já dá para imaginar a quantidade de componentes que a gente tem. 

A estratégia da VTEX é oferecer uma plataforma integrada, já que temos todos esses recursos nativos na plataforma. E se o cliente preferir substituir algum desses componentes por algum que ele já trabalha, é possível também. Além disso, a gente tem arquitetura de extensibilidade, que a gente chama de VTEX.io, onde oferecemos uma parte nativa superintegrada e pronta para virar uma loja no ar em pouco tempo; por outro lado, se o cliente desejar criar funcionalidades específicas para a sua loja, tanto no backend como no frontend oferecemos uma arquitetura específica com APIs e componentes para construir e gerenciar features usando a plataforma da VTEX. Não precisa se preocupar com infra, o que é mais um diferencial nosso.

Pereira: Como vocês lidam com tolerância a falhas (failover), trazendo uma capacidade para o cliente de seguir funcionando, indendente do que falhou?

Renato Fernandes: Vou usar o exemplo dos meios de pagamento. A plataforma da Vtex procura sempre oferecer a melhor experiência possível para quem está fazendo a compra. Então quando estamos no fechamento de compra, procuramos transacionar o pagamento na hora, para a pessoa saber se o pagamento foi aceito ou não foi, por exemplo. Por outro lado, não há a possibilidade da Vtex garantir que todos os parceiros com os quais precisamos nos comunicar no momento dessa compra, tenham a mesma Reliability que nós temos.

Então, como solução para os meios de pagamento, criamos um mecanismo em que, de forma automática e sem que o cliente precise fazer nada, vamos buscando validar a compra dele; porém, se em algum momento, algo começar a falhar, a plataforma começa a acumular e a fechar pedidos de compra de tal sorte que somente depois que a plataforma voltar a funcionar devidamente a gente volte também a processar os pagamentos. Isso já aconteceu nas primeiras Black Friday que participamos.

Alguns não suportavam a carga, principalmente quando virava meia noite. Mas posso dizer que a Vtex não perdeu venda por causa disso, por ser um chaveamento automático: a gente tentava, não conseguia, acumulada os pagamentos, e depois garantíamos que esses pagamentos fossem processados e quem estivesse fazendo a compra fosse notificado se havia dado certo ou não.

Eu posso citar também outro caso, que é a questão da CDN. Claro, se utiliza muito de CDN para fazer entrega rápida de página, mas também pode acontecer da CDN falhar. Então para que isso não aconteça, trabalhamos com mais de um provedor de CDN, e internamente desenvolvemos um sistema de tal forma que se alguma CDN falhar, a gente automaticamente vira o tráfego para outra CDN. Dessa forma, a gente garante que, caso aconteça uma falha de CDN, que impactaria muito a experiência do cliente, a gente manteria a plataforma funcionando.

Pereira: Quando estamos diante de uma plataforma que abstrai a complexidade, precisamos tomar algumas decisões pelo cliente em momentos críticos para simplificar as operações. Então acaba que vocês precisam prever situações de falha e decidir o que é melhor para o cliente em cada caso. Imagino que essa decisão do que é melhor para o cliente em um cenário que talvez ele não soubesse decidir sozinho deva acontecer com múltiplos componentes da plataforma.

Renato Fernandes:
Muitas vezes a intenção é facilitar mesmo, para que o lojista operando o sistema não tenha que tomar algumas decisões que, se fossemos aguardar até que ele pudesse tomar a decisão, talvez já tivesse perdido muitas vendas. Então a plataforma acaba tomando a decisão para ele da melhor forma possível dentro de uma determinada situação. Mas é claro que ele tem a possibilidade de mudar o adquirente se quiser, por exemplo, para isso basta fazer a alteração no back-office e, automaticamente, o sistema dele vai começar a operar do jeito que ele quiser.

Pereira: Outro desafio bem pesado no ecommerce é a questão do estoque. Tipicamente, quando existe um player que é Omnichannel de verdade, com canal mobile e redes de lojas físicas integradas, por exemplo, como isso acontece? Vocês gerenciam a orquestração do processo completo ou vai também uma carga para o parceiro quando existe um cenário multicanal?

Renato Fernandes: A VTex tem a plataforma para que o usuário possa fazer tudo dentro dela. Essa parte de estoque, não importa se é venda online ou em loja física, a gente consegue concentrar tudo dentro da plataforma e gerenciar esse estoque. E garantir que o cliente não vai vender o que não tem.

Demetrius Nunes: A gente tem uma solução Omnichannel nativa que integra estoque online com loja física e vice-versa, mas existem cenários onde o próprio cliente já tem uma solução que ele já construiu ou que é de outro fornecedor, e aí você precisa fazer integrações. Ele vai construir as integrações que precisa, mas tudo através da nossa plataforma.

Pereira: Como funciona, na etapa de Engenharia de Projeto, a introdução de uma nova feature na arquitetura? Como vocês lidam com o processo de teste de carga, antes de ir para a produção?


Renato Fernandes: A plataforma é monitorada o tempo todo. Como você mesmo falou, temos muitas métricas: de latência, de erro, de performance etc. Quando vai chegando um momento decisivo como a Black Friday, nós intensificamos muito os nossos testes de carga. O time de Engenharia todo para, no sentido de se preparar para fazer esse teste, e garantir uma Black Friday tranquila para todo mundo. Em geral, a gente estressa o sistema em até 5 vezes mais do que poderia ser uma carga de Black Friday. Até muito por causa do que você falou: ao longo do ano, vão surgindo muitas features, elas são testadas, avaliadas, só que a carga da Black Friday é diferente, ela acontece de uma forma diferenciada.

Então, em um período bem anterior à Black Friday (geralmente 4 meses) a gente começa a fazer os testes de carga, e conforme vamos pegando alguma variação que possa dar problema no momento da Black Friday, o time de Engenharia começa a consertar isso tudo, até que marcamos a data do teste de carga final, e a partir daí até a Black Friday, não subimos nenhuma versão, para não incluirmos um novo componente no meio de tudo o que já foi testado anteriormente.

Pereira: A VTEX surgiu mesmo antes da AWS, tem todo um ciclo de vida de aplicações de muitos anos. Atualmente, no modelo padrão que vocês adotam para novas aplicações é mais comum usar containers ou serverless? Como funciona hoje a distribuição de runtimes das aplicações?

Renato Fernandes: Realmente, a gente sempre vem evoluindo no desenvolvimento. Os componentes mais novos hoje são todos desenvolvidos para trabalhar dentro de containers. Aí, a depender do tipo de aplicação, pode acontecer de haver um container por nó, mas está dentro de um container. Uma platforma como a Vetx.io, onde os parceiros podem criar seus próprios componentes, quando a pessoa lança um app na plataforma, ela trabalhar dentro de um container, dentro de um cluster de Kubernetes.

Ainda temos serviços que ainda não estão 100% funcionando dentro de containers, mas todos os serviços novos já funcionam dentro do container, até por conta dos benefícios de desenvolvimento por trás, é uma facilidade muito grande porque você tem a “quase” certeza de que o você está desenvolvendo vai funcionar quando subir a aplicação. E engenheiro sabe como acontece aquela coisa do “na minha máquina funciona” (mas lá na hora não funciona)? Bom, isso diminui bastante quando se começa a usar containers. Então é uma grande vantagem, a plataforma Vtex.io inteira funciona baseada em containers, em cluster Kubernetes, e acho que é uma tendência cada vez maior de ser assim.  

Pereira: Quais foram os principais desafios que vocês enfrentaram para que a solução pudesse atender clientes globalmente e praticamente de todos os fusos horários? A Arquitetura precisou evoluir para se tornar multi-região?

Renato Fernandes: A multi-região contempla vários aspectos, de escalabilidade e legais, por exemplo, então tem muita coisa envolvida. É um assunto muito falado, e também inclui a questão da velocidade da performance, que as CDNs ajudam muito a resolver, porque a CDN já tem essa questão da regionalização dos pops, então uma pessoa que está acessando da Europa, cai numa CDN da Europa, e claro que a performance dela será melhor por causa disso. E a questão da multi região é muito importante até por questões de Reliability também. É difícil acontecer algo muito fora do comum, mas quando acontecer, temos que estar preparados para continuar provendo serviços para nossos clientes. Então essa é uma discussão importante; ser só multi-zona não vai atender mais, com certeza, então acho que é um caminho a ser seguido, poder fazer o deploy de uma plataforma em mais de uma região.

Demetrius Nunes: Uma forma de pensar sobre isso, é que temos 3 camadas: uma é multi-CDN, outra é multi-região e outra, além dessa, é multi-cloud. E cada uma delas oferece um nível de redundância e disponibilidade maior, além dos requisitos que o Renato mencionou de poder precisar distribuir não só os dados, mas também o processamento e o tráfego desses dados em vários lugares a partir de questões legais, por exemplo. Estamos nesse caminho de evolução, hoje já temos alguns serviços onde possuímos esse tipo de redundância, mas é uma jornada, é uma coisa que a gente vai continuar evoluindo conforme as nossas fronteiras vão se expandindo. Temos também que correr atrás de atender a esses requisitos, e esse é um caminho de evolução onde eventualmente vamos falar de multi-cloud em algum momento. 

Assista ao vídeo com a íntegra do bate-papo Demetrius Nunes e Renato Fernandes, da plataforma de ecommerce VTEX:

Experimente agora, grátis!