Download as PDF

Proposta

O Consul project é um projeto de desenvolvimento de um software livre para participação popular. O Consul visa facilitar a participação popular em processos legislativos da sua região através de um portal onde contribuições podem ser feitas de diversas maneiras, como por exemplo discussões sobre projetos de leis, votações sobre gastos públicos, debates, propostas de legislações e orçamentos, entre outras ferramentas para a melhor gestão da grande quantidade de dados gerada pelas contribuições da população.

O Consul é um software livre, distribuído sob a licença AGPL3. O projeto foi iniciado pela prefeitura de madrid, desenvolvido utilizando as linguagens de programação Ruby e JavaScript, com o auxilio das linguagens de marcação HTML e CSS. O Sofware foi construído em cima do framework Ruby on Rails e recebe contribuições de todas as partes do globo, além de ser utilizado por mais de 30 países , somando mais de 100 instituições, totalizando mais de 90 milhões de pessoas utilizando o software.

O objetivo deste estudo não está no desenvolvimento e aplicação do Consul em si, o foco está em como providenciar a aplicação para que o software possa atender uma população de milhões de usuários, como por exemplo a prefeitura de São Paulo, de forma escalável e efeciente. Para facilitar a análise, dividiremos o estudo sobre como escalar o Consul em dois grandes subconjuntos: aplicação e arquitetura. No que tange a aplicação do Consul, o objetivo é analisar a aplicação Rails e o modo em que ela está estruturada para identificar gargalos no desenvolvimento do software, como por exemplo informações que deveriam estar sendo colocadas em cache porém não estão sendo requisitadas do banco de dados a cada chamada de pagina ou queries SQL muito longas. Por outro lado, este estudo também tem como objetivo desenvolver uma arquitetura baseada em containers para distribuir o Consul de forma escalável, eficiente e confiável, analisando gargalos nesta arquitetura em questão.

Agora o leitor deve estar se perguntando o motivo de desenvolver uma nova arquitetura para distribuir o Consul através de containers focada em escalar a aplicação de forma eficiente. O Consul, tem o objetivo de facilitar a participação popular em projetos legislativos, e, naturalmente, alguns projetos chamam mais atenção do que outros, logo atraem um maior público. Em uma cidade como São Paulo, o software poderia variar de alguns milhares de usuários utilizando a plataforma para projetos pequenos até um projeto que tenha uma comoção maior e atraia milhões de pessoas para contribuir com o projeto em questão. Dito isso, é importante que a aplicação seja capaz de lidar com o imenso tráfego de milhões de usuários e ao mesmo tempo, momentos de menor fluxo de dados onde uma estrutura menor poderia ser utilizada.

Para atingir o modelo proposto de distribuição do Consul será necessário estudar a aplicação e como ela foi construida para procurar possíves gargalos na mesma, utilizando alguns softwares auxiliares para medir o desempenho do Consul. Em um segundo momento será necessário aprofundar em como construir uma arquitetura de containers para distribuir o software em Kubernetes de forma a melhorar a utilização do hardware disponível, evitando desperdícios em servidores maiores do que o necessário, apenas para suportar pequenos momentos de pico de acesso ou a necessidade de alguém, manualmente, providenciar mais servidores para atender uma demanda maior.

About the project

Aluno:

Orientadores:

  • Alfredo Goldman vel Lejbman - lattes
  • Vanessa Martinez Tonini - lattes

Titulo:

Abstract

This project studies how a Ruby on Rails application reacts through an increasing number of simultaneous users accessing the service. More specifically, we are going to study Consul,and propose improvements to lower the response time and increase the number of supported simultaneous users.

Consul is an Open Source application under GPLv3 developed by the Madrid city hall.Its goal is to ease the process of citizen participation in the legislation process, debates,and polls. But who is better to define Consul then itself? According to Consul’s website,"Consul is the most complete citizen participation tool for open transparent and democratic government". The amazing part of this software is the community around it, with over 35 countries, 135 institutions, and 90 million citizens participating, not to mention over 1000 stars on GitHub, 700 forks, and 15000 commits.

Aside from the technical challenges, what drove me towards this project is its context under the concept of smart cities. Sticking with the definition, "A smart city is a city that incorporates information and communication technologies (ICT) to enhance the quality and performance of urban services such as energy, transportation, and utilities to reduce resources consumption, wastage, and overall costs". Consul comes right into play helping citizens participate more in the legislation process to help public authorities focus their effort where the problem is.

To understand the application behavior we will use a load test simulation software calledGatling to simulate user loads from a single user to a batch of simultaneous users during fixed time intervals. Consul will be running on a Kubernetes simulated cluster through Minikube,which will range CPU and RAM. The last unknown that we will be simulating is the number of replicas for each cluster size.

Finally, we will discuss some insights on how to improve the reliability and scalability of a Ruby on Rails application, of course, focusing on our scenario, which is the Consul.To do so we will be going through a detailed statistical analysis of how this application handles simultaneous users and how minor improvements could increase the availability of the software. We hope, as well, to convince the reader of the importance of load tests and talk about the advantages Kubernetes bring us.