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**: ![](https://i.imgur.com/jotrhSE.png) ### 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`: ![](https://i.imgur.com/AhMRcMZ.png) #### 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: ![](https://i.imgur.com/7ZQeREw.png) :::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: ![](https://i.imgur.com/q7CNrs7.png)