Eduardo Mello Cantú Resumo: The Multi

Propaganda
Eduardo Mello Cantú
Resumo:
The Multi-Tasking Virtual Machine: Building a
Highly Scalable JVM
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
Florianópolis – SC
2008.1
1
Introdução
Algumas tarefas de programação relacionadas a programação do sistema não
podem ser executadas separadamente usando as bibliotecas padrão Java.
Desenvolvedores talvez tenham que usar código nativo, linguagens de script, C ou C++
antes de retornar ao código Java. Por exemplo, afirmando que uma dada computação Java
deve ter acesso exlusivo a pelo menos 50% do processador da máquina que a hospeda, ou
que seu uso de rede seja limitado a 5 MBs, não podem ser expressados nas interfaces
atuais.
E hoje, quando um usuário executa múltiplas aplicações Java concorrentes em
diferentes instâncias da máquina virtula Java ( JVM), a tendência é de duplicação do
esforço em cada máquina virtual. Por exemplo, quando múltiplas aplicações são
executadas concorrentemente, cada uma tem que carregar, transformar, verificar e criar a
representação de todas as classes da aplicação, até mesmo as mais comuns, como
java.lang.Object. O tempo de inicialização da aplicação, da memória necessária, e da
execução impactam negativamente na aplicação. Desenvolvedores que tentam contornar
o problema usando classloaders ( carregadores de classes) logo descobrem que eles
provêm isolação inadequada entre aplicações, tornando difícil a finalização das
aplicações.
O time de pesquisa do projeto Barcelona dos laboratórios da Sun Microsystems,
liderados pelo Dr. rzegorz Czajkowski, está corrigindo esses problemas desenvolvendo
técnicas que permitem alocar múltiplas aplicações em uma única instância da máquina
virtual. As aplicações são isoladas umas das outras e cada um "pensa" que possui a
máquina virtual só para ela. Compartilhamento transparente de metadados, como o
bytecode de métodos, reduz os tempos de alocação e memória e inicialização. Além
disso, através da contrução da fundação de uma computação Java isolada, o time
desenvolveu um conjunto de técnicas de gerenciamento de recursos e APIs que permitem
o desenvolvedor definir novos tipos de recursos, particionar recursos entre as
computações, e controle de gerenciamento de recursos.
2
A máquina virtual multi-tarefas
As extensões e modificações propostas para a máquina virtual foram prototipadas
como Máquina virtual multi-tarefa ( do inglês, Multi-Tasking Virtual Machine ou
MVM). Bytecodes Java existentes podem rodar imutáveis, aproveitando os recursos da
escalabilidade. Novas aplicações podem tirar proveito de novas abstrações e interfaces,
que atualmente não fazem parte da plataforma Java, para cumprir uma variedade de
tarefas de programação dos sistemas. "Através de todas as métricas da escalabilidade,
queremos melhorar o bem estar dos programas Java", afirma Czajkowski. "Estamos
escalonando a plataforma Java e a tornando um ambiente operacional completo,
adicionando inúmeras APIs e extensões para que tudo o que você precisa, relacionado ao
domínio de programação de sistemas, possa ser feito pela própria linguagem."
O MVM é uma máquina virtual de propósito geral para executar múltiplas
aplicações escritas na linguagem Java, baseadas na máquina virtual Java HotSpot Virtual
Machine e se compilador. Através da hospedagem de múltiplas tarefas, o MVM aumenta
a escalabilidade da plataforma Java.
"Adentramos a execução da máquina virtual Java e fizemos a mesma pergunta
para cada componente", explica Czajkowski, "Isto pode ser compartilhado? Se pode,
então será. Senão, o replicamos ou modificamos algo para que se torne altamente
compartilhável." O MVM alcança uma boa escalabiliade através de uma agresiva
aplicação de seu principal princípio: o tanto de compartilhamento transparente de sua
execução quanto possível entre as aplicações e apenas a replicação do sistema em
execução que depende de um estado da aplicação. Todas as APIs e mecanismos
conhecidos da linguagem de programação Java são disponibilizados para as aplicações. O
resultado final é que ninguém pode dizer se uma aplicaçõa está rodando em um MVM ou
em uma máquina virtual só dela.
Enquanto o protótipo orginal do MVM focava no ambiente Solaris/SPARC, seus
criadores não veêm grandes problemas em portá-lo para outras plataformas. MVM
também é um passo além para prover um ambiente completo de operações para
programas Java, através de um conjunto de APIs cuidadosamente desenvolvidas para
gerenciamento de recursos, serviços e agrupamentos ( clustering).
3
A API isolada
Computações isoladas, ou isoladas do Java são a chave para a programação
MVM. Uma isolada é uma aplicação Java que não compartilha objetos entre outras
isoladas. A especificação da Application Isolation API, JSR 121 no Java Community
Process, permite a criação e detruição dinâmica das isoladas.
4
O ganho de performance com o MVM
O MVM oferece um ganho de performance substâncial. Quando comparado a
máquina virtual HotSpot, da qual deriva, o MVM reduz o tempo de inicialização entre
60% e 90%, uma espera de três segundos por uma aplicação gráfica ( GUI) é reduzido
para um segundo.
O ganho de performance é dado por dois motivos. Primeiro, porque o MVM
compartilha a representação da execução de classes entre aplicações, quando uma
aplicação carrega uma classe, outra pode usá-la sem ler o arquivo, transformar e verificar.
Segundo, com vários componentes Java trabalhando no mesmo processo, a troca de
processos é evitada quando eles se comunicam.
5
Falso começo em compartilhamento de processos
Antes de completar o MVM, o time do projeto Barcelona testou duas alternativas
que permitiam processos de JVM separadas compartilhar dados. Em ambos modelos,
cada aplicação executava em sua própria máquina virtual ( JVM) em seu próprio
processo do sistema operacional, enquanto compartilhava código com outras JVMs.
6
Transferindo o MVM para a plataforma Java 2, Micro
Edition ( J2ME)
O time do projeto Barcelona tem colaborado com um grupo da Sun para contruir
uma máquina virtual para telefones celulares em uma tentativa disponibilizar o MVM
para o CLDC ( Connected Limited Device Configuration).
7
Aplicando o MVM na plataforma Java 2, Enterprise
Edition ( J2EE)
A plataforma Java 2, Enterprise Edition ( J2EE) é similar a um sistema
operacional no qual um servidor J2EE pode hospedar diversas aplicações. Na prática, isso
é raramente feito devido a limitações na escalabilidade, fraco isolamento entre aplicações
e facilidades de gerencimento de recursos inadequados na plataforma Java. Isso leva a
proliferação de instâncias de servidores, cada um hospedando uma única aplicação,
ocasionando em um aumento dramático da memória necessária e uma administração
complexa do sistema. O MVM suporta múltiplas instâncias do J2EE 1.3.1 Reference
Implementation através de uma eficiente implementação de "isoladas", assim aumentando
substâncialmente a escalabilidade, reduzindo a memória necessária e o tempo de
inicialização do servidor.
8
A interface do gerenciamento de recursos
Enquanto um servidor J2EE suporta múltiplas aplicações, níveis de performance
podem se tornar difíceis de controlar devido a ausência de facilidades para gerenciamento
de recursos na plataforma Java. O time do projeto Barcelona criou uma interface para
gerenciamento de recursos ( Resource Management - RM - interface), implementada
baseada nas isoladas do MVM.
Referência Bibliográfica
HEISS, Janice J.. The Multi-Tasking Virtual Machine: Building a Highly Scalable JVM.
Disponível em < http://java.sun.com/developer/technicalArticles/Programming/mvm/>.
Acesso em 10 de maio de 2008.
Download