Serviços e Interfaces para a Cloud (SIC)
Módulo 1 - Introdução à Virtualização de Sistemas: Conceitos e Aplicações
===
###### tags: `SIC`, `Módulo 1`, `Conceitos`, `Implementações` e `Impactos`
:::info
- **Local:** Sala 6.26
- **Sumário:** Conceitos, níveis de implementação e ferramentas de virtualização. Conceito de virtualização, máquinas virtuais (VM) e middleware de virtualização, níveis de implementação de virtualização e respetivo mérito relativo.
- **Autores:** Mário M. Freire [(mario@di.ubi.pt)](mailto:mario@di.ubi.pt), Tiago Simões [(tsimoes@di.ubi.pt)](mailto:tsimoes@di.ubi.pt),
:::
:::info
**Os conteúdos desta aula teórica foram baseados no seguinte livro:**
*Distributed and Cloud Computing: From Parallel Processing to the Internet of Things, Kai Hwang, Jack Dongarra, Geoffrey C. Fox (Authors), Morgan Kaufmann, 1st edition, 2011, ISBN-13: 978-0123858801, 672 pages.`*
:::
# Sumário detalhado
- Conceitos de Virtualização e de Máquina Virtual.
- Níveis de Implementação de Virtualização.
- Mérito Relativo da Virtualização nos Diferentes Níveis.
- Impacto da Virtualização no Crescimento e Custos de um Centro de Dados.
# Virtualização: Conceitos e Níveis de Implementação
## Conceito de Virtualização e de Máquina Virtual
Um computador convencional tem uma única imagem do sistema operativo (SO). Isto oferece uma arquitetura inflexível que conjuga de forma rígida o software aplicacional a uma plataforma de hardware específica. Além disso, software que funciona bem numa determinada máquina pode não ser executável numa outra plataforma em que o conjunto de instruções pode ou não diferir.
:::success
Nestes casos as máquinas virtuais (VMs) oferecem soluções inovadoras para:
- Recursos subutilizados.
- Inflexibilidade ao nível das aplicações.
- Gestão de software.
- Preocupações de segurança nas máquinas físicas existentes.
:::
### A Máquina Virtual
Uma VM pode ser disponibilizada por qualquer sistema de hardware, construida recorrendo a recursos virtuais geridos por um **sistema operativo convidado** (guest OS), para executar uma ou mais aplicações específicas. Existe assim a independência do sistema operativo e das aplicações relativamente ao hardware físico da máquina. Por fim, entre as máquinas virtuais e o *guest OS* existe uma camada de *middleware* designada por *hypervisor* ou monitor de máquina, do inglês *Virtual Machine Monitor* (VMM).
:::success
O *hypervisor* é uma camada de *middleware* que permite criar VMs e gerir os recursos virtuais de uma determinada máquina hospedeira / *host*.
:::
Considere a **arquitetura** de um sistema de computação **antes e após virtualização**:

### Tipos de Máquinas Virtuais
Existem diferentes tipos de máquinas virtuais, por exemplo:
1. **VM Nativa** (*native* VM ou *bare metal* VM) → Máquina Virtual instalada através de um *hypervisor* em modo privilegiado, executada diretamente nos recursos da máquina.
2. **VM Alojada** → Máquina virtual instalada por via de um *hypervisor* em modo não privilegiado. O sistema operativo hospedeiro (*guest OS*) não necessita de ser modificado.
3. **VM em Modo Duplo** → Parte do *hypervisor* é executado no nível do utilizador e a outra parte é executado no nível superior. Neste caso, o sistema operativo hospedeiro pode ter que ser modificado.
O diagrama seguinte demonstra estes 3 tipos de máquinas virtuais, respetivamente em `b`, `c` e `d` esão comparadas com uma máquina física representada em `a`:

#### Multiplexagem, Suspensão, Fornecimento e Migração em Serviços de Máquinas Virtuais num Ambiente Distribuído
Considere os conceitos representados nas figuras seguintes:

:::info
Tal como tinha sido anteriormente identificado uma **VMM** representa um *Virtual Machine Monitor* ou *hypervisor*.
:::
**Multiplexing**: Criação de múltiplos objetos virtuais a partir de uma instância de um objeto físico (i.e., *one to n*).
**Storage Suspension**: Colocação em *storage* instâncias de máquinas virtuais criadas sobre um *hypervisor* ou VMM.
**Provision (resume)**: Resumo ou provisão de máquinas ou objetos virtuais que se encontravam em suspensão.
**Life Migration**: Migração dos serviços (apps e OSs) das máquinas virtuais para diferentes *hypervisors* ou VMMs.
#### Níveis de Implementação de Virtualização
A função principal da camada de software para virtualização é virtualizar o hardware físico de uma máquina hospedeira em recursos virtuais para serem utilizados exclusivamente por VMs.
O software de virtualização cria a abstração de VMs por interposição de uma camada de virtualização em vários níveis existentes um sistema de computador.
**As camadas de virtualização comuns incluem os seguintes níveis:**
1. Arquitetura do Conjunto de Instruções (ISA).
2. Abstração do Hardware.
3. Sistema Operativo.
4. Bibliotecas
5. Aplicação.
| **Nível** | **Aplicações** |
| ------| ----- |
| Arquitetura do Conjunto de Instruções (ISA) | Bochs, Crusoue, QEMU, BIRD, Dynamo |
| Abstração Hardware | MS Hyper V, Xen, KVM/QEMU, VMWare |
| Sistema Operativo | Docker, LXC
| Bibliotecas | vCUDA, WINE, WABI, LxRun
| Aplicação | JVM, .NET CLR|
#### 1. Nível de Arquitetura do Conjunto de Instruções (ISA)
:::success
Instruction Set Architecture (ISA) serve de fronteira entre o hardware e o software de baixo nível. Por exemplo, instruções de comunicação entre um software e o CPU da máquina.
:::
A virtualização neste nível é conseguida através da execução ou emulação de uma determinada ISA pela ISA da máquina hospedeira (*host*).
**Por exemplo**, o código binário MIPS pode ser executado numa máquina hospedeira baseada em x86 com ajuda da emulação ISA. Com esta abordagem, é possível executar uma grande quantidade de *legacy code* escrito para vários processadores no hardware de uma nova máquina hospedeira (host). O mesmo pode acontecer para instruções especificas para sistemas ARM.
O método de emulação básico é através da interpretação do código e isto é conseguido via um programa que interpreta as instruções fonte para as instruções nativas, uma a uma.
:::warning
Uma instrução fonte pode necessitar de dezenas ou centenas de instruções nativas para executar a sua função - **Este processo é relativamente lento.**
:::
Para um melhor desempenho, é desejável ter tradução binária dinâmica (*dynamic binary translation*) que traduz blocos básicos de instruções fonte dinâmicas para instruções alvo ou nativas. Os blocos básicos podem também ser estendidos a traces de programas ou super blocos para aumentar a eficiência da tradução.
:::success
Por outras palavras, ***Dynamic binary Translation*** (DBL) consiste em traduzir em tempo de execução os blocos básicos para instruções alvo ou nativas.
:::
#### 2. Nível de Abstração do Hardware
A virtualização ao nível do hardware é executada no topo da estrutura (*bare*) do hardware:
- Por um lado, esta abordagem administra um ambiente de hardware virtual para uma máquina virtual.
- Por outro lado, o processo administra o hardware subjacente da máquina host através de virtualização.
:::success
A ideia principal é virtualizar os recursos de um computador, tais como processadores, memória e dispositivos de I/O.
:::
A intenção deste nível é melhorar a taxa de utilização de hardware quando existem vários utilizadores simultaneamente a tentar aceder aos mesmos recursos.
#### 3. Nível do Sistema Operativo
Este nível refere-se a uma camada de abstração entre o sistema operativo tradicional e as aplicações do utilizador. A virtualização do nível OS cria *containers* isolados num único servidor físico e as instâncias de sistema operativo para utilizar o hardware e software em *data centers*.
:::info
Os containers comportam-se como servidores reais.
:::
A virtualização do nível OS é frequentemente utilizada na criação de ambientes de *hosting* virtuais para alocar recursos de hardware para um inúmeros utilizadores. É também utilizado, em menor escala, na consolidação de hardware do servidor através da migração de serviços entre diferentes *hosts* para outros *containers*.
#### 4. Nível das Bibliotecas
A grande maioria das aplicações utilizam APIs ao nível do utilizador em vez de utilizar morosas chamadas a bibliotecas do sistema operativo. Assim, e uma vez que a maioria dos sistemas fornecem APIs bem documentadas, esta interface torna-se essencial num contexto de virtualização.
A virtualização com interfaces de biblioteca é possível através do controlo da ligação das comunicações entre aplicações e o resto do sistema através de API *hooks*
:::info
Uma API *hook*, por exemplo, uma *webhook*, pode ser considerada um tipo de
API orientada por eventos em vez de solicitações. Isto é, em vez de uma aplicação realizar uma chamada a um serviço ou aplicação para receber uma resposta, um *webhook* é um serviço que permite que uma aplicação envie dados para outra assim que um determinado evento ocorre.
:::
A ferramenta de software `WINE` implementou esta abordagem para suportar aplicações do Windows sobre um *host* UNIX/Linux. Outro exemplo, é o `vCUDA` que permite aplicações que se encontram em execução numa máquina virtual possam usufruir de aceleração de hardware GPU.
#### 5. Nível de Aplicação
A virtualização ao nível da aplicação virtualiza uma aplicação como uma máquina virtual. Num sistema operativo tradicional, uma aplicação frequentemente corre como um processo, assim a virtualização ao nível da aplicação também é conhecida como **virtualização ao nível do processo.**
A abordagem mais popular é a de instalar máquinas virtuais de linguagens de alto nível (HLL). Neste cenário, a camada de virtualização assenta como um programa aplicacional sobre o sistema operativo. Ainda, esta camada exporta uma abstração de uma máquina virtual que pode executar programas escritos e compilados para uma dada definição de máquina abstrata - Qualquer programa escrito na HLL e compilado para esta VM conseguirá correr nela.
:::success
Uma VM do tipo *High Level Language* (HLL) é um sistema que fornece um processo com um ambiente de execução que não corresponde a nenhuma plataforma de hardware específica. Assim, qualquer programa escrito e compilado na HLL pode ser executado neste tipo de VMs.
:::
Exemplos desta classe de máquinas virtuais: Java Virtual Machine (JVM) e o Microsoft .NET CLR (*Common Language Runtime*).
Existem outras formas de virtualização ao nível da aplicação:
- *Application Isolation* ou isolamento de aplicações.
- *Application Sandboxing*
- *Application Streaming
Nestas formas de virtualização o processo consiste em envolver/acondicionar/*wrap* a aplicação numa camada que se encontra isolada do sistema operativo hospedeiro e de outras aplicações. Assim, o resultado que obtemos é uma aplicação que é muito mais fácil de distribuir e remover de estações de trabalho dos utilizadores.
A plataforma de virtualização de aplicações `LANDESK` permite realizar a instalação de aplicações autocontidas (i.e., *self-contained*) através do isolamento dos ficheiros executáveis e sem a necessidade de instalação, modificação ou alteração de privilégios de segurança do sistema.
# Mérito Relativo da Virtualização nos Diferentes Níveis
Considera-se a seguinte tabela dos méritos relativos da virtualização nos diferentes níveis:
|Nível de Implementação | Desempenho | Flexibilidade das Aplicações | Complexidade da Implementação | Isolamento das Aplicações |
| ------ | ------ | ------ | ------ | ------ |
| Arquitetura do Conjunto de Instruções (ISA) | 2 | 2 | 5 | 5 |
| Abstração Hardware | 3 | 2 | 2 | 2 |
| Sistema Operativo | 5 | 2 | 3 | 2 |
| Bibliotecas | 5 | 3 | 5 | 4 |
| Aplicação | 1 | 5 | 3 | 3 |
(1 - fraco, 5 - muito bom)
# Impacto da Virtualização no Crescimento e Custos de um Centro de Dados
Crescimento e redução de custos de centros de dados ao longo dos anos:
