APIs e Microsserviços

6 dez, 2016

Como desenvolver uma solução de member get member em 24 horas

Publicidade

Desenvolver uma solução de member get member em 24 horas é, sem sombra de dúvida, um desafio. Com base nisso, o MercadoPago, empresa de solução de pagamentos online do Mercado Livre, chamou de Challenge Weekend o evento interno que realizou, reunindo desenvolvedores da empresa focados nessa missão: desenvolver uma solução de back-end que se encaixasse perfeitamente no aplicativo de ofertas para a Black Friday (Mercado Pago Ofertas). Esse aplicativo estava em processo de desenvolvimento e, por isso, mais do que nunca a comunicação entre as equipes envolvidas foi fundamental para o funcionamento e sucesso do projeto member get member.

A solução

Para atender à proposta nós, os integrantes da equipe vencedora do desafio, pensamos em um sistema separado em duas partes: uma API que provesse os serviços de geração de código de usuário e monitoramento de uma campanha de marketing (member get member) e um sistema de administração onde as campanhas pudessem ser criadas e todo o gerenciamento dos usuários participantes pudesse ser feito.

Buscando um melhor aproveitamento no desenvolvimento da solução, optamos por tecnologias que utilizamos no nosso dia dia dentro da equipe para, dessa forma, evitar problemas inesperados.

Para a API decidimos utilizar Go lang, por se tratar de uma linguagem de alta performance e alta escalabilidade. Para o sistema de administração optamos pela linguagem Node.js, principalmente por oferecer rapidez no desenvolvimento, pois tínhamos apenas 24 horas para entregar a solução completa. O banco de dados escolhido foi o MySQL, por se tratar de um banco de dados relacional e transacional de baixa escala, que atenderia muito bem nossas necessidades.

O desenvolvimento

Em uma hora de conversas e troca de ideias, definimos como seria a arquitetura do sistema e iniciamos o desenvolvimento. Para economizar tempo e acelerar o desenvolvimento, escolhemos trabalhar com alguns frameworks. Na construção da API, para disponibilizar os serviços na web, utilizamos o framework Gin que, sendo de fácil utilização, nos permitiu escrever todas as interfaces das API em poucos minutos. Para a persistência em banco de dados utilizamos o framework Gorm, de uso bem difundido pela comunidade.

Durante o desenvolvimento da API decidimos ter somente dois controladores, o controlador de usuários e o controlador de campanhas. Porém, enquanto desenvolvíamos o controlador de usuários, encontramos uma nova necessidade que não havia sido mapeada na definição da arquitetura da solução. O usuário precisaria receber o seu código promocional via push notification. Conversando com os solicitantes do desenvolvimento verificamos que o push notification seria feito via Firebase, uma solução do Google para facilitar o desenvolvimento e gerenciamento de aplicações mobile, dessa forma, tivemos que adicionar uma integração com o mesmo em nossa API.

Uma vez terminado o desenvolvimento do controlador de usuários, partimos para a criação do controlador de campanhas, quando pudemos utilizar uma das principais virtudes da linguagem Go: as Goroutines. Utilizamos esse poderoso recurso da linguagem para o envio das notificações ao Firebase no processo de fechamento de uma campanha comercial.

Painel administrativo de campanha

A equipe de marketing do Mercado Pago precisava de um painel administrativo onde fosse possível gerenciar as campanhas de member get member. Diante disso, optamos por utilizar o framework express, em node.js, que oferece muitos recursos de fácil implementação.

Escolhemos um padrão MVC o qual é linkavel com Express, muito utilizado em aplicações web. Em seguida, integramos o processo de login ao painel com o protocolo LDAP de nossa rede interna, onde pudemos utilizar as APIs restful do Mercado Pago disponíveis para autenticação; isso nos proporcionou agilidade no desenvolvimento além de facilidade para os usuários do sistema – que podem utilizar suas credenciais padrão de rede. O processo de  integração entre nosso back-end golang e o painel em Node foi todo feito via REST, ou seja todas as interações são realizadas por meio de chamadas GET, POST, PUT ,DELETE.

Fechamento

Depois de 24 horas, já com a solução em mãos, seguimos para a apresentação do nosso desenvolvimento. Para isso, utilizamos um ambiente cloud interno que roda sobre os serviços cloud do Amazon AWS. Por se tratar de uma solução que seria aplicada na semana seguinte, fizemos questão de demonstrar todo o fluxo, desde a inclusão de usuários até o fechamento de uma campanha, com o envio de notificações aos usuários e a elaboração de relatórios para a equipe de Marketing. Após o julgamento da banca, recebemos a notícia de que nossa solução se encaixava perfeitamente à necessidade apresentada. Vencemos o desafio!

Avaliando o processo e o resultado, concluímos que o sucesso se deu pela utilização dos frameworks certos para a aceleração do desenvolvimento combinados com o empenho da equipe, formada por mim, Raphael Cerqueira e Wesley Nascimento, dedicada e comprometida a entregar uma solução simples, escalável e confiável em 24 horas.