Apresentação do trabalho desenvolvido na GVI (outubro/1999 a abril/2000). O projeto se tratava de um sistema de hospedagem de sites denominado 'servidores virtuais', onde eu fui o responsável pelo seu planejamento, desenvolvimento e implantação.
A Global View Internet Services é um pequeno provedor de acesso à internet que começou suas atividades no meio de 1999. Com uma cartela de clientes restrita, seu foco foi obter crescimento através de um nicho de mercado expressivo: a de hospedagem de sites.
O crescimento da empresa estaria muito limitado se fosse depender de pessoas para fazerem a manutenção dos domínios; além disso, os usuários gostariam de que as configurações fossem feitas na hora pedida, o que também era um problema. Com esses fatores em mente, Felipe Gustavo Almeida e eu fomos contratados para desenvolver um sistema automatizado, como os já existentes nos EUA.
Desenvolvimento de um sistema de hospedagem de sites totalmente automatizado, isto é, via web o usuário pode executar todas as tarefas necessárias à manutenção de seus domínios, assim como de seus respectivos usuários. Nenhuma especificação do projeto nos foi fornecida; simplesmente foi passado que deveria ser um sistema semelhante aos existentes, que desse poder ao usuário de administrar tudo o que precisasse via web.
Devido à esta falta de objetivos pré-definidos, primeiramente nós pesquisamos o que já existia; em seguida, pesquisamos como poderíamos dar mais funcionalidade a esses serviços. Aí pesquisamos como a possibilidade de minimizar custos no projeto (basicamente máquinas). Com todas estas informações, pudemos definir o que deveríamos fazer: utlizando-se linux como plataforma, criar subsistemas dentro dele, de modo que este pudesse executar todas (ou quase) todas as funções do servidor original. Além disso, deveria ser possível a criação de um administrador via web para cada um deles, de maneira automatizada.
O quadro de funcionários da empresa era muito reduzido, contando somente com nós dois na área de desenvolvimento. Não tínhamos nenhum superior na área, reportávamos diretamente com o proprietário da empresa.
De agosto/99 a fevereiro/00, o trabalho era feito da seguinte maneira: sentávamos eu e o Gustavo um do lado do outro, estabelecaíamos o que iríamos desenvolver, e dividíamos a tarefa. Cada um ia fazendo uma parte, mas ao mesmo tempo perguntando a opinião do outro em relação às soluções adotadas.
A partir de fevereiro, o Gustavo saiu, e o Jeferson Mariano passou a fazer parte da equipe. Como ele não tinha uma experiência em desenvolvimento de sistemas para internet, primeiramente eu delegava algumas tarefas que precisavam ser feitas a ele (programação perl), e outras de cunho didático. Mais tarde, tentei inteirá-lo com o sistema; devido a uma falha do projeto (falta de documentação), foi muito difícil seu entendimento completo do sistema. Esta era a situação quando deixei a empresa.
Posso dizer que após a partida do Gustavo, fui o único responsável pelo projeto. Mesmo assim as coisas não eram como eu queria: o dono da empresa queria resultados rápidos e não pensava longe. Por isso, tive que abandonar o desenvolvimento muitas vezes para consertar problemas causados por afobamento (ex: servidor que entrou no ar antes de estar completo, sistemas paralelos que precisaram ser desenvolvidos e dedicaram uma atenção especial). Esse foi um dos motivos da minha saída da empresa.
O sistema está pronto e em funcionamento. Descreverei neste item o que foi feito, e o que estava para fazer (melhorias, novos serviços), além de explorar melhor o significado do sistema.
Uma noção de serviços virtuais pode ser encontrada neste howto. Baseados neste documento, começamos a definir como seria o sistema. Definimos que cada máquina deveria se comportar como várias, e que cada usuário teria a impressão de que possui um servidor só para ele. Essa é a idéia do que é um servidor virtual: um sistema que se porta como um servidor, mas que na verdade é um subsistema dentro de um. Por exemplo, é possível dar telnet no sistema, ver a árvore de diretórios e dizer que é um servidor.
Como o projeto já está feito, simplesmente enumerarei os principais tópicos dos itens desenvolvidos.
- Configuração de IP aliasing e traffic shaper baseados em linux
- Como construir o subsistema (estrutura, funcionamento, programas, serviços, etc)
- Conseguir se logar via telnet em um subsistema
- Configurar todos os demais serviços e testar (email, ftp, web, ssl)
- Definir um banco de dados para armazenar o estado do sistema
Criar um script em bash de instalação automática: cria um subsistema, faz as configurações de rede necessárias, inicia o banco de dados, e levanta a interface para começar a operar.
- Desenvolvimento de programas em bash/perl/expect/C para fazerem algumas syscalls e operações de baixo nível
- Planejamento de uma estrutura e linguagem para o administrador
- Definição do que seria oferecido pela interface, isto é, serviços que conseguimos automatizar por completo
- Confecção do administrador: dos scripts de mais baixo nível (aqueles que realizam syscalls, alteração no banco de dados) até os que estão relacionados a exibição dos dados na tela.
- Definiço de como acessar o sistema
- Definiço de como autenticar usuários para entrar no sistema
- Sistema automático de estatísticas de acesso aos domínios
- Construção de uma biblioteca básica de CGI para que os usuários usassem, devido à não liberação de CGIs próprios deles
- Sistema de manutenção de acesso restrito a diretórios
- Sistema interno de controle de cobrança
Citarei aqui alguns tópicos de serviços que faltavam ser incorporados/desenvolvidos/implantados, assim como de problemas que não estavam solucionados.
- Webmail
- Como liberar CGI para usuários de maneira segura?
- Sistema automático para controle de pagamentos (geração online de boletos, de verificação de pagamentos anteriores)
- Melhorar controle de cota
- Melhorar controle de usuários no sistema
- Melhorar sistema de automatização de serviços de web server
- Sistema de auto-resposta de e-mails