Projeto E Desenvolvimento De Um Sistema De Software De Alto Desempenho Para Execução De Competições De Programação Com Números Massivos De Usuários
Total Page:16
File Type:pdf, Size:1020Kb
UNIVERSIDADE FEDERAL DE SANTA CATARINA CENTRO TECNOLÓGICO DEPARTAMENTO DE AUTOMAÇÃO E SISTEMAS ENGENHARIA DE CONTROLE E AUTOMAÇÃO Vanderlei Munhoz Pereira Filho Projeto e desenvolvimento de um sistema de software de alto desempenho para execução de competições de programação com números massivos de usuários Florianópolis 2020 Vanderlei Munhoz Pereira Filho Projeto e desenvolvimento de um sistema de software de alto desempenho para execução de competições de programação com números massivos de usuários Esta monografia foi julgada no contexto da disciplina DAS5511: Projeto de Fim de Curso, e APROVADA na sua forma final pelo curso de Engenharia de Controle e Automação Florianópolis, 3 de março de 2020. Banca Examinadora: ________________________ Flávia Dias de Carvalho Orientadora na Empresa IBM ________________________ Prof. Márcio Bastos Castro, Dr. Orientador no Curso Departamento de Informática e Estatística ______________________ Prof. Felipe Gomes de Oliveira Cabral, Dr. Avaliador Departamento de Automação e Sistemas ________________________ Matheus Domingos da Silva e Silva Debatedor Departamento de Automação e Sistemas ________________________ Gabriel José Prá Gonçalves Debatedor Departamento de Automação e Sistemas Ficha de identificação da obra elaborada pelo autor, através do Programa de Geração Automática da Biblioteca Universitária da UFSC. Pereira Filho, Vanderlei Munhoz Projeto e desenvolvimento de um sistema de software de alto desempenho para execução de competições de programação com números massivos de usuários / Vanderlei Munhoz Pereira Filho ; orientador, Márcio Bastos Castro, 2020. 141 p. Trabalho de Conclusão de Curso (graduação) - Universidade Federal de Santa Catarina, Centro Tecnológico, Graduação em Engenharia de Controle e Automação, Florianópolis, 2020. Inclui referências. 1. Engenharia de Controle e Automação. 2. computação em nuvem. 3. sistemas distribuídos. 4. virtualização de hardware. I. Castro, Márcio Bastos. II. Universidade Federal de Santa Catarina. Graduação em Engenharia de Controle e Automação. III. Título. Vanderlei Munhoz Pereira Filho Projeto e desenvolvimento de um sstema de software de alto desempenho para execução de competições de programação com números massivos de usuários Esta monografia foi julgada no contexto da disciplina DAS5511: Projeto de Fim de Curso, e APROVADA na sua forma final pelo curso de Engenharia de Controle e Automação Florianópolis, 3 de março de 2020. Banca Examinadora: ________________________ Flávia Dias de Carvalho Orientadora na Empresa IBM ________________________ Prof. Márcio Bastos Castro, Dr. Orientador no Curso Departamento de Informática e Estatística ______________________ Prof. Felipe Gomes de Oliveira Cabral, Dr. Avaliador Departamento de Automação e Sistemas ________________________ Matheus Domingos da Silva e Silva Debatedor Departamento de Automação e Sistemas ________________________ Gabriel José Prá Gonçalves Debatedor Departamento de Automação e Sistemas “There are two ways of constructing a software design: one way is to make it so simple that there are obviously no deficiencies, and the other is to make it so complicated that there are no obvious deficiencies.” (C. A. R. Hoare, 1996) RESUMO Este documento detalha o projeto de fim de curso realizado pelo autor durante seu período de estágio na IBM, no contexto da disciplina obrigatória DAS5511 do curso de engenharia de controle e automação da UFSC. O projeto em questão envolve a concepção, desenvolvimento, teste e documentação de um sistema de software ro- busto, visando a substituição de um sistema protótipo já existente. O novo sistema, entregue ao fim deste trabalho, é capaz de solucionar o seguinte problema de negócio da empresa: realizar e supervisionar competições de programação com números mas- sivos de participantes, em escala multinacional. Algumas especificações desafiadoras desse sistema são: tolerância a falhas com zero-downtime deployment, mínima latên- cia possível para múltiplas requisições simultâneas, e controles rígidos de privacidade, em cumprimento com a GDPR Européia e LGPD Brasileira. Técnicas de computa- ção paralela e programação concorrente são aplicadas para executar as tarefas mais computacionalmente intensivas, visando alcançar os requisitos de desempenho. A im- plementação de proxies e algoritmos de criptografia são adotadas para alcançar os requisitos de segurança e privacidade. Diferentes arquiteturas de implantação são ana- lisadas desde a etapa de planejamento, até as etapas de implementação e teste, de forma a avaliar os custos e benefícios de cada uma. Ao final, testes comparativos, ou benchmarkings, são realizados no sistema desenvolvido, já em ambiente de produção, a fim de avaliar possíveis gargalos e o atendimento completo dos requisitos. Os resul- tados, em conjunto com uma análise crítica do trabalho desenvolvido como um todo, são apresentados nos últimos capítulos deste documento. Palavras-chave: Computação paralela. Programação concorrente. Sistemas distribuí- dos. Servidores Web. Tolerância à falhas. Arquitetura de software. Integração de siste- mas. ABSTRACT This document details the final project developed by the author during his internship at IBM, in the context of the required DAS5511 discipline of the UFSC automation and control engineering course. The project in question involves the development, testing and documentation of a robust software system, that will serve as a replacement for an existing prototype system. The new system, delivered by the time of publication of this document, is capable of solving the following business problem of the company: holding and overseeing programming competitions with massive numbers of partici- pants on a multinational scale. Some challenging specifications of this system are: fault tolerance with zero downtime deployment, minimum possible latency for concurrent requirements, and strict privacy controls in compliance with the European GDPR and the Brazilian LGPD. Parallel computing and concurrent programming techniques are applied to perform the most computationally intensive tasks, enabling the system to achieve performance requirements. The implementation of proxies and the adoption of encryption algorithms are made to meet security and privacy requirements. Different deployment architectures are analyzed since the planning steps, until the implemen- tation and testing of the system, studying the costs and benefits of each architecture. Lastly, comparative tests, or benchmarks, are performed in the complete system, al- ready in the production environment. Possible bottlenecks are evaluated, as well as if the system completely fulfills all requirements established at the planning phase. The results, together with a critical analysis of the work as a whole, are presented in the last chapters of this document. Keywords: Parallel computing. Concurrent programming. Distributed systems. Web servers. Fault tolerance. Software architecture. Systems integration. LISTA DE FIGURAS Figura 1 – Edifício da IBM em São Paulo, projetado pelo escritório de arquitetura Aflalo & Gasperini em 1977. 19 Figura 2 – Representação gráfica da Lei de Amdahl. 28 Figura 3 – Amostra de página Web criada com o sistema unificado de design da IBM. 34 Figura 4 – Arquiteturas de virtualização de hardware. 36 Figura 5 – Arquitetura de virtualização de sistemas operacionais via containers. 37 Figura 6 – Arquitetura da plataforma Docker. 38 Figura 7 – Estrutura exemplo de uma imagem Docker. 39 Figura 8 – Arquitetura de um cluster Kubernetes. 42 Figura 9 – Modelos de serviço comuns na computação em nuvem. 46 Figura 10 – Fotografia do interior de um dos centros de dados da IBM em Dallas. 47 Figura 11 – Localização geográfica dos centros de dados e pontos de presença de rede da IBM Cloud. 48 Figura 12 – IBM Watson contra Ken Jennings e Brad Rutter no programa Jeo- pardy! transmitido em 2011. 51 Figura 13 – Catálogo mostrando alguns serviços do Watson na página Web da IBM Cloud. 53 Figura 14 – Visão externa do cluster de servidores POWER750 onde era execu- tado o Watson em 2011. 55 Figura 15 – Interface gráfica do WKS e anotação de entidades textuais. 56 Figura 16 – Interface gráfica do WKS e anotação de relações textuais. 57 Figura 17 – Arquitetura do Apache Kafka. 59 Figura 18 – Arquitetura simplificada do sistema piloto. 66 Figura 19 – Diagrama de casos de uso do sistema. 70 Figura 20 – Arquitetura do sistema proposto. 73 Figura 21 – Arquitetura do sistema da perspectiva de infraestrutura. 89 Figura 22 – Provisionamento de servidores bare-metal na IBM Cloud. 90 Figura 23 – Provisionamento de máquinas virtuais na IBM Cloud. 91 Figura 24 – Estrutura de arquivos gerada pela ferramenta openshift-install. 94 Figura 25 – Verificação de status do cluster OpenShift via CLI. 95 Figura 26 – Console Web do Red Hat OpenShift. 96 Figura 27 – Camadas de hardware e software do cluster OpenShift. 96 Figura 28 – Diagrama de portas expostas para o banco de dados Scylla. 99 Figura 29 – Camadas de dados implantadas nos servidores bare-metal. 101 Figura 30 – Integrações entre a interface administrativa e o resto do sistema. 101 Figura 31 – Integrações relacionadas aos pontuadores automáticos. 104 Figura 32 – Fluxo de atividades do algoritmo de pontuação automática. 115 Figura 33 – Integrações do Web proxy para o cluster Apache Kafka. 119 Figura 34 – Integrações do Web proxy para o cluster Scylla. 120 Figura 35 – Interface gráfica: tela de teste de modelo. 122 Figura 36 – Interface gráfica: tela de resultados de modelo. 123 Figura 37 – Balanceamento de carga nas aplicações Python.