Prévia do material em texto
UNIVERSIDADE DE SÃO PAULO ESCOLA DE ENGENHARIA DE SÃO CARLOS DEPARTAMENTO DE ENGENHARIA ELÉTRICA E DE COMPUTAÇÃO Planex - Website de comparação de taxas de câmbio Autor: Gabriela Fusco Mendes Autor: Giuliano Barbosa Prado Professor: Prof. Dr. Evandro Luis Linhari Rodrigues São Carlos 2017 Gabriela Fusco Mendes e Giuliano Barbosa Prado Planex - Website de comparação de taxas de câmbio Trabalho de Conclusão de Curso apresentado à Escola de Engenharia de São Carlos, da Universidade de São Paulo Curso de Engenharia de Computação e Engenharia Elétrica ORIENTADOR: Prof. Dr. Evandro Luis Linhari Rodrigues São Carlos 2017 AUTORIZO A REPRODUÇÃO TOTAL OU PARCIAL DESTE TRABALHO, POR QUALQUER MEIO CONVENCIONAL OU ELETRÔNICO, PARA FINS DE ESTUDO E PESQUISA, DESDE QUE CITADA A FONTE. Barbosa Prado, Giuliano e Fusco Mendes, Gabriela B238p Planex - Website de comparação de taxas de câmbio / Giuliano Barbosa Prado e Gabriela Fusco Mendes; orientador Evandro Luís Linhari Rodrigues. São Carlos, 2017. Monografia (Graduação em Engenharia de Computação e em Engenharia Elétrica) -- Escola de Engenharia de São Carlos e Instituto de Ciências Matemáticas e de Computação da Universidade de São Paulo, 2017. 1. Câmbio. 2. Cotação. 3. Moeda estrangeira. 4. Dólar futuro. 5. Servidor em nuvem. 6. Spring framework. 7. Cliente-servidor. I. Título. Dedicatória Dedicamos primeiramente à Deus, por ter nos dado a oportunidade da realização deste trabalho. Aos nossos pais, irmãos e acompanhantes que, com muito apoio e carinho, não mediram esforços para que chegássemos a essa etapa da vida. Ao curso de Engenharia de Computação e Elétrica e às pessoas que convivemos no curso, por nos auxiliaram no desen- volvimento pessoal e profissional. Aos amigos, por sempre nos apoiarem nos mais diversos momentos da vida. Gabriela Fusco Mendes Giuliano Barbosa Prado Agradecimentos Agradecemos ao professor Dr. Evandro Luis Linhari Rodrigues, nosso orientador, que com todo seu conhecimento e paciência, nos orientou não só nesse trabalho, como na nossa formação acadêmica. Aos funcionários e demais docentes da Escola de Engenharia de São Carlos e do Instituto de Ciências Matemáticas e de Computação pelo indispensável apoio e ensinamento. Gabriela Fusco Mendes Giuliano Barbosa Prado "A diferença entre um homem de sucesso e outro orientado para o fracasso é que um está aprendendo a errar, enquanto o outro está procurando aprender com os seus próprios erros." [Confúcio] Resumo Este trabalho apresenta o planejamento e desenvolvimento de uma aplicação web para estimativa de câmbio baseada em informações fornecidas por usuários e coletadas através do processamento de dados de páginas de operadoras. Para tanto, elencou-se as ferramen- tas mais populares no mercado, bem como padrões de projeto, arquitetura e comunicação no desenvolvimento do back-end e no do front-end. A ideia do projeto nasceu a partir das posições insatisfatórias do Brasil em educação financeira e dos altos spreads cobrados por instituições intermediárias de câmbio. Primeiramente o mercado cambial brasileiro foi estu- dado e seus instrumentos, analisados. O Brasil utiliza o modelo de câmbio flutuante sujo - ou seja, embora o câmbio varie seguindo as leis do mercado, também sofre eventuais interven- ções do Banco Central por meio de derivativos. O objetivo do PlanEx é se consolidar como referência para comparação de dólar turismo e comercial, além de apresentar taxas para ins- trumentos derivativos. Desta forma, todos os instrumentos foram descritos e comparados em detalhe. O website lançou suas primeiras bases por meio do Ambiente de Desenvolvimento Integrado IntelliJ e do framework Spring, que conferiu agilidade e integração ao projeto. O website foi então hospedado no Heroku, servidor em nuvem escolhido por sua simplicidade e praticidade, contando com um sistema gerenciador de base de dados integrado Postgres. Um crawler foi utilizado para mapeamento das páginas das instituições financeiras para obten- ção de suas cotações. A interface do front-end foi construída de forma a deixar a plataforma visual e intuitiva ao usuário. Cotações foram simuladas com diversas instituições e os resul- tados vieram em linha com o esperado. Palavras-Chave: câmbio, cotação, moeda estrangeira, dólar futuro, servidor em nuvem, framework Spring, cliente-servidor. Abstract This work presents the planning and development of a web application to estimate the exchange rate based on the information provided by users and gathered by processing data from pages. In order to do so, it used the most popular tools on the market, as well as design, architectural and communication standards, both in the back-end and front-end development. The idea of the project was conceived from Brazil’s unsatisfactory performance on public financial education and from abusive exchange rates’ spreads charged everyday by financial institutions. The Brazilian exchange market was studied in detail and its instruments, analy- zed. Brazil uses the "dirty"floating exchange rate model - which means that, although the exchange rate varies accordingly to market rules, it also suffers eventual Central Bank in- terventions through derivatives instruments. The objective of PlanEx is to consolidate itself as a reference for the comparison of tourist and commercial dollar, in addition to presenting rates for more refined tools, like derivatives. The website launched its first bases through IntelliJ Integrated Development Environment and the Spring framework - both are responsi- ble for accelerating the development of the application and integrating the several layers of the project. The website was then hosted on Heroku, a cloud server chosen for its simplicity and practicality, with an integrated Postgres database. A crawler was used to map pages of financial institutions in order to obtain their quotes. The front-end interface has been built to make the platform intuitive and visual to the user. Quotations were simulated on PlanEx with several institutions and results were in line with the expected. Keywords: exchange, quotes, foreign currency, future dollar, cloud server, Spring fra- mework, client-server. Lista de Figuras 1.1 Pergunta 1 - Você já viajou para o exterior? Fonte: Própria. . . . . . . . . . . 26 1.2 Pergunta 2 - Qual seu sexo? Fonte: Própria. . . . . . . . . . . . . . . . . . . 27 1.3 Pergunta 3 - Com que frequência, em média, você viaja para o exterior? Fonte: Própria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.4 Pergunta 4 - Quais são seus objetivos principais nas viagens? Fonte: Própria. 28 1.5 Pergunta 5 - Em quais situações você geralmente necessita de câmbio? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.6 Pergunta 6 - Quais métodos de obtenção/pagamentos em moeda estrangeira você utiliza? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.7 Pergunta 7 - Você já pesquisou/sabe a diferença dos impostos cobrados nos métodos da pergunta anterior? Fonte: Própria. . . . . . . . . . . . . . . . . . 30 1.8 Pergunta 8 - Que banco você geralmente utiliza para o cartão de crédito/dé- bito utilizado no exterior? Fonte: Própria. . . . . . . . . . . . . . . . . . . . 31 1.9 Pergunta 9 - Que corretora você normalmente utiliza para comprar papel- moeda? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1.10 Pergunta 10 - Você sabe que, além dos impostos e do valor dólar turismo, é cobrado umspread (margem de compra/venda) pelas instituições financeiras que fornecem câmbio? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . 33 1.11 Pergunta 11 - Você geralmente pesquisa a cotação online da moeda estran- geira antes de comprar? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . 33 1.12 Pergunta 12 - Você conhece algum aplicativo ou website que compara taxas de câmbio de diferentes instituições? Fonte: Própria. . . . . . . . . . . . . . 34 1.13 Pergunta 13 - Se sim, qual? Fonte: Própria. . . . . . . . . . . . . . . . . . . 34 1.14 Pergunta 2 - Qual seu sexo? Fonte: Própria. . . . . . . . . . . . . . . . . . . 35 1.15 Pergunta 3 - Em quais situações você geralmente necessita de câmbio? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.16 Pergunta 4 - Caso você fosse viajar, qual seria a sua opção inicial de câmbio? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.17 Pergunta 4 - Você já pesquisou/sabe a diferença dos impostos cobrados nos métodos da pergunta anterior? Fonte: Própria. . . . . . . . . . . . . . . . . . 37 1.18 Pergunta 5 - Você sabe que, além dos impostos e do valor dólar turismo, é cobrado um spread (margem de compra/venda) pelas instituições financeiras que fornecem câmbio? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . 37 1.19 Pergunta 6 - Você pesquisaria a cotação online da moeda estrangeira antes de comprar? Fonte: Própria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 1.20 Pergunta 7 - Você conhece algum aplicativo ou website que compara taxas de câmbio de diferentes instituições? Fonte: Própria. . . . . . . . . . . . . . . . 38 2.1 Spring IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.1 Arquitetura do projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.2 Modelo Entidade-Relacionamento do banco de dados . . . . . . . . . . . . . 69 3.3 Modelo Relacional do banco de dados . . . . . . . . . . . . . . . . . . . . . 70 3.4 Diagrama da estrutura do Back-End . . . . . . . . . . . . . . . . . . . . . . 71 3.5 Diagrama de classes - Servidor . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.6 Diagrama da estrutura do Front-End . . . . . . . . . . . . . . . . . . . . . . 78 3.7 Diagrama de sequência - Função de adicionar valor . . . . . . . . . . . . . . 82 3.8 Diagrama de sequência - Função de obter cotação . . . . . . . . . . . . . . . 83 3.9 Diagrama de sequência - Função de obter lista de cotações . . . . . . . . . . 84 3.10 Diagrama de sequência - Função de obter lista de provedores . . . . . . . . . 84 4.1 Log do servidor - Crawler. Fonte: Própria. . . . . . . . . . . . . . . . . . . . 87 4.2 Verificação do banco de dados - Crawler. Fonte: Própria. . . . . . . . . . . . 88 4.3 Verificação da página de resultados - addValue . . . . . . . . . . . . . . . . . 88 4.4 Verificação do log - addValue . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.5 Verificação do banco de dados - addValue . . . . . . . . . . . . . . . . . . . 89 4.6 Verificação da página de resultado - getQuote . . . . . . . . . . . . . . . . . 89 4.7 Verificação do log - getQuote . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.8 Verificação da página de resultado - getProviders. Fonte: Própria. . . . . . . . 90 4.9 Verificação do log - getProviders. Fonte: Própria. . . . . . . . . . . . . . . . 90 4.10 Verificação do banco de dados - getProviders. Fonte: Própria. . . . . . . . . . 90 4.11 Verificação da página de resultado - getQuoteList. Fonte: Própria. . . . . . . 91 4.12 Verificação do log - getQuoteList. Fonte: Própria. . . . . . . . . . . . . . . . 91 4.13 Interface do website Melhor Câmbio . . . . . . . . . . . . . . . . . . . . . . 92 4.14 Passo a passo do website Cambiar . . . . . . . . . . . . . . . . . . . . . . . 94 4.15 Interface do website Transferwise . . . . . . . . . . . . . . . . . . . . . . . 94 4.16 Logo do aplicativo Monepp . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.17 Interface do Valor PRO. Fonte: Própria. . . . . . . . . . . . . . . . . . . . . 97 4.18 Fórmulas para cálculo de uma NDF com vencimento no dia 20 de fevereiro de 2018 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.19 Fórmula suporte para cálculo de uma NDF com vencimento no dia 20 de fevereiro de 2018 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.20 Valores calculados para uma NDF com vencimento no dia 20 de fevereiro de 2018. Fonte: Própria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 21 22 23 Sumário 1 Introdução 25 1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.1.1 Pesquisa de Câmbio . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.2 Objetivo(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1.3 Justificativas/relevância . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1.4 Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2 Embasamento Teórico 41 2.1 O Mercado de Câmbio Brasileiro . . . . . . . . . . . . . . . . . . . . . . . . 42 2.1.1 Funcionamento: câmbio flutuante e intervenções . . . . . . . . . . . 43 2.1.2 O Balanço de Pagamentos . . . . . . . . . . . . . . . . . . . . . . . 43 2.1.3 Dólar Comercial e Dólar Turismo . . . . . . . . . . . . . . . . . . . 44 2.1.4 Derivativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.1.5 Mercado de Opções . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.1.6 Mercado de Swaps . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.1.7 Crise Cambial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.2 O Back-End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.2.1 IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.2.2 Build Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.2.3 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.2.4 DAO - Data Access Object . . . . . . . . . . . . . . . . . . . . . . . 51 2.2.5 REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.2.6 Spring Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.2.7 Servidores em nuvem . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3 Material e Métodos 61 24 3.1 Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.1.1 Front-End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.1.2 Back-End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.1.3 IntelliJ IDEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.1.4 Spring Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.1.5 Heroku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.1.6 Crawler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.2 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.2.1 Considerações iniciais . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.2.2 Motivação da arquitetura cliente-servidor . . . . . . . . . . . . . . . 66 3.2.3 Arquitetura do projeto . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.2.4 Banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.2.5 Back-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.2.6 Front-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.2.7 Funcionamento e diagramas de sequência . . . . . . . . . . . . . . . 81 4 Resultados e Discussões87 4.0.1 Verificação das funcionalidades . . . . . . . . . . . . . . . . . . . . 87 4.1 Validação e Experiência do Usuário . . . . . . . . . . . . . . . . . . . . . . 92 4.2 Websites relacionados: oportunidades e concorrência . . . . . . . . . . . . . 92 4.2.1 Inclusão de mais instrumentos finaceiros . . . . . . . . . . . . . . . 95 5 Conclusão 101 5.1 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5.1.1 Utilização de IA para predição . . . . . . . . . . . . . . . . . . . . . 102 5.1.2 Notificações de melhores momentos . . . . . . . . . . . . . . . . . . 102 5.1.3 Substituição do Heroku pela AWS . . . . . . . . . . . . . . . . . . . 103 Referências 103 amssymb gensymb 25 Capítulo 1 Introdução 1.1 Motivação Em uma pesquisa realizada pelo Instituto Gallup sobre analfabetismo financeiro, o Brasil aparece como 68o lugar, com 35% de acertos. Em outra pesquisa, realizada pela Organização para a Cooperação e o Desenvolvimento Econômico (OCDE), o Brasil ficou em 27o lugar em um ranking de 30 países avaliados em educação financeira. [1] Os conhecimentos medidos por essas pesquisas são necessários para otimização de despesas e recebimentos, compre- ensão da atuação do Banco Central e Ministério da Fazenda e melhoria geral do contexto econômico do Brasil. Embora o mercado de renda variável seja constantemente reconhecido como a cara do mercado financeiro (maior volatilidade), o mercado de renda fixa é o que movimenta maior volume e opções de trocas e investimentos. O mercado de câmbio movimenta cerca de 5,3 trilhões de dólares por dia, sendo o maior e mais líquido mercado do mundo. Este mercardo é global e descentralizado e funciona eletronicamente de forma OTC (over-the-counter mer- cado de balcão) [2]. Trocas de câmbio são necessárias a todo tempo, especialmente no Brasil, onde a moeda é não-conversível [3] (um país tem a moeda chamada de conversível quando os agentes, residentes ou não, são capazes de trocar recursos por demais moedas em transações) [4]. Um conjunto de normas elaboradas há mais de 50 anos ainda persiste, gerando distorções e apreciando o prêmio de risco do país. Neste cenário de maior dificuldade de acesso às moedas estrangeiras, comparado com outros países emergentes (a Austrália e o Chile, ambos países com moedas conversíveis, possuem respectivamente 45% e 40% do passivo externo em moeda estrangeira), propõe- se uma solução em tecnologia de informação para que a população e empresas brasileiras 26 tenham maior domínio e conhecimento sobre as taxas que lhe são cobradas para conversão de moedas, além de apresentar produtos novos e soluções para diferentes fluxos de capital e mercadorias. O mercado de câmbio, por sua vez, é feito de investidores institucionais, corporações, bancos, governos e especuladores. Pessoas físicas e pequenas empresas acabam atuando como elementos passivos, sempre sujeitos a flutuações e spreads expressivos. O PlanEx é uma plataforma de comparação de taxas cobradas por casas de câmbio, car- tões de crédito, bancos e índices financeiros, de forma a iluminar regras e práticas de um mercado pouco conhecido pela população e, por consequência, otimizar os planejamentos e investimentos financeiros de pessoas físicas e pequenas empresas. A ideia original do projeto nasceu em janeiro de 2017 como um aplicativo Android educativo sobre produtos de câmbio, capaz de oferecer soluções no mercado futuro para fluxos de pequenas empresas (principal- mente importadoras e exportadoras) e divulgação das regras e cotações do mercado de câmbio para pessoas físicas. A ideia do projeto evoluiu então para uma de maior apelo comercial para pessoas físicas e com potencial de impactar mais pessoas, além da conscientização do público sobre as taxas de câmbio oferecidas pela iniciativa privada. 1.1.1 Pesquisa de Câmbio Uma pesquisa foi realizada durante o desenvolvimento do PlanEx para auxiliar na compre- ensão do nível de conhecimento que se tem a respeito do mercado de câmbio no Brasil. A pesquisa teve início no dia 21 de Setembro e ficou no ar durante um mês, sendo encerrada no dia 21 de Outubro. Foi coletada uma amostra de 104 respostas às perguntas que se seguem com os resultados respectivos: Figura 1.1: Pergunta 1 - Você já viajou para o exterior? Fonte: Própria. 27 1. Você já viajou para o exterior? (104 respostas) • Sim: 83,7% • Não: 16,3% A primeira pergunta realiza a primeira separação de público relevante: a pesquisa busca entender se as pessoas que responderam o formulário possuem contato direto com o viagens internacionais. Esta pergunta, vinculada ao conhecimento demonstrado pelo indivíduo nas demais perguntas, buscam criar um vínculo entre a compreensão do mercado de câmbio e a exposição direta às viagens. Os participantes da pesquisa que responderem afirmativo a esta pergunta são direcionados à Pergunta 2 a seguir. Os demais são endereçados à próxima pergunta 2, mais a frente. Figura 1.2: Pergunta 2 - Qual seu sexo? Fonte: Própria. Esta pesquisa visa identificar o sexo do participante. 28 Figura 1.3: Pergunta 3 - Com que frequência, em média, você viaja para o exterior? Fonte: Própria A Pergunta 3, restrita aos que já viajaram para o exterior, visa se aprofundar na rela- ção entre contato com o exterior e conhecimento acerca das taxas cobradas no mercado de câmbio. Figura 1.4: Pergunta 4 - Quais são seus objetivos principais nas viagens? Fonte: Própria. A Pergunta 4 do primeiro público visa entender as motivações do mesmo. 29 Figura 1.5: Pergunta 5 - Em quais situações você geralmente necessita de câmbio? Fonte: Própria. As seguintes opções podem ser escolhidas para a pergunta 5: • Viagens: 94,3% • Importação de produtos para uso pessoal: 35,2% • Importação de produtos para uso profissional: 9,1% • Assinaturas de sites ou serviços: 22,7% • Alimentação: 1,1% • Compras pela internet com cartão de crédito: 1,1% 30 Figura 1.6: Pergunta 6 - Quais métodos de obtenção/pagamentos em moeda estrangeira você utiliza? Fonte: Própria. Figura 1.7: Pergunta 7 - Você já pesquisou/sabe a diferença dos impostos cobrados nos métodos da pergunta anterior? Fonte: Própria. Esta pergunta é essencial ao PlanEx, que visa conferir visibilidade e espalhar informações a respeito das diferentes taxas que são cobradas em cada método de pagamento. Embora todas as pessoas do primeiro público já tenham ido ao exterior pelo menos uma vez, 31,8% do grupo confessou desconhecer os diferentes impostos cobrados no mercado cambial. 31 Figura 1.8: Pergunta 8 - Que banco você geralmente utiliza para o cartão de crédito/débito utilizado no exterior? Fonte: Própria. O PlanEx realiza comparação de taxas de câmbio de diferentes casas e informações sobre as mais cotadas são muito úteis ao business. 32 Figura 1.9: Pergunta 9 - Que corretora você normalmente utiliza para comprar papel-moeda? Fonte: Própria. Pergunta com motivação similar à Pergunta 8. 33 Figura 1.10: Pergunta 10 - Você sabe que, além dos impostos e do valor dólar turismo, é cobrado um spread (margem de compra/venda) pelas instituições financeiras que fornecem câmbio? Fonte: Própria. Spreads geralmente também vêm embutidos no preço, porém a cobrança pode ser de livre escolha da instituição (respeitando-se a taxa de spread máxima cobrada pela casa). Ao contrário dos impostos, que são fixados de acordo com a natureza da operação, spreads são móveis e podem variar grandemente em diferentes locais e com diferentes clientes. O PlanEx visa identificar as instituições que praticam as melhores políticas de spread. Figura 1.11: Pergunta 11 - Você geralmente pesquisa a cotação online da moeda estrangeira antes de comprar? Fonte: Própria. 34As respostas para a Pergunta 11 mostra que mais pessoas buscam a cotação da moeda (mesmo que não seja um meio uniforme) para realizar algum tipo de comparação. Figura 1.12: Pergunta 12 - Você conhece algum aplicativo ou website que compara taxas de câmbio de diferentes instituições? Fonte: Própria. A Pergunta 12 é, ao fim, a pergunta fundamental do PlanEx. Embora 93,2% dos parti- cipantes tenham alegado geralmente pesquisar cotações online das moedas estrangeiras em questão, meros 21,6% conhecem um aplicativo ou website que o façam. Figura 1.13: Pergunta 13 - Se sim, qual? Fonte: Própria. Embora o website Melhor Câmbio tenha aparecido de formas diferentes em quase 50% das respostas à pergunta 13, o número real de pessoas que citaram o mesmo representa uma pequena parcela do público com experiência internacional (7 em 88 pessoas), representando 35 apenas 7,95% deste público. Conclui-se que o mercado permanece altamente segmentado e ainda sem um vencedor claro (além do desconhecimento) na comparação de taxas de câmbio. As próximas perguntas são relativas ao segundo público, que nunca teve experiência in- ternacional. Os participantes que responderam "Não"à primeira pergunta foram direcionados direto para a pergunta abaixo. As perguntas que são iguais às que foram passadas ao primeiro público possuem a mesma motivação. 18 pessoas fazem parte do segundo público. Figura 1.14: Pergunta 2 - Qual seu sexo? Fonte: Própria. Público majoritariamente masculino no segundo público (72,2% vs. 58% para o primeiro público). Figura 1.15: Pergunta 3 - Em quais situações você geralmente necessita de câmbio? Fonte: Própria. O item "Importação de Produtos para Uso Pessoal"se sobressai na resposta a esta per- gunta. Os seguintes itens estavam disponíveis para resposta: 36 • Importação de produtos para uso pessoal; • Importação de produtos para uso profissional; • Assinatura de sites ou serviços; • Não necessito de câmbio. Figura 1.16: Pergunta 4 - Caso você fosse viajar, qual seria a sua opção inicial de câmbio? Fonte: Própria. As seguintes opções estavam disponíveis para escolha: • Cartão de Crédito; • Cartão de Débito; • Cartão Pré-pago; • Papel-moeda: Corretora de Câmbio; • Papel-moeda: Banco; • Papel-moeda: comprado de desconhecidos; • Transferwise; • Transferência para conta no exterior; • Bitcoin. 37 Figura 1.17: Pergunta 4 - Você já pesquisou/sabe a diferença dos impostos cobrados nos métodos da pergunta anterior? Fonte: Própria. O público participante que nunca teve experiência no exterior desconhece, em sua maior parte, os impostos cobrados nos diferentes meios de compra e venda de moeda estrangeira. Apenas 1 de 18 pessoas alegou conhecer tais impostos. Figura 1.18: Pergunta 5 - Você sabe que, além dos impostos e do valor dólar turismo, é cobrado um spread (margem de compra/venda) pelas instituições financeiras que fornecem câmbio? Fonte: Própria. 38,9% do segundo público alegou ter conhecimento sobre o fato de que spreads são cobra- dos pelos estabelecimentos na compra e venda de moeda estrangeira, além dos tradicionais 38 impostos. Este valor é significativamente menor do que o relatado pelo primeiro público (68,2%). Figura 1.19: Pergunta 6 - Você pesquisaria a cotação online da moeda estrangeira antes de comprar? Fonte: Própria. A grande maioria (94,4%) das pessoas do segundo público afirmam que pesquisariam as cotações online de moeda estrangeira caso viessem a transacionar tais moedas. Figura 1.20: Pergunta 7 - Você conhece algum aplicativo ou website que compara taxas de câmbio de diferentes instituições? Fonte: Própria. Este gráfico mostra de forma mais expressiva a ausência de um big player para novos entrantes. Nenhuma pessoa do segundo público conhece aplicativos ou websites que realizem a comparação de taxas de câmbio. 39 1.2 Objetivo(s) O objetivo deste projeto é a criação de um website e aplicativo de nome PlanEx que permite a comparação de taxas de câmbio de diferentes casas e auxilia o usuário a tomar decisões relativas ao melhor momento e lugar para compra e venda de moeda estrangeira. 1.3 Justificativas/relevância Diante de um mercado com leis e preços desconhecidas pela maior parte da população, esta acaba se submetendo a custos não razoáveis por um produto sem maior valor agregado. O PlanEx é importante para disseminar conhecimento sobre o mercado cambial em ambiente globalizado. Enquanto o Brasil se aproxima cada vez mais de diferentes países e blocos econômicos, o PlanEx visa transformar o mercado cambial para pessoas físicas em ambiente competitivo e familiar a todas as partes envolvidas. 1.4 Organização do Trabalho Este trabalho está distribuído em 7 capítulos, incluindo esta introdução, dispostos conforme a descrição que segue: O Capítulo 2 descreve o embasamento teórico - todos os softwares, definições e trabalhos de terceiros analisados para elaboração do PlanEx. O Capítulo 3 apresenta os principais materiais e métodos que foram escolhidos e desen- volvidos ao longo do ano. O Capítulo 4 discorre sobre todos os resultados obtidos ao longo do projeto e futuras discussões. O Capítulo 5 conclui a apresentação, análise e teste do PlanEx. O código do projeto encontra-se disponível em https://github.com/giulianoprado/planex_srv. 40 41 Capítulo 2 Embasamento Teórico O capítulo se inicia com uma breve definição do mercado de câmbio brasileiro. O Brasil faz uso do regime de câmbio flutuante sujo. Isto significa que, embora o país se beneficie de algumas características do câmbio flutuante, como o mecanismo autorregulador das contas externas e absorção de ajustes que seriam distribuídos em outros setores da economia, ainda é sujeito a interferências do Banco Central, que ocorrem por meio de compras de reservas e swaps cambiais. O embasamento segue com algumas definições de derivativos e Non- Deliverable Forwards, contratos a termo de moedas que são explorados mais a frente em outros capítulos e segue com outras definições relevantes para a compreensão do mercado de câmbio. A seguir, é apresentada a infraestrutura utilizada no Back-End do PlanEx, assim como comparações e conceitos relevantes. Três IDEs foram comparadas: Eclipse, o IDEmais popular, grátis e open source, porém com algumas deficiências em autocompleção baseada em contexto e necessidade de instalação de muitos plug-ins, problemas já resolvidos pelo IntelliJ; NetBeans, IDE (Integrated Development Environment) open source cujas aplicações são construídas com o auxílio de componentes modulares e com a mesma desvantagem do Eclipse em relação à compleção inteligente e um detalhe negativo que é a falta da apresen- tação de erros no código; e IntelliJ, que foi o IDE escolhido por razões citadas a frente. O framework Spring é apresentado, assim como partes fundamentais Java que foram utilizadas, como o DAO e as páginas REST. O capítulo prossegue com a análise de diferentes tipos de servidores em nuvens. IaaS, PaaS e SaaS são comentados, assim como os maiores players que utilizam esses serviços (DigitalOcean, AWS, Windows Azure, GCP e Heroku). Baseado nessas contribuições, o desenvolvimento do PlanEx se deu de forma integrada e fluída. 42 2.1 O Mercado de Câmbio Brasileiro O salário (preço de aluguel da força de trabalho), o juro (preço dos empréstimos em dinheiro) e a taxa de câmbio (preço da moeda utilizada em transações internacionais) formam os três preços fundamentais da economia. [5] O entendimento do panorama geral que constitui o Mercado de Câmbio Brasileiro é essencial para a eficiência microeconômica, estabilidade da moeda e o crescimento do país. [6] O Banco Central do Brasil (BCB) é responsável por regulamentar e fiscalizar o mercado de câmbio,ambiente onde ocorre compra e venda de moeda estrangeira por agentes autori- zados pelo Banco Central. Fora deste ambiente, há o mercado paralelo, onde são realizadas trocas e posses ilegais. Há a necessidade de identificação em todas as trocas dentro do am- biente legal e, para transações acima de R$3.000,00, é necessária a apresentação da docu- mentação que suporta a troca. [7] Os agentes aprovados para operar no mercado de câmbio compreendem: • Bancos (múltiplos, comerciais, de investimentos, de desenvolvimento, de câmbio); • Agências de fomento; • Sociedades de crédito, financiamento e investimento; • Sociedades corretoras de títulos e valores mobiliários; • Sociedades distribuidoras de títulos e valores mobiliários; • Sociedades corretoras de câmbio. Omercado à vista é dividido entre mercado primário (varejo) e secundário (interbancário). O mercado primário corresponde às transações do balanço de pagamentos (residentes e não residentes), ou seja, altera o estoque de moeda estrangeira em posse de residentes; enquanto o secundário é referente a negociações interbancárias originadas no mercado primário - e não altera o mesmo. Os contratos de câmbio são os documentos que oficializam as operações de compra e venda de moeda estrangeira. No contrato deve constar as informações relativas à moeda estrangeira, à taxa contratada, ao valor respectivo na moeda nacional e aos nomes do comprador e vendedor. Todas as operações do mercado secundário devem ser registradas no Sistema de Informações do Banco Central do Brasil (SISBACEN). Uma operação de câmbio só poderá ser liquidada se estiver devidamente registrada e confirmada no SISBACEN. [8] 43 Há dois tipos de operações de câmbio na perspectiva do tempo de liquidação: a operação de câmbio pronta, que deve ser liquidada em até dois dias e a liquidação futura, que será liquidada em prazo maior do que dois dias. Uma posição de câmbio é representada pelo saldo (net) de operações de câmbio prontas ou para liquidação futura. [7] Quando uma parte possui uma posição comprada em moeda estrangeira, esta posição significa que uma instituição autorizada realizou compras de moeda estrangeira acima do valor de venda da mesma (saldo). 2.1.1 Funcionamento: câmbio flutuante e intervenções Em 1999, o Brasil adotou o regime do câmbio flutuante. Este regime é benéfico por favorecer o equilíbrio das contas externas (mecanismo autorregulador) e absorver ajustes que seriam distribuídos pelos demais preços fundamentais da economia (taxa de juros ou o salário), por meio dos mesmos mecanismos que permitem tais benefícios: a volatilidade. Quando a moeda nacional se valoriza, as exportações e a indústria nacional são afetadas. Quando se desvalo- riza, acarreta pressões inflacionárias. Quando há grande fluxo de capitais entrando no país, a moeda se valoriza. Quando o fluxo é oposto, geralmente traduzindo aumento da aversão ao risco por parte do estrangeiro (sendo o Brasil um mercado emergente), a moeda tende a ser desvalorizada. [9] Se o Brasil seguisse desta forma, com um câmbio flutuante puro e sem intervenções, a mudança de 1999 teria representado o fim definitivo do pensamento Keynesiano (modelo do economista britânico John Maynard Keynes, que defende a intervenção do Estado na econo- mia). Desde 1999, observamos a prática da política cambial de flutuação suja, caracterizada pela intervenção do Banco Central. Esta intervenção se dá por meio de compras de reservas no mercado à vista e a venda e compra de swaps cambiais reversos, que são as trocas entre o Banco Central e as demais instituições financeiras (derivativos). [10] Este instrumento será explicado mais a frente. O real também pode ser afetado por fatores econômicos internacionais, como um aumento nas taxas de juros nos Estados Unidos comparativo às taxas de juros domésticas. [11] 2.1.2 O Balanço de Pagamentos O balanço de pagamentos é o registro sistemático estatístico de todas as transações econômi- cas realizadas durante um período de tempo (um ano, trimestre ou mês) entre os residentes de um país e o restante do mundo, [12] ou seja, reúne o dinheiro que sai e entra no Brasil 44 em forma de compras e vendas de produtos, empréstimos, serviços etc. Quando o balanço de pagamentos é positivo, significa que mais recursos entraram no Brasil (superávit), comparado aos recursos que saíram do país (déficit). [13] Os registros do Balanço são geralmente feitos em dólares americanos (U$). Duas principais contas são utilizadas para compor o balanço de pagamentos: Transações Correntes As transações correntes são compostas de mais 4 somatórias: • Balanço Comercial (BC): dada pelo saldo das exportações menos as importações. • Balança de Serviços (BS): diferença entre o valor de entrada e saída de dinheiro em serviços como viagens internacionais, seguros, royalties, licenças e fretes. • Balança de Rendas (BR): corresponde ao pagamento de salários de não residentes que prestam serviços no Brasil ou brasileiros que prestam serviços no exterior e à renda enviada de estrangeiros e recebida por brasileiros em outras partes do mundo. • Transferências Unilaterais Correntes (TUC): transferências que não envolvem troca por serviços ou bens. Correspondem a doações realizadas entre países. Conta Capital e Financeira Composta de duas contas principais: a Conta Capital, que se refere a transferências unila- terais de ativos reais, financeiros ou intangíveis entre residentes e não-residentes e a Conta Financeira, que registra todos os fluxos de capitais entre o Brasil e o mundo. 2.1.3 Dólar Comercial e Dólar Turismo Em 2005, o CVM (Conselho Monetário Nacional) unificou o câmbio comercial (chamado de "mercado de câmbio de taxas livres") e o câmbio turismo ("mercado de câmbio de taxas flutuantes") em um mercado único de câmbio legal no Brasil. Os nomes utilizados hoje (câmbio comercial e câmbio turismo) continuam sendo utilizados, porém para denominar naturezas diferentes de operação. O dólar comercial é utilizado por grandes corporações para realização de câmbio tipo im- portação, exportação, financeiro venda ou compra. Movimentações financeiras do governo brasileiro no exterior também utilizam como referência o dólar comercial. Não existe uma 45 taxa de câmbio fixada pelo Banco Central. Assim, a taxa é livremente negociada pelas partes contratantes (comprador e vendedor). O Banco Central apenas divulga a média de taxas pra- ticadas, conhecida como "PTAX", que serve como referência e não é obrigatória. O PlanEx utiliza a PTAX para análise de spread bancários[14]. O dólar turismo é utilizado para viagens, compra de passagens aéreas, gastos em países ou estabelecimentos estrangeiros e conversão de valores em moeda estrangeira acumulados no cartão de crédito. O dólar turismo é mais "caro"pela necessidade de se ter o dinheiro físico em mãos, ou seja, ele é realizado por notas, o que encarece os custos para casas de câmbio e bancos, como o transporte, manutenção e seguro. As agências de câmbio e operadoras de viagens também possuem como referência a PTAX. As transações de dólar comercial podem ser realizadas apenas eletronicamente[15]. 2.1.4 Derivativos Derivativos são instrumentos financeiros (contratos ou títulos conversíveis) cujos preços de- rivam de outros instrumentos. O contrato de dólar futuro deriva do preço do dólar à vista, e, como Martin Mayer disse em seu artigo "The Next Generation"(publicado na revista The Bankers, 1997), não representa um investimento, e sim uma expectativa de direção do dólar[16]. O derivativo de moeda possui como ativo-objetivo a taxa de câmbio de reais por moeda estrangeira. A liquidação dos contratos não envolve entrega física, havendo apenas a liquidação da diferença do preço de exercício e o preço à vista. [17]Os participantes do mer- cado de derivativos podem ser hedgers, especuladores ou arbitradores. Os hedgers desejam se proteger de possíveis variações nos ativos; os especuladores esperam obter ganhos com as variações nos preços dos ativos; e os arbitradores desejam obter lucro com a compra de um ativo mais barato em um mercado e a venda em um outro que esteja mais caro. [9] Em uma operação de derivativos, os ganhos são iguais às perdas. Pode-se citar três tipos de derivativos que são comumente utilizados no Mercado de Câm- bio Brasileiro: Non-Deliverable Forwards (dólar a termo), opções e swaps. Non-Deliverable Forwards NDFs (Non-Deliverable Forwards) são contratos a termo de moedas negociados no mercado de balcão. Uma pessoa física ou jurídica que fecha uma NDF visa fixar uma taxa fixa de câmbio em uma data futura. No vencimento, a liquidação ocorre pela diferença entre o preço da taxa contratada e o preço de mercado definido como referência. O NDF pode ser utilizado 46 em situações em que se deseja proteção contra a oscilação de uma moeda - ou de forma participativa da variação da mesma[18]. Exportadores e importadores, cujos resultados são amplamente dependentes das taxas de câmbio praticadas no mercado, precisam se proteger contra variações cambiais e volatilidade do câmbio flutuante. Os importadores são muito afetados por taxas mais altas de moeda estrangeira, pois precisam comprá-las para financiar suas importações. Os exportadores re- cebem pagamento por seus produtos e serviços em moeda estrangeira, portanto procuram vender suas moedas em momento de alta frente ao Real. O NDF se consolida então como uma alternativa para travamento de taxa de câmbio sem pagamento de tarifas, depósitos, emolumentos ou corretagem. Desta maneira, se a cotação no vencimento for superior à taxa a termo, a parte compradora recebe o ajuste do vendedor; caso seja inferior, a parte vendedora recebe o ajuste do comprador. As operações de NDF estão sujeitas à incidência de imposto de renda na fonte sobre o valor da liquidação financeira previsto em contrato. [19] A estrutura a termo da taxa de juros em reais (curva de juros pré-fixada) é utilizada na precificação do NDF. Esta estrutura é obtida por meio dos preços de ajuste dos contratos futuros DI (Depósito Interfinanceiro - título de renda fixa que atua como instrumento de capitação e aplicação de recursos) da B3, sendo que esta divulga o primeiro ponto da curva diariamente. Para realizar o cálculo entre os vértices previstos pelos contratos futuros DI da B3, utiliza- se a interpolação exponencial entre as taxas, conforme a equação 2.1. Taxat = [(Taxat−1+1)dut−1/252)∗((Taxat+1+1) dut+1/252) (Taxat−1+1)dut−1/252) )(dut−dut−1)(dut+1−dut−1)]252/dut−1 (2.1) Na qual: Taxa = taxa de juros anual expressa com base em 252 dias úteis; t = vencimento do fluxo; t+1 = vencimento do contrato futuro disponível imediatamente superior; t-1 = vencimento do contrato futuro disponível imediatamente inferior; du = dias úteis[20]. A primeira conta que deve ser realizada para cálculo de NDFs de várias datas é a do cupom cambial. O contrato de Futuro de Cupom Cambial de Depósitos Interfinanceiros de Um Dia atua como ferramenta de proteção contra flutuações da taxa de juros referenciada ao dólar. O cupom cambial, de forma simplista, é o rendimento em dólares para estrangeiros que aceitam o risco de investir no Brasil. O ativo subjacente do contrato se constitui na taxa 47 de juros da diferença entre a taxa média de DI de um dia e a variação cambial calculada pela PTAX 800. Este ativo é calculado e divulgado pelo BCB (Banco Central do Brasil). O cupom cambial pode funcionar como um ativo de hedge (proteção) para investidores da taxa de juros brasileira que precisam se proteger contra variação cambial, pois o cupom remunera o investidor pela diferença entre a variação da taxa de juros em dólares contratada e o que foi de fato realizado no período[21]. A PTAX 800 nada mais é do que a média ponderada das taxas de dólar negociadas entre as instituições financeiras. A curva do cupom cambial é obtida pela diferença entre a curva de juros pré-fixada e a variação cambial projetada pelas cotações a termo da moeda, conforme a equação 2.2. CupomCambialt = [ (TaxaPret +1)dut/252 (Forwardt/Spot) −1]∗ 360 dc (2.2) Na qual: t = vencimento do fluxo; Taxa Pré = taxa de juros anual expressa com base em 252 dias úteis; du = dias úteis; dc = dias corridos; Forward = NDF/preço forward da moeda; Spot = preço à vista da moeda. Mercado de dólar futuro O contrato de dólar futuro é negociado no pregão da BMF em lotes de U$50.000,00 e a cota- ção é realizada em reais por U$1.000,00, com até três casas decimais. A data de vencimento do Contrato é o primeiro dia útil (pregão) do mês de vencimento do contrato. 2.1.5 Mercado de Opções As opções sobre moedas estrangeiras são derivativos que servem como mecanismos de pro- teção contra movimentos desfavoráveis da taxa de câmbio[22]. Este tipo de derivativo é um direito, e não uma obrigação de comprar ou vender ativos. É possível realizar a compra e venda de Opções. As Opções podem ser de dois tipos: call (direito de comprar moeda estrangeira) ou put (direito de vender a moeda estrangeira). Um investidor pode comprar ou vender calls, assim como pode comprar ou vender puts. Assim como no dólar a termo, opções podem ser utilizadas para fins especulativos ou de hedge (proteção)[23]. 48 É necessário pagar um preço para se comprar uma put ou uma call. O valor pago pelo titular para aquisição do direito de exercer uma opção é chamado de prêmio. O preço acertado para exercício do direito é classicamente chamado apenas de preço de exercício. 2.1.6 Mercado de Swaps Instrumentos mais utilizados pelo Banco Central em suas intervenções. O contrato de swap é um acordo que estabelece uma troca de fluxos entre duas partes. Quando sua liquidação atinge o vencimento, pode ser semelhante ao mercado a termo. Um swap de moedas consiste em um fluxo de taxa de juros em uma moeda especificada (por exemplo, o dólar americano) e um fluxo em taxa de juros em outra moeda especificada (por exemplo, o real). O contrato de Swap utilizado pelo Banco Central consiste em um swap cambial com ajuste periódico. 2.1.7 Crise Cambial Quando o índice da média ponderada do percentual mensal das depreciações na taxa de câm- bio nominal e do percentual do declínio nas reservas cambiais excede sua média por mais de três vezes o seu desvio-padrão, temos a chamada Crise Cambial, ou seja, quando as taxas de câmbio nominal e as reservas de um país variam além de três vezes do que geralmente costumam variar. Os países emergentes (caso do Brasil) tendem a passar por tais crises por não estarem completamente inseridos no mercado internacional. [6] 2.2 O Back-End 2.2.1 IDE Um Integrated Development Environment (IDE) é uma plataforma que facilita o desenvol- vimento de aplicativos. O IDE é desenhado para integrar todas as tarefas de programação em uma só aplicação, logo, um IDE oferece uma interface central para todas as ferramentas necessárias a um programador, incluindo: • Editor de código (text editor) – designado para escrever e editar códigos de programa- ção. • Compilador – serve para transformar o código em um arquivo executável pelo compu- tador. 49 • Debugger – usado durante testes para ajudar a resolver erros nos programas. • Ferramentas de automação – ferramentas que automatizam tarefas comuns de progra- madores. Alguns IDEs específicos podem conter também: • Class browser – utilizado para examinar e referenciar as propriedades de uma classe orientada a objetos. • Object browser – utilizado para examinar os objetos iniciados na execução de uma aplicação. • Diagramade hierarquia de classes – ferramenta que permite que o programador visua- lize as estruturas de um código de programação orientado a objetos. O objetivo geral de um IDE é economizar tempo e aumentar a produtividade de um programador[24]. Diversos IDEs foram analisados para o desenvolvimento do website. Para o projeto, buscou- se uma IDE que suportasse Java 8, Spring MVC (como será explicado mais a frente), Git, Gradle e conseguisse lidar com ambas as camadas de usuário e base de dados. Eclipse O Eclipse é o IDE mais popular, sendo grátis e open source. Este IDE é, em sua maioria, escrito em Java e foi criado pela IBM (International Business Machines) em 2001, com a missão de tornar-se uma alternativa ao Microsoft Visual Studio. O Eclipse utiliza SWT (The Standard Widget Toolkit) como biblioteca gráfica e é baseado em plug-ins. O Eclipse possui o "manufacturer", que atua na interpretação do relatório de erros[25]. Embora o Eclipse seja utilizado em alta escala, não possui certas vantagens que foram atribuídas ao IntelliJ, como auto preenchimento baseada em contexto. O Eclipse sugere al- ternativas ao código após a inserção de algumas letras; porém, as sugestões são extensas e com maior probabilidade de não serem relacionadas ao que o desenvolvedor procura. No Eclipse é necessário a instalação e configuração de componentes suplementares e mais de um download para obtenção de todos os plug-ins solicitados para execução do programa. NetBeans O Netbeans também é um IDE open source, porém as aplicações são desenvolvidas com o auxílio de componentes modulares. O Netbeans não possui a ferramenta de interpretação de 50 erros do Eclipse e os erros são mostrados na janela de saída. O Netbeans possui o "Filesys- tem", que controla as informações da configuração do mesmo. [25] Quando comparado ao IntelliJ, o NetBeans ainda falha na função de auto completar inte- ligente e não possui a análise de erros da complexidade do presente no Eclipse e no IntelliJ. IntelliJ IDEA O IntelliJ foi o IDE escolhido para o desenvolvimento do PlanEx e será detalhado posterior- mente. 2.2.2 Build Tools Automações Build são cruciais para o projeto por possuírem desenvolvimento fluído e ágil e permitirem administrar o ciclo de vida do software (compilação de código, organização de dependências, execução de testes etc). Android Ant tornou-se padrão para ferramentas de construção, porém muitas outras ainda podem ser utilizadas: Tool DevOps phase Tool Type Conf. format Language License Ant Build Build XML Java Apache Maven Build Build XML Java Apache Rake Build Build Ruby Java MIT Gradle Build Build Based on Groovy Java and Groovy-based DSL Apache Jenkins Build Cont. Integration UI Java MIT TeamCity Build Cont. Integration UI Java Commercial Bamboo Build Cont. Integration UI Java Commercial Build Tools [26] Ferramentas que utilizam XML tem como grande desvantagem a prolixidade. Gradle e Rake tentam resolver os problemas de Ant e Maven, ao trocar XML por linguagens progra- máveis. [26] Gradle administra dependências de forma fácil de compreender e compatível com diversas outras aplicações. É também compatível com seus concorrentes, Maven e Ivy. Além disso, o Gradle possui algumas características de linguagens programáveis. 2.2.3 Java Java possui três edições diferentes disponíveis de plataforma: 51 • J2SE (Java 2 Standart Edition): oferece funcionalidades de programação core, ou seja, é a edição mais básica, utilizada principalmente para aplicações em desktop; • J2ME (Java 2 Micro Edition): tecnologia utilizada para programar aplicações que ro- dam em pequenos dispositivos portáteis (celulares e sistemas embarcados) e possui poder de processamento limitado, limite de bateria, display pequeno, entre outros; • J2EE (Java2 Platform Enterprise Edition): tecnologia para escrever aplicações de back end para empresas, mais versátil e amplamente utilizada por desenvolvedores. A arqui- tetura J2EE permite a criação e desenvolvimento de projetos baseados em componentes. Esta plataforma consiste em conjunto de protocolos e APIs (interfaces de programação de aplicação) que possibilita um modelo multi-camada com componentes que podem ser reutilizados. [27] Conforme as aplicações web foram evoluindo, novas plataformas começaram a surgir e ganhar popularidade. Frameworks MVC (Model-View-Controller) são arquiteturas que entre- gam soluções e facilitam a distribuição de tarefas nos aplicativos. O Modelo (Model) realiza a parte inteligente do sistema: cálculos, processamento, integrações etc. A Visão (View) refere-se ao contato com o usuário (telas) e podem ser compostas de arquivos HTML, JSL, imagens, CSS e Javascript. O Controlador (Controller) recebe as solicitações do usuário e forma objetos correspondentes que serão repassados ao Modelo. [28] Existem vários frameworks MVC disponíveis para uso, como o Apache Struts, o Spring MVC, Zend Framework, JSF (Java Server Faces), Vraptor, etc. Esse tipo de framework fica totalmente no servidor, sendo que todas as funções supracitadas ocorrem no mesmo, utilizando sua memória e seus recursos. [29] 2.2.4 DAO - Data Access Object O Java Database Connectivity (JDBC), parte fundamental do Java SE, define uma série de padrões de API para facilitar o acesso a bases de dados relacionais, ou seja, APIs que per- mitam a execução de códigos SQL contra um banco de dados. O Spring oferece diferentes métodos de template para diferentes operações de JDBC. Cada método é responsável pelo controle do processo como um todo, porém é possivel recriar diferentes tarefas do processo. O objetivo do DAO (Data Access Object) é evitar que o desenvolvedor misture diferentes tipos de lógica (como lógica de acesso de dados, lógica de negócios e lógica de apresentação) em um único módulo. O DAO separa a lógica de acesso de dados das demais lógicas. Os 52 módulos independentes de lógica de acesso de dados são chamados de Data Access Objects. [30] 2.2.5 REST O REST (Representational State Transfer - em português, Transferência de Estado Repre- sentacional) é um estilo de arquitetura utilizado para desenhar sistemas distribuídos. As tec- nologias distribuídas de serviços Web (Java, Python, Ruby, .NET etc) fizeram necessário construir uma ponte para esses diferentes ambientes de desenvolvimento. Serviços RESTful se tornaram a escolha mais comum para traçar essa ponte. Há duas possibilidades a serem exploradas com os serviços REST: a) Publicar dados de uma aplicação como serviços REST; e b) Acessar dados de serviços REST de terceiros[30]. Os dois métodos foram utilizados para elaboração do PlanEx. Algumas vantagens podem ser evidenciadas em páginas REST: • Recursos são facilmente entendidos pelos diretórios de URIs; • Comunicação por meio de XML, HTML, texto puro, JSON (JavaScript Object Nota- tion); • Praticidade para acesso e debug direto do navegador • Não necessita manter conexões explicitamente 2.2.6 Spring Framework Spring é um framework de aplicações open source criado por Rod Johnson que se destina ao desenvolvimento de aplicações corporativas para plataformas Java e facilita a implementa- ção da plataforma J2EE. Muitas vezes, aplicações J2EE apresentam-se de forma complexa, com engenharias desnecessárias e custosas. A maior parte dessas aplicações fazem uso de EJB (Enterprise Java Beans), parte essencial de uma plataforma J2EE, porém desnecessaria- mente complexa. O framework Spring não pode ser concebido como alternativa para o EJB, mas visa prover uma solução end-to-end, integrando demais frameworks em um só que seja coerente à estrutura em geral, dispensando o uso de EJB. [31]. O framework vem sendo atualizado em diversas frentes: • Spring 1.0: a primeira versão mudou a forma de desenvolvimento de aplicaçõescorpo- rativas para Java. A injeção de dependências e transações declarativas dispensaram o 53 uso de EJBs custosos. • Spring 2.0: XML passou a ser usado para configurações, facilitando o entendimento das mesmas e reduzindo seu tamanho. • Spring 2.5: as anotações @Component e @Autowired foram inseridas no framework, criando um modelo muito mais elegante de injeção de dependências. • Spring 3.0: uma variedade de prefixos @Enable foi adicionadas e melhorada na versão Spring 3.1. As configurações não necessitavam mais de XML. • Spring 4.0: o suporte a configurações condicionadas consolidou-se e decisões são to- madas para determinar quais configurações serão usadas ou ignoradas. Não é mais necessário escrever códigos para tomar tais decisões. • Spring Boot: configurações automatizadas que permitem que o Spring identifique o tipo de aplicação que está sendo utilizado e automaticamente configure todos os componen- tes necessários do mesmo. Spring Boot mantém a seção de dependências reduzida e não é necessário que o desenvolvedor tenha em mente todas as bibliotecas e versões que de- verão ser utilizadas. [32] O Spring Boot foi utilizado neste projeto e será comentado mais a frente. [27] A partir de sua versão 2.2, o framework Spring começou a mirar diferentes plataformas para expansão, podendo rodar no Google App Engine e integrando Flex e Flash, GWT, OSGi, entre outros. Dentro do framework Spring MVC, alguns conceitos são importantes: Spring IoC container O Spring IoC container é o coração da Spring Framework e é utilizado para criar objetos, conectá-los, configurá-los e administrá-los desde seu início até sua deleção. O Spring contai- ner administra aplicações por meio de beans. [33] O IoC (Inversion of Control) é o elemento necessário para a dispensa de EJB e faz com que o framework configure o ciclo de vida do objeto[34]. A injeção de pendências (Dependency Injection) é um tipo de IoC que representa o processo de prover instâncias necessárias para um objeto funcionar, mantendo um baixo acoplamento entre classes do mesmo projeto. [35] 54 Beans Os componentes do Spring são chamados de Beans (diferente de JavaBeans, de Sun). Os Be- ans declarados no Spring IoC container não são necessariamente JavaBeans, mas sim qual- quer POJOs (Plain Old Java Objects - objetos Java que não possuem requerimentos específi- cos). Um Bean é um objeto que é inicializado, assimilado e administrado por um Spring IoC Container. [30] O Bean é formado pelos dados que são fornecidos ao container. Um exemplo são as classes definidas com anotações @Bean e @Service. Os JavaBeans habilitam a com- posição de beans e, desta forma, programadores podem customizar importações de beans. Os componentes Beans se comunicam com outros Beans por um modelo de publicação de eventos e os JavaBeans utilizam um modelo de introspecção para extrair as propriedades de beans, estabelecendo um guia rígido para nomeação de propriedades e métodos de Beans e utilizando APIs[36]. Plataforma Spring IO A Plataforma Spring IO é uma plataforma coesa utilizada para aplicações modernas. Esta plataforma é utilizada no back-end do PlanEx e é 100% open source, lean e modular, além de prover DSRs (Domain-Specific Runtime Environments). Spring IO depende apenas de Java SE e suporta Groovy, Grails e Java EE, além de funcionar com administradores de dependências, como Gradle e Maven. A plataforma é composta pela IO Foundation e suas Execution Layers (DSRs), podendo ter suas partes e funções melhor visualizadas na figura abaixo: 55 Figura 2.1: Spring IO [37] A plataforma Spring IO inclui dois DSRs: Spring Boot e Grails. 2.2.7 Servidores em nuvem A programação em nuvem é uma tecnologia disruptiva que permite o acesso a uma rede com- partilhada de recursos. Computação em nuvem permite a separação dos dados e do desktop e se refere à entrega de aplicações como serviços. [38] O acesso à nuvem é geralmente reali- zado via um RESTful API. [39] Hoje os desenvolvedores podem escolher entre os seguintes serviços em nuvem: o IaaS (Infrastructure-as-a-service), o PaaS (Platform-as-a-service) e SaaS (Software-as-a-service). O IaaS é um serviço em nuvem que permite aos usuários (e desenvolvedores) acessar remotamente recursos na nuvem, como redes, arquivos e processamentos. Os recursos são geralmente cobrados no estilo pay-per-use e podem ser escaláveis. Um dos benefícios do pay-per-use (também chamado de pay-as-you-go) é o não desperdício de recursos, ou seja, 56 os usuários só pagam pelo que realmente utilizaram. O PaaS oferece uma plataforma completa de computação, como design, testes, hospe- dagem e desenvolvimento de aplicações para usuários no sistema local, ou seja, os usuários podem construir e distribuir aplicações. [40] O PaaS consiste de muitos servidores e geral- mente é utilizado para oferecer serviços de alto nível. Geralmente os serviços são cobrados por uso, ou seja, o cliente paga pelo que foi utilizado ao fim (pay-per-use). O SaaS oferece softwares e aplicações pela internet. O usuários se inscrevem no software e podem acessá-lo via web ou APIs. [41] O SaaS possui as seguintes características: custo- mização limitada (o usuário possui pouco controle para alterar a interface da aplicação e o provedor do serviço de nuvem é o responsável pela customização que chega ao usuário final), on demand self service (os usuários finais utilizam o serviço com esforço mínimo de admi- nistração e interação com o provedor) e acessibilidade a qualquer aparelho conectado à rede, como computadores e celulares. As vantagens do SaaS são a automatização das aplicações, escalabilidade e seu custo benefício. [42] O SaaS é construído sobre o PaaS e geralmente utilizado para substituir aplicações instaladas no sistema local do usuário. [43] Dois modelos de arquiteturas de nuvem podem ser evidenciados relativo ao uso de esca- lamento: o primeiro se refere à adição de instâncias e recursos dependentes da demanda (as nuvens podem ser utilizadas para este serviço através do SaaS e PaaS). O segundo provê da- dos e aplicações por escalamento de capacidade, ou seja, pay-as-you-go. [38] O preço pode ser baseado na capacidade de armazenamento, ferramentas ou pay-per-use. Há também a diferente classificação de modelos de nuvens: o modelo de nuvem pública se refere à infraestrutura utilizada por um provedor terceiro que oferece serviços a diferentes categorias de clientes pela internet (este modelo geralmente utiliza o pay-per-use); o modelo de nuvem privado é uma infraestrutura disponível para organizações ou clientes específicos e é administrada por elas ou terceiros; e o modelo de nuvem híbrida se refere a dois ou mais tipos de nuvens combinados que permite a passagem de dados e aplicações entre eles. [40] DigitalOcean O DigitalOcean é um SaaS. Isso significa que a aplicação que utiliza SaaS está em um com- putador permanentemente ligado, porém configurações, interação, manutenção e desenvolvi- mento de aplicações necessiam de um outro software para serem habilitadas. Os servidores do DigitalOcean são chamados de droplets e podem ser utilizados por meio do painel de controle do DigitalOcean ou via API. 57 Para criar um droplet, é necessário ter uma conta no DigitalOcean. Uma distribuição Linux é então selecionada para o droplet e deve-se optar por um tamanho (memória) para o droplet, sendo que um tamanho maior implica em preço maior. O valor mínimo cobrado é de U$5,00 por mês. Caso o usuário opte por utilizar backups, será cobrada um acréscimo de 20% no custo final. [44] Amazon Web Services AWS (Amazon Web Services) é o serviço mais desenvolvido entre todos os servidores de nuvens, [39] oferece uma quantidade enorme de produtos - e um desses é a AWS Elastic Compute Cloud(EC2). EC2 é um produto IaaS e permite o aumento ou redução de capa- cidade em minutos, além de oferecer a contratação simultânia de milhares de instâncias de servidor. [45] O EC2 conta com as seguintes ferramentas: modelos pré-configurados para ins- tâncias (ambientes virtuais de computação), chamados de Amazon Machine Images (AMIs), que armazenam os bits necessários para o servidor; keypairs (AWS armazena a chave pública e o usuário armazena a chave privada em um local seguro); volumes de armazenamento para arquivos temporários (deletados); Amazon Elastic Block Store - EBS, volumes de armazena- mento persistente para dados; múltiplos locais físicos para armazenamento de dados (regiões e zonas de disponibilidade); endereço IPv4 estático para computação em nuvem dinâmica (Elastic IP addresses); redes virtuais que podem ser criadas e designadas aos recursos no EC2. [46] Os maiores benefícios das plataformas Amazon são: o nível de controle e customização, análise de dados, insights úteis e habilidade de acesso às aplicações do usuário. A desvanta- gem da AWS concentra-se principalmente na complicação gerada pelo número de serviços. [39] Elastic Beanstalk é outro produto PaaS oferecido pela AWS, cujos comandos devem ser postados na Command Line Interface (similar ao Heroku) ou pelo Management Console do mesmo. O Elastic Beanstalk utiliza EC2 para hospedagem, facilitando a migração Elastic Beanstalk - AWS EC2. Os preços dos produtos na AWS variam conforme as ferramentas e recursos requiridos. A AWS oferece preço sob demanda que é arredondado na hora mais próxima. [47] 58 Windows Azure O Windows Azure, criado em 2009, é um IaaS e é também uma nuvem híbrida. O Azure conta com as seguintes vantagens e ferramentas: • Organizações podem sincronizar dados em suas matrizes com uma única autentificação para simplificar o acesso; • Relatórios de segurança podem ser obtidos a qualquer momento, contribuindo para o gerenciamento de risco; • Autenticação pode ser realizada de diversas formas, fornecendo um mecanismo adicio- nal de identificação em adição à senha; • Clientes podem implementar camadas de autorização para controlar o acesso de usuá- rios. • Aplicações e dados podem ser armazenados localmente por meio do Office 365, Micro- soft Azure e Windows Server. • Por utilizar serviço de nuvem híbrida, Azure pode instalar aplicações ou mover dados do servidor local para a nuvem rapidamente. [43] Azure SDK é um conjunto adicional que pode ser instalado e pode ser utilizado para implantar aplicativos e APIs escaláveis. Ferramentas de linhas de comando também estão disponíveis, como Azure PowerShell, Interface de Linha de Comando do Azure (CLI) e ferramentas do PowerShell para Visual Studio. [48] O Microsoft Azure é a plataforma mais econômica quando comparada à GCP (Google Cloud Platform) e AWS, porém sua especialização reside na operação de máquinas virtuais. [39] Google Cloud Platform A GCP (Google Cloud Platform) é um IaaS. A GCP é construída em um cluster de 86 ser- vidores. Sua unidade básica é o Node e utiliza um gerenciador de banco de dados de larga escala chamada Big Table. googlecloud2 Só há um método de pagamento: mensal e por demanda. O mínimo são 10 minutos e a utilização é arredondada para o minuto cheio mais próximo. O Google Sustained Usage concede descontos ao maior o uso. [47] 59 A Google BigQuery oferece um API em JavaScript, logo não é necessário salvar dados no lado do servidor e transferir os mesmos para a nuvem via PHP ou Java. A divisão dos dados é feita em tabela, o que é bom para o processamento de dados (e um diferencial para automação de Big Data). Os dados podem ser transferidos como arquivo CSV quando requerido, porém a taxa de upload é uma desvantagem. [39] Heroku O Heroku é um PaaS, o que significa que uma conta Heroku rende um servidor e uma plata- forma para ser utilizada juntamente ao servidor. A maior vantagem do Heroku é ser extrema- mente simples e todo o decorrer dos processos acontece através do Git. É de fácil utilização, desenvolvimento e escalamento e possui mais de 140 add-ons. Essas características são muito importantes para o PlanEx e este foi o servidor escolhido para rodar as aplicações. 60 61 Capítulo 3 Material e Métodos O primeiro passo na elaboração do PlanEx foi a construção e consolidação do Back-End. O IntelliJ IDEA foi o primeiro software escolhido para o desenvolvimento, logo depois da definição de Java como linguagem básica do projeto. O IntelliJ diferenciou-se de seus con- correntes principalmente pela função inteligente de auto preenchimento de código e foi de manuseio fácil e intuitivo. Seguindo a linha de melhores ferramentas, optou-se pelo Spring Boot para framework do PlanEx, arquitetura que oferece métodos rápidos para o desenvolvi- mento de aplicações. O framework funciona como uma biblioteca que pode ser utilizada por qualquer tipo de linguagem ou projeto, além de analisar e configurar automaticamente o pro- jeto. Conforme a ideia do PlanEx evoluiu, tornou-se necessária a utilização de um servidor e um gerenciador de banco de dados, tornando o Back-End do projeto mais robusto e justi- ficando a adoção da arquitetura cliente-servidor. O Heroku foi a plataforma escolhida pelo principal motivo de ser muito simples frente aos seus peers. O Heroku possui um gerenciador de banco de dados embutido, o Heroku Postgres, e é recomendado principalmente a startups e pequenas empresas que não utilizam muita capacidade (frente a grandes corporações), pois embora o mesmo seja o melhor em suas atividades core, o escalamento é muito custoso. Um web crawler foi utilizado para mapeamento de páginas de operadoras de câmbio e obteção de dados. Foi apresentado também os procedimentos adotados no design do banco de dados. O diagrama de classes foi então apresentado com os pacotes e suas classes minudenciadas. Os métodos e ferramentas utilizadas para montar o front-end são apresentados ao fim, reini- ciando o ciclo do aplicativo que se inicia e termina frente ao cliente. A interface do PlanEx foi desenvolvida em HTML, CSS e Javascript, linguagens frequentemente usadas na web. 62 3.1 Material Em meio a tantas versões e programas disponíveis, buscou-se acompanhar as recomendações públicas de software para auxílio na escolha de ferramentas para elaboração do PlanEx. Foram utilizados ambos os conceitos de Front-End e Back-End com suas respectivas con- figurações para elaboração do PlanEx. 3.1.1 Front-End O Front-End de um website é a parte que interage com o usuário. Em geral, desenvolvedores de front-end devem se especializar em três linguagens de programação: HTML, CSS e Javas- cript, e serem também familiarizados com alguns frameworks, como Bootstrap, Foundation, Backbone, AngularJS e EmberJS. O programador dessas linguagens também deve trabalhar próximo ao designer ou analistas de User Experience para prover os melhores programas. O Front-End inclui o conteúdo da página, o tema, os menus e os widgets. [49] 3.1.2 Back-End O Back-End de um website consiste de um servidor, uma aplicação e uma base de dados e serve para construir e manter a tecnologia necessária para a existência do Front-End. Pro- gramadores de Back-End utilizam linguagens com suporte ao servidor, como PHP, Ruby, Python, Java, .Net, etc. [50] O Planex possui seu servidor feito em Java, linguagem orientada a objetos de grande popularidade no mercado e que atende a todas as demandas do projeto. [51] 3.1.3 IntelliJ IDEA O IDE escolhido para este projeto é o IntelliJ, que não necessita de plug-ins extraordinários para suporte ao Spring, ao contrário do Eclipse. NetBeans e IntelliJ IDEA já são preparados para utilizar Maven em suas formas originais. O IntelliJ conta com as seguintesferramentas: • Compleção inteligente de código - a compleção de código é resultado de uma série de técnicas utilizadas para analisar e propor pedaços de código para o desenvolvedor. A compleção de códigos do IntelliJ detecta e diferencia diferentes linguagens, como Java, Groovy, SQL, JPQL, JavaScript etc. Além de sugerir variáveis, classes e métodos, pode sugerir parâmetros, propriedades, nomes de arquivos, recursos, Spring Frameworks, ba- 63 ses de dados, etc, até quando a linguagem utilizada é outra que não o Java. A compleção de código sugere sentenças baseadas em contexto e nas necessidades do usuário. • Análise de código On-the-fly - Enquanto o usuário escreve o código, o IntelliJ analisa este no backgroud e identifica erros e melhorias. Essas análises são configuráveis e são consideradas importantes na escolha do IntelliJ como IDE. Com inspeções, o IntelliJ encontra uma grande quantidade de erros já existentes, possíveis bugs ou melhorias (como uma variável que nunca é utilizada, sugestão de sentenças simplificadas, etc). • Refatoração avançada - o IntelliJ possui uma grande gama de opções de refatoração. Caso não haja uma opção sugerida satisfatória, é possível escolher uma opção do menu, como migração de tipo (como retorno de um método, variável local e parâmetros), ex- tração de classe (opção de extrair uma classe de outra, sendo possível escolher quais métodos e variáveis devem ser transferidos), refatoração de XML (renomear tags e atributos, converter tags para atributos etc), arrastar e soltar itens (IntelliJ irá automati- camente alterar as importações e usos), alterar assinaturas, introduzir constantes, etc. • Navegação e Busca - uma janela de diálogo mostra os arquivos abertos e janelas IDE podem ser usadas para abrir o elemento desejado sem a ajuda do mouse. [52] 3.1.4 Spring Boot Spring Boot é um framework criado pela Pivotal e configurada para o desenvolvimento de aplicações Spring. Spring Boot oferece um método mais rápido para construir aplicações - ele analisa as classes e beans do projeto, estabelece um raciocínio sobre elementos faltantes e os adiciona, fazendo com que o desenvolvedor foque mais em ferramentas de alto nível e menos em infraestrutura. Em seu formato cru, Spring Boot pode ser considerada uma biblioteca que pode ser uti- lizada por qualquer sistema de linguagem/projeto. A distribuição do framework, incluindo o CLI integrado pode ser instalado manualmente por meio do repositório de Spring. O Spring Boot não gera código, mas analisa e configura o projeto automaticamente. [35] Ele é a base de todo o projeto PlanEx atuando como infraestrutura do Back-End. 3.1.5 Heroku Heroku é uma plataforma poliglota (linguagens de programação) baseada em nuvem que per- mite a desenvolvedores e empresas construir, desenvolver, monitorar e escalar aplicações. 64 Esta plataforma remove a necessidade de servidores, administração de sistemas e manuten- ção. A segurança de acesso do Heroku é configurável e permite que um time de desenvol- vimento scrum possa atualizar o projeto. A lista de linguagens de programação que pode ser utilizada no Heroku contém, entre outras, Node, Ruby, Java (qualquer aplicação Java que possa rodar sobre o OpenJDK6), Scala e PHP. O Heroku é uma arquitetura construída em máquinas virtuais na Amazon EC2 (Amazon Elastic Compute Cloud). Administração e esca- lamento são feitos via API, que pode ser acessada por meio de linha de comando ou interface REST [53] e sua administração de aplicações é feita com Git, uma versão popular de sistema de controle. [54] Para que aplicações sejam implementadas no Heroku, basta apenas solicitar "push". O Heroku lida com cerca de 13 bilhões de pedidos por dia, auxilia mais de 6 milhões de aplicações e possui mais de 150 serviços que podem ser adicionados aos projetos. [55] Stacks são os ambientes utilizados para rodar as aplicações desenvolvidas e os dynos são as unidades de processamento do Heroku. Os stacks são sistemas operacionais básicos e software para servir as aplicações, ficando no topo de uma máquina que roda Linux no centro de dados da Amazon. Eles permitem que as aplicações sejam rodadas na nuvem sem preocupações com a infraestrutura. O Celadon Cedar é o único stack que permite a criação de aplicações. Os stacks e o código auxiliar rodam em um dyno. O Heroku utiliza Maven para instalar as aplicações nos dynos e cada um destes roda uma variedade de diferentes tipos de processos, que podem ou não incluir, entre outros: • Aplicações Web; • Processos que servem solicitações API; • Programas one-off; Cada dyno possui 512MB de memória e oferece uma série de ferramentas e vantagens: [53] • Elasticidade escalável: cópias diferentes de cada projeto podem rodar quantas instân- cias forem necessárias a qualquer tempo e podem ser escaladas para cima ou para baixo em um ou mais dynos. Se um processo toma muito tempo em um único dyno, outro dyno pode rodá-lo em paralelo. • O dyno manifold (que pode ser pensado como um computador horizontalmente escalá- vel e distribuído na nuvem) oferece balanceamento automático de capacidade. O tráfico 65 HTTP do host é conduzido ao dyno web correto, dentro do dyno manifold. O heroku- app.com HTTP stack oferece um caminho direto para os webdynos. A plataforma He- roku então recebe pedidos HTML procedentes do ponto de entrada herokuapp.com ou do domínio próprio do desenvolvedor e redireciona-os para cada dyno. O dyno, quando disponível, seleciona um pedido da fila e o mesmo é processado dentro da aplicação. [56] • Processos que não são responsivos são reiniciados automaticamente. Monitoração con- tínua faz com que isso seja realizado sem a interferência do usuário. • Quando muitos dynos estão rodando em paralelo, os processos são automaticamente distribuídos em hardwares diferentes (centros de dados da Amazon), protegendo-os de alguma falha em um servidor particular. • Cada processo roda completamente separado dos demais. As aplicações não utilizam a mesma memória ou sistema de arquivo. O processo de isolamento é realizado por meio do LXC (Linux Containers) e chroot. O administrador de dynos (Dyno Manager) é responsável por manter os dynos rodando. Caso um dyno apresente um problema, este é automaticamente substituído por outro e as informações, repassadas. O Heroku conta com um gerenciador de base de dados built-in entre seus serviços ofereci- dos, chamado Heroku Postgres, o método de armazenamento de dados mais comum entre as aplicações Heroku. [53] A Heroku Postgres é um gerenciador de banco de dados na nuvem. A base armazena os dados espalhando-os em diversos Amazon EBS (Amazon Elastic Block Store), assegurando que a falha de um não levará a base inteira à falha. Backups automatiza- dos também são providenciados pelo Heroku e a base é checada uma vez a cada 30 segundos para garantir funcionalidade correta. A grande desvantagem do Heroku é seu alto custo para escalar a capacidade e os limites à customização pelo desenvolvedor. É uma ótima plataforma para o início de um negócio (startups, freelancers, pequenos negócios), mas ao longo do caminho pode se tornar custosa. Como o PlanEx está em sua primeira etapa de história e consolidação, o uso do Heroku é adequado. 66 3.1.6 Crawler Um web crawler (também conhecido como robot, spider ou rastreador web em português) é um programa que faz download de páginas. Os web crawlers reunem informações (corpo) da página, cadastram seus links (em índice) e permite a usuários que realizem consultas sobre esses índices. Rastreadores web são os principais componentes de sites provedores de pesquisa. O motivo da utilização desses rastreadores reside no fato de que a web não está armazenada em um repositório central de informações, e sim espalhada em milhões