Infraestrutura para Sistemas de Software: Redes e Nuvem
Nesta revisão abordaremos os principais tópicos relativos ao conteúdo da disciplina Infraestrutura para Sistemas de Software: Redes e Nuvem, para cada semana de aula que foi ministrada. Esta revisão deve ser utilizada para ser um guia para ajudá- lo(a) a rever os principais assuntos discutidos na disciplina. Espera-se que você tenha realizado as leituras dos textos-base sugeridos, feito as atividades propostas no decorrer de cada aula, bem como, sempre que possível, tenha assistido aos vídeos de apoio e colocado em prática os conceitos aprendidos com o material prático disponibilizado semanalmente. Com os guias práticos, creio que você, ainda que pela primeira vez, tenha colocado em prática diversos conceitos acerca da instalação, configuração e desenvolvimento de códigos utilizando uma infraestrutura computacional, seja ela local ou em grandes nuvens, como a Google Cloud, Azure e AWS. O sucesso na avaliação final da disciplina está relacionado ao seu comprometimento em estudar o conteúdo organizado semanalmente. Na primeira semana o objetivo foi apresentar as bases da infraestrutura computacional necessária para que clientes, servidores, aplicações e usuários possam utilizar recursos computacionais como serviços usando a WWW e a Internet. Nesse caso, fizemos uma revisão das redes de computadores, tipos, protocolos, e como a comunicação de dados, ainda que tenha toda a complexidade abstraída, é fundamental para e economia mundial, pois dela dependemos para usarmos bancos on-line, acessar lojas na Web e aprender os mais variados assuntos utilizando de ferramentas on-line de ensino. Na segunda semana, apresentamos os elementos que fazem parte de uma infraestrutura computacional e como eles variam em relação a tipos de hardware, elementos de armazenamento de dados, segurança física e lógica, filtros de pacotes, autenticação e consumo de dados por meio de protocolos padronizados da WWW. Conhecemos um pouco sobre servidores Web, firewalls e proxies, bem como alguns mecanismos para autenticação de usuários. Vimos também que todos esses componentes também fazem parte de grandes infraestruturas de data centers. Na terceira semana discutimos sobre o fornecimento de serviços de computação, incluindo servidores, armazenamento, bancos de dados, rede, software, análise e inteligência pela Internet, com o intuito de oferecer inovações mais rápidas, recursos flexíveis e economias de escala. Aprendemos que a importância da computação em nuvem para as empresas está na agilidade e na praticidade que ela confere, com vantagens como redução de custos, pois há menos gasto com hardware e mão de obra para instalar e manter softwares e servidores. Vimos também que a infraestrutura interconectada pode melhorar a estabilidade dos negócios e acelerar o processo de transformação digital para se tornar flexível e escalável. Reconhecemos os conceitos e características da computação em nuvem, os modelos de serviço, atores, exemplos de provedores e modelos de implantação e as principais ferramentas/middlewares para IaaS, SaaS e PaaS no contexto atual e suas características. Na quarta semana, o assunto proposto foi a virtualização, tecnologia que permite que diversas aplicações e sistemas operacionais sejam processados em uma mesma máquina (hardware). Além disso, ela permite, de forma eficiente, acessar recursos utilizando o máximo que o hardware disponibiliza. Destacamos também os ambientes especializados para hospedagem de recursos computacionais e identificamos algumas tecnologias de virtualização, as quais permitem abstrair um conjunto de recursos (por exemplo, computacionais ou de comunicação). Compreendemos, também, fundamentos, tipos e capacidades da virtualização, e abordamos as diferenças entre emulação e virtualização, além de conceitos básicos sobre contêineres. As máquinas virtuais e hipervisores abstraem o hardware e permitem que você execute sistemas operacionais. Contêineres (tecnicamente mecanismos de contêiner) abstraem os sistemas operacionais e permitem que você execute aplicações. Agora que estabelecemos o que são as máquinas virtuais, podemos mergulhar nos benefícios. Em um alto nível, os principais benefícios da virtualização (em relação à execução em bare metal, ou seja, direta no hardware) são: • Uso mais eficiente de hardware. Ser capaz de virtualizar servidores significa ser capaz de executar mais sistemas operacionais em seu hardware. Isso leva à eficiência em tudo, desde a manutenção até os custos de energia e espaço no data center até o resfriamento. Em grande escala, as eficiências da virtualização ajudaram a contribuir para as economias de escala associadas à nuvem. • Gerenciamento e provisionamento mais fáceis e rápidos. É muito mais fácil e rápido ativar e desativar servidores virtuais do que provisionar novo hardware. Criar backups instantâneos de servidor também é muito mais simples. • Recuperação de desastres aprimorada. Como é fácil criar backups e recuperar imagens instantâneas, a recuperação de desastres é mais fácil e rápida. • Teste simplificado. Testar em produção não é uma boa ideia. Dedicar um servidor para teste não é muito eficiente se você tiver que testar muitos sistemas operacionais diferentes. Com as VMs, você pode executar um sistema operacional isolado logicamente que permite fazer testes com mais liberdade. Os contêineres cresceram em popularidade porque eles habilitam as metodologias de DevOps. As principais vantagens dos contêineres (em relação às VMs) incluem: • Os contêineres são leves. Eles usam apenas os binários e as bibliotecas de que precisam. Isso significa que eles inicializam significativamente mais rápido do que as VMs. Nas aplicações Web, o tempo de inicialização em segundos versus o tempo de inicialização em minutos pode fazer uma grande diferença. Ser mais leve também significa menos hardware e menos sistemas operacionais necessários. • Os recipientes são portáteis. Em qualquer lugar em que você possa executar um mecanismo de contêiner, você pode executar um contêiner. Isso significa que as discussões sobre um ambiente ser a causa de um problema com uma aplicação devem ser reduzidas. Se ela foi executada para desenvolvimento no contêiner, ela deve ser executada para controle de qualidade e na produção. • Os contêineres permitem microsserviços. Resumindo, microsserviços são pequenos serviços que se comunicam entre si para criar uma aplicação ou serviço maior. Ao desacoplar, o teste de microsserviços individuais se torna mais fácil, pontos únicos de falha são reduzidos e a velocidade de desenvolvimento é aumentada. Na quinta semana aprendemos o que é uma Service Oriented Architectures (SOA), isto é, um conceito de arquitetura que busca disponibilizar as funcionalidades de um sistema como um serviço, de tal forma que essas funcionalidades podem ser compartilhadas e reutilizadas entre aplicações. Aprendemos que as soluções baseadas em SOA possuem uma arquitetura baseada em padrões para a criação de uma infraestrutura de tecnologia com o objetivo de simplificar as relações entre diferentes sistemas, o que permite que estes possam ser aperfeiçoados e novos elementos possam ser incorporados. Discutimos também as vantagens e desvantagens, semelhanças e diferenças entre SOA e REST. Na sexta semana o assunto foi a arquitetura de microsserviços e como ela é utilizada para desenvolver uma aplicação, como um conjunto de pequenos serviços. Aprendemos que cada serviço é desenvolvido em torno de um conjunto de regras de negócio específicas, sendo implementado de forma independente. Entendemos o funcionamento da arquitetura de microsserviços e o ambiente operacional para executar os pacotes de software em contêineres, bem como um conjunto de produtos de plataforma como serviço que utiliza virtualização no nível do sistema operacional, ou seja, os dockers. Para finalizar, na última semana do curso discutimos sobre os principais provedores de serviços em nuvem: AWS, Microsoft Azure e Google Cloud Platform. Entendemos que eles oferecem serviços de infraestrutura de TI para empresas por meio da Internet e apresentam como vantagem inicial a redução de gastos com infraestrutura, além de permitir escolher serviços, como selecionar um sistema operacional, a linguagem de programação, a plataforma de aplicativos da Web, banco de dados etc. Organizamos a aplicação desenvolvida nas semanas anteriores e implantamos nossa imagem com Ubuntu em um contêiner docker nas nuvens discutidas anteriormente. De modo geral, uma sugestão para você é revisar as Atividades Avaliativas, bem como os textos-base, códigos disponibilizados, vídeos e ferramentas que foram solicitadas que você interagisse durante as semanas. Tais materiais contêm informações importantes cujo entendimento é primordial e que podem aparecer na prova. Como docente responsável pela disciplina, espero que os assuntos tratados possam complementar a sua formação profissional e que você tenha sucesso no decorrer da sua carreira, que está apenas começando. Acredite na educação, pois todo o esforço que teve para aprender o conteúdo disponibilizado nesta importante disciplina muito em breve lhe trará benefícios profissionais. Desejo sucesso e uma boa prova!