Follow falcon_dark on Twitter
Google

quarta-feira, março 22, 2006

Servidor de aplicações com Linux

Uma das estratégias que acho mais válidas na divulgação do software livre é explicar o que ele consegue fazer que o software proprietário não consegue, ou se consegue exige um investimento muito alto. Com a Microsoft anunciando o atraso do Windows Vista (que novidade!) para Janeiro de 2007 acho oportuno mostrar como o Software Livre pode mandar bem no ambiente doméstico e fazer coisas que o Windows sozinho não faz. Montar um servidor de aplicações é uma dessas coisas que o Linux faz "saindo da caixa" e que para ser feita no Windows precisa de softwares muito caros.

Se você tem várias máquinas em casa, como eu, passa pelo problema de ter que mante todas elas configuradas e atualizadas, seja por segurança, seja para garantir que seus aplicativos e arquivos estarão ao alcance do mouse quando você precisar. Para isso, muito mais econômico que instalar vários sistemas completos e programas, um em cada máquina, é manter um servidor de arquivos e aplicações. Com um pouco de conhecimento básico sobre o funcionamento do GNU/Linux você pode aprontar maravilhas que não só irão impressionar seus amigos que usam Windows, mas também vão economizar um bocado em upgrades de hardware.

A opção por terminais leves (LTSP) pode até ser boa, mas exige bastante estudo e configuração, além do fato de criar um grande tráfego na rede graças à distribuição de broadcasting do NFS. Por isso (principalmente se sua rede for de apenas 10Mbps ou for wi-fi) uma opção mais econômica em uso de banda pode ser uma idéia melhor.

Aqui eu optei pelo XDM. O XDM é uma característica do X Server do UNIX que permite que o servidor de interfaces de uma máquina envie dados para o cliente X de outra. Na prática isso significa que você terá a aplicação rodando e consumindo recursos em um computador e sendo exibida em outro. E a partir daí há dois modos de operar o sistema. Eu uso ambos os modos por aqui e vou descrever como eu faço isso. Pode ser útil se você tiver uma máquina muito boa e outras nem tão boas assim ligadas na rede. Você concentra o uso de recursos no servidor e disponibiliza para todos os usuários um sistema padrão. Você deixa de preocupar-se com o hardware e o software dos clientes e passa a concentrar seus investimentos (monetários e de tempo) apenas no server.

Tenho 3 máquinas na minha rede doméstica e um notebook:
Phoenix: servidor de arquivos, aplicações e máquina para uso pessoal - Pentium III 850MHZ com 740MB RAM e 160GB de HD
Shadowcat: cliente para minha irmã - Pentium III 850MHz com 512MB RAM e 20GB de HD
Mystique: cliente para meus pais - K6II 233MHz com 128MB RAM e 4GB de HD
Rogue: meu notebook - Sempron 1.6GHz com 740MB RAM e 40GB de HD

Note que meu servidor não se destaca tanto em termos de performance de hardware, sendo uma máquina já modesta para os padrões atuais. Teria problemas para rodar o Vista com certeza, mas roda bem o Linux e serve bem para os propósitos. Meu intuíto é manter o parque atual e dentro de 18 meses comprar um hardware mais poderoso para assumir a função de server. A beleza da coisa é que eu não preciso pensar em jogar nada disso fora e nem em atualziar o hardware existente (nem mesmo o K6) já que um servidor mais potente compensará a idade do resto das máquinas.

Phoenix tem um sistema completo, bem instalado, cheio de aplicativos e guarda os arquivos de todo mundo. Ele mantém também usuários para todos na casa e suas configurações. Shadowcat e Rogue são máquinas boas ainda, portanto receberam também sistemas completos e ambas podem operar de forma totalmente independente do servidor, porém elas não guardam arquivos locais. MP3, fotos, vídeos, documentos pessoais, tudo isso está no server. Mystique é completmente dependente do servidor, se Phoenix estiver desligada essa máquina não serve pra muita coisa.

A relação entre Phoenix e Mystique é a primeira de duas opções que comentei ali em cima sobre o XDM. Chamarei ela de dependência completa. Mystique tem apenas um sistema Linux básico e um Xorg configurado para requerer conexão à Phoenix. Quando Mystique é ligada ela entra em modo gráfico e a tela que aparece indica: Bem vindo à Phoenix. O usuário então loga em sua conta sediada no server. Configurações de compartilhamento de arquivo não são necessárias, pois o usuário trabalha como se estivesse em um logon local na própria Phoenix. Seus arquivos, aplicativos e configurações estão todos lá. Esse é o uso ideal para máquinas antigas e com pouco poder de fogo.

As outras duas máquinas tem com o servidor uma relação de dependência parcial apenas. Seus sistemas, interfaces e desktops carregam de maneira totalmente autônoma e funcionam mesmo que o server esteja caído. No entanto quando preciso de alguma aplicação menos comum operando o notebook e ela já está instalada no server o que eu faço é apenas importar a aplicação (que roda e consome recursos no server). O server mantém um compartilhamento de arquivos e impressoras, então mesmo que eu esteja com uma aplicação local em um dos clientes posso usar meus arquivos e imprimir sempre que necessário.

O grande barato é que nesse regime, se eu preciso usar uma aplicação que não existe na máquina local, como o Inkscape, por exemplo que existe apenas no server, não preciso sequer abrir uma interface gráfica completa do server, posso buscar a aplicação de maneira direta. O server enviará os dados relativos à aplicação e ela trabalhará sem sequer precisar usar o compartilhamento de arquivos pela rede, pois ela já está rodando no servidor de arquivos.

O procedimento é totalmente seguro, pois o processo é efetuado via SSH. No caso do Inkscape, por exemplo, para executar o programa a partir do meu notebook apenas preciso abrir um terminal e executar:
[falcon@rogue ~]$ ssh -X phoenix
e efetuar o logon com meu usuário normal. Após estar no shell do server, preciso apenas saber o que quero executar:
[falcon@phoenix ~]$ inkscape
e pronto, a janela do Inkscape aparece na tela do meu notebook, onde o Inkscape não está instalado. Esse procedimento de logon por ssh funciona para praticamente qualquer aplicação que vc queira, e assim é possível manter aqueles programas que todos usam raramente apenas no server. Aqui em casa faço isso com o GIMP, Inkscape, Eclipse, e vários outros.

A melhor estratégia é você usar a dependência completa para aquelas máquinas mais fracas e para as móveis ou para as mais potentes manter sistemas separados. Isso garante autonomia e ao mesmo tempo economia de espaço. Faço isso com meu notebook usando conexão wi-fi e o desempenho é muito bom. Rodar aplicações de maneira remota assim é uma mão na roda para economizar espaço em disco e simplificar parte da manutenção de sua rede doméstica.

Ainda que isso possa ser uma alternativa para pequenas redes empresariais deve-se lembrar que o usuário estará o tempo todo rodando aplicações no servidor (com um usuário com menos direitos) mas ainda assim isso é um fator que compromete a segurança.

Se o uso do shell não agrada, você pode criar ícones no desktop e usar pequenos scripts para abrir conexões ssh de maneira automática e executar o aplicativo. Seria apenas clicar e usar, mas deve-se prestar atenção ao número de conexões ssh pois em grande quantidade elas podem sobrecarregar um pouco o servidor. Mas a rigor uma rede com um servidor e 5 máquinas poderia ser atendita por essa solução "improvisada" e que economiza algums GB de disco e diminui o tempo de manutenção dos clientes da rede.

Para mim é um grande recurso da dupla Linux/Xserver que me permitiu implementar uma funcionalidade que com MS Windows eu não conseguiria (por problemas de custo), que simplifica minha vida para administrar a rede e os terminais, e que no futuro irá me economizar alguns bons trocados, pois em lugar de ter de manter 3 máquinas atualizadas preciso atualizar apenas uma.

Na próxima vez que você falar de Linux para aquele seu amigo que usa Windows, em lugar de dizer que é grátis, experimente falar desse exemplo, talvez impressione mais, já que o Windows dele provavelmente também saiu de graça ;-)

Follow falcon_dark on Twitter
Google
Comments:
Rapaz, eu tenho um cliente que roda uma aplicação de gerenciamento financeiro.
A aplicação é local, feita em Visual FoxPro e usa um banco de dados local.

Pra solucionar o problema, o sujeito instalava o programa em todas as máquinas e compartilhava o diretório do DB pelo compartilhamento windows padrão. Não é preciso dizer que ele tinha alguns problemas quando 2 pessoas tentavam alterar o mesmo registro ao mesmo tempo (truncava!).

Pois então, um belo dia surgiu o medo nele, "e se algum funcionário meu sumir com as informações?", sim, porque o banco de dados é em arquivos, e qualquer um tem acesso de leitura e escrita no diretório. A empresa que desenvolve o software não cogitou a ideia de uma migração para um db removo, como sql server por exemplo.

A solução foi: Terminal Services. Além de ser caro, cobrar licenças por conexões, foi o que solucionou.
O banco de dados agora fica em um servidor de aplicação, num diretório não compartilhado na rede, e os usuários abrem uma sessão no Terminal Services onde só tem o privilégio de ver a aplicação.

Uma verdadeira gambiarra! Se tivesse qualquer coisa como o X Server para Windows, eles não precisariam usar aquele cliente bizarro do Remote Desktop nas workstations. Rodariam a aplicação de forma transparente nas workstations. Até andei pesquisando por soluções assim para o windows e o máximo que eu encontrei foi o Citrix Metaframe. Não muito diferente do Terminal Services e muito mais caro.

Se a aplicação deles fosse, pelo menos, multiplataforma... O problema estaria solucionado! :)
 
Muito legal este seu "case". Melhor ainda se tivesse um tutorial de como replicar a idéia. Em escolas as vezes se tem máquinas novas e velhas e uma solução mista desta seria uma mão na roda
 
Postar um comentário

Links to this post:

Criar um link



<< Home

This page is powered by Blogger. Isn't yours?