Introdução

Concluído

O desenvolvimento de programas de nuvem (ou seja, o design e a implementação de sistemas de software que exploram com êxito as funcionalidades de recursos computacionais amplamente distribuídos) apresenta desafios formidáveis. As dificuldades surgem da multiplicidade de possíveis interações lógicas e intercalações temporais entre diversos componentes de software e hardware. Bugs de programas podem ser difíceis de reproduzir e, devido ao comportamento com desempenho não determinístico de alguns programas de nuvem, analisar e determinar a motivação do comportamento de um sistema pode ultrapassar a capacidade humana.

À medida passaram a entender melhor esse problema, pesquisadores e profissionais desenvolveram modelos de programação e computação que atenuam a complexidade inerente dos sistemas de nuvem. Esses modelos, incorporados em sistemas de software/hardware, ficam posicionados entre o desenvolvedor e os recursos computacionais subjacentes, proporcionando ao programador padrões de design estilizados, uma forma relativamente mais simples de pensar na programação distribuída e uma interface flexível para aplicativos, dados e recursos.

A geração atual de modelos de programação de nuvem se baseia em predecessores clássicos que dão suporte à comunicação entre processos, baseada na memória compartilhada e na passagem de mensagem. Embora essas versões iniciais forneçam recursos básicos de interação entre tarefas distribuídas, elas não têm capacidade de paralelizar e distribuir tarefas automaticamente nem de se recuperar de falhas. Os descendentes modernos dessas versões, incluindo o Hadoop MapReduce, o Pregel e o GraphLab, apresentam uma maior sofisticação e atendem especificamente às demandas da programação e da computação distribuídas em ambientes de nuvem. Entre outras vantagens, os modelos atuais libertam os desenvolvedores de preocupações com muitos dos aspectos difíceis da programação distribuída e permitem que os programadores se concentrem nas partes sequenciais dos algoritmos dos aplicativos.

Ecoando o design de 1837 de Babbage do primeiro computador programável, nós distinguimos os modelos de programação de nuvem atuais chamando-os de mecanismos de análise distribuída. Este módulo examina os conceitos e os desafios da computação em nuvem e fornece exemplos atuais de mecanismos de análise para o desenvolvimento de aplicativos de nuvem.

Objetivos de aprendizagem

Neste módulo, você vai:

  • Classificar programas como sequenciais, simultâneos, paralelos e distribuídos
  • Indicar por que os programadores geralmente paralelizam programas sequenciais
  • Explicar por que programas de nuvem são importantes para resolver problemas de computação complexos
  • Definir sistemas distribuídos e indicar a relação eles e as nuvens
  • Definir modelos de programação distribuída
  • Indicar por que a sincronização é necessária em sistemas de memória compartilhada
  • Descrever como as tarefas podem se comunicar usando o modelo de programação de passagem de mensagem
  • Descrever a diferença entre programas síncronos e assíncronos
  • Explicar o modelo BSP (paralelo síncrono em massa)
  • Descrever a diferença entre o paralelismo de dados e o paralelismo de grafos
  • Diferenciar estes programas distribuídos: programa único, dados múltiplos (SPMD) e programas múltiplos, dados múltiplos (MPMD)
  • Discutir as duas principais técnicas que podem ser incorporadas em programas distribuídos a fim de lidar com o gargalo de comunicação na nuvem
  • Definir nuvens heterogêneas e homogêneas, bem como identificar os principais fatores que causam heterogeneidade na nuvem
  • Definir quando e por que a sincronização é necessária na nuvem
  • Identificar a principal técnica que pode ser usada para tolerar falhas nas nuvens
  • Descrever a diferença entre o agendamento de tarefas e o agendamento de trabalhos

Pré-requisitos

  • Entender o que é a computação em nuvem, incluindo os modelos de serviço de nuvem e os provedores de nuvem comuns
  • Conhecer as tecnologias que habilitam a computação em nuvem
  • Entender como os provedores de serviço de nuvem pagam e cobram pela nuvem
  • Saber o que são os datacenters e por que eles existem
  • Saber como os datacenters são configurados, habilitados e provisionados
  • Entender como os recursos de nuvem são provisionados e medidos
  • Familiarizar-se com o conceito de virtualização
  • Saber quais são os diferentes tipos de virtualização
  • Entender a virtualização de CPU
  • Entender a virtualização de memória
  • Entender a virtualização de E/S
  • Conhecer os diferentes tipos de dados e como eles são armazenados
  • Familiarizar-se com sistemas de arquivos distribuídos e como eles funcionam
  • Ter familiaridade com armazenamento de objetos e bancos de dados NoSQL e saber como eles funcionam