Buscar

Arquitetura de software e computação em nuvem - 2

Prévia do material em texto

ARQUITETURA DE SOFTWARE E 
COMPUTAÇÃO EM NUVEM
MAURÍCIO DA MOTTA BRAGA
Processo de projeto de sistemas de 
informação
• O processo de projeto de um software irá envolver as 
seguintes etapas:
• Projeto de arquitetura;
• Projeto de interface;
• Projeto de componente;
• Projeto de banco de dados.
Projeto de arquitetura
• Tem como objetivo a identificação / definição da estrutura 
geral do sistema, dos componentes principais (algumas 
vezes chamados subsistemas ou módulos), dos seus 
relacionamentos e como eles são distribuídos. 
Projeto de interface
• Aqui iremos definir as interfaces entre os componentes do 
sistema. 
• Com interfaces bem definidas, um componente pode ser 
usado de maneira que outros componentes não precisam 
saber como ele é implementado. 
• Uma vez que as especificações de interface são acordadas, 
os componentes podem ser projetados e desenvolvidos 
simultaneamente. 
Projeto de componente
• Tem como objetivo definir o papel e o funcionamento de 
cada componente do sistema. 
• Pode-se tratar de uma simples declaração da funcionalidade 
que deve ser implementada, com o projeto específico sendo 
deixado para cada programador. 
• Pode, também, ser uma lista de alterações a serem feitas em 
um componente reutilizável ou um modelo de projeto 
detalhado. 
Projeto de banco de dados
• Nessa etapa projetamos as estruturas de dados do sistema e 
como eles devem ser representados em um banco de dados. 
Arquitetura de software
• No desenvolvimento de software a arquitetura é um elemento 
crítico para o sucesso do sistema, por isso é importante que 
ela seja modelada e entendida por todos os membros da 
equipe antes de ser construída.
• Os casos de uso são utilizados para definir requisitos 
funcionais para o sistema, e alguns deles serão utilizados 
para modelar e validar a arquitetura proposta. 
Caso de uso
• Descreve a funcionalidade que o sistema irá fornecer, analisada 
sob o ponto de vista do cliente;
• Permite a equipe visualizar:
• Os tipos de usuários que irão interagir com o sistema;
• Os papéis que os usuários podem assumir durante o uso;
• Funções que cada usuário acessa no sistema.
• Utilizado por todos os membros da equipe para o entendimento 
do projeto, foca no “o que deve ser feito” e não no “como”.
Caso de uso
• Neutro em relação a tecnologia utilizada para construção do 
software, seu conteúdo influencia a construção de todos os outros 
diagramas do sistema.
• São representados através do uso de uma elipse com um texto 
interno descrevendo o serviço realizado pelo mesmo.
• UML descreve apenas o diagrama, sem fazer referência a 
documentação do caso de uso.
Exemplo caso de uso
Diagramas de caso de uso - Atores
• Representam os papéis desempenhados pelos diversos usuários que poderão 
utilizar de alguma maneira os serviços do sistema;
• Além dos usuários, podem ser usados também para identificar um hardware 
especial ou um outro software com o qual o sistema irá interagir.
• Possuem objetivos que devem ser atendidos pelo sistema;
• São representados por bonecos contendo uma descrição que identifica o seu 
papel dentro do diagrama.
Exemplo atores
Diagramas de Caso de uso
• Representado graficamente pelas elipses que representam os casos de 
uso bem como pelos atores que os utilizam;
• Possuem documentação associada que é utilizada para guiar a sua 
implementação bem como viabilizar a sua validação junto ao cliente. Essa 
documentação fornece detalhes sobre o caso de uso tais como:
• Atividades realizadas dentro do mesmo;
• Evento que produz a sua execução;
• Restrições existentes sobre o mesmo;
• Atores que o utilizam, etc.
29/39
Exemplo Diagrama de caso de uso
Padrão de projeto
• Originalmente desenvolvidos pelo arquiteto Christopher Alexander, passaram a 
ser usados na construção de sistemas; 
• Descreve uma solução geral para um problema que ocorre com frequência em 
projetos de software. 
• Não é um projeto finalizado que pode ser diretamente copiado para integrar o 
código fonte de um software , ele é uma descrição ou modelo (template) de 
como resolver um problema que pode ser usado em muitas situações diferentes. 
• Descrevem melhores práticas formalizadas que o programador pode usar para 
resolver problemas comuns quando projetar uma aplicação ou sistema.
Elementos de um padrão de projeto
• Nome do padrão;
• Problema a ser resolvido;
• Solução dada pelo padrão; e
• Consequências.
Exemplo padrão de projeto
• Singleton: garante a existência de apenas uma instância de uma 
classe, mantendo um ponto global de acesso ao seu objeto.
• O termo vem do significado em inglês para um conjunto 
(entidade matemática) que contenha apenas um elemento.
• Quando usar: Quando precisamos que exista apenas um 
instância de um objeto.
Exemplo padrão de projeto em Java
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
Padrão de projeto Singleton
• Vantagens:
• Permite o controle sobre como e quando os clientes acessam a
instância.
• Várias classes singleton podem obedecer uma mesma interface, 
permitindo assim que um singleton em particular seja escolhido 
para trabalhar com uma determinada aplicação em tempo de 
execução.
• Com apenas uma implementação interna do singleton pode-se 
fazer com que o singleton crie um número controlado de instâncias.
• É mais flexível que métodos estáticos por permitir o polimorfismo.
Padrões de projeto
• Algumas vantagens:
• Facilitam a reutilização de soluções de projeto de software;
• Estabelecem um vocabulário comum de projeto, facilitando a 
comunicação, documentação e aprendizado dos sistemas.
• Aumentam a produtividade da equipe;
• Contribuem para a melhora da qualidade do software.
• Descrição dos serviços fornecidos pelo sistema e as suas restrições 
operacionais.
• Pode ser redigido de forma abstrata, descrevendo em alto nível um 
serviço ou restrição de um sistema ou de uma maneira formal e 
detalhada, especificando de forma clara uma determinada 
funcionalidade da aplicação;
• Essa variação se explica pela função a ser cumprida pelo requisito, 
que pode ser utilizado:
• Em uma especificação inicial, visando o recebimento de propostas de 
fornecedores que tenham interesse em desenvolver o sistema;
• Em um contrato de desenvolvimento, devendo portanto definir de forma não 
ambígua o que deve ser realizado.
Requisito de software
Tipos de requisito
• Requisitos de usuário:
• São declarações, redigidas em linguagem natural ou fazendo uso de 
diagramas, dos serviços esperados do sistema e das restrições sob as quais 
ele deve operar;
• Requisitos de sistema:
• Definem em detalhes as funções, os serviços e as restrições operacionais do 
sistema a ser implementado. É utilizado como parte do contrato entre o 
fornecedor e o comprador do software.
• Um requisito de usuário pode gerar um ou mais requisitos de 
sistema.
Requisitos funcionais
• Descrevem as funcionalidades e serviços que devem ser oferecidos 
pelo sistema;
• Dependem do tipo de software, dos usuários a que o software se 
destina e do sistema onde o software será utilizado;
• Podem ser redigidos em alto nível (requisitos de usuário funcionais) 
ou especificar detalhadamente o que deve ser feito (requisitos de 
sistema funcionais).
Exemplo
• O sistema LIBSYS:
• Um sistema de biblioteca para faculdades que disponibiliza uma interface 
única conectando o usuário a várias bases de dados que residem em 
diferentes bibliotecas.
• Disponibiliza a seus usuários serviços de pesquisa e download de artigos 
científicos.
Exemplos de requisitos funcionais
• Requisitos funcionais de usuário do sistema LIBSYS:
• “O usuário deverá ter a opção de fazer a busca considerando todo o conjunto 
de bases de dados ou apenas uma fração delas”;
•“O sistema deverá oferecer recursos para visualização dos artigos 
disponibilizados nas bases de dados”
• “Cada pedido receberá um único identificador, o qual o usuário deve ser capaz 
de copiar para a área de armazenamento permanente da sua conta”
Requisitos não funcionais
• Definem propriedades do sistema como um todo bem como 
restrições sobre a operação do mesmo. Ex: usabilidade, memória 
máxima a ser usada, etc.
• Surgem em decorrência de necessidades dos usuários, restrições de 
orçamento, necessidade de interoperabilidade com outros sistemas, 
políticas organizacionais, regulamentos de segurança, legislação, etc.
• Podem ser críticos para a utilização do sistema por parte do usuário. 
Ex: Confiabilidade de uma aeronave ou performance de um software 
de tempo real;
Requisitos não funcionais
• Podem restringir também o processo de construção do sistema, 
exigindo o uso de certas ferramentas CASE ou a utilização de um 
processo de desenvolvimento específico.
• Uma vez que podem ser expressos como metas vagas a serem 
atingidas, podem ser difíceis de implementar bem como verificar se 
foram cumpridos.
• Ex: “O sistema deve ser fácil de ser usado pelos controladores experientes e ser 
organizado de forma a minimizar o número de erros cometido pelo usuário”
Classificação dos requisitos não 
funcionais
• Requisitos de produto
• Especificam o comportamento do produto. Ex: desempenho, confiabilidade, 
portabilidade, etc.
• Requisitos organizacionais
• São derivados de políticas e procedimentos da organização cliente e do 
desenvolvedor. Ex: Formato da documentação, processo a ser utilizado, etc.
• Requisitos externos
• Abrange todos os requisitos derivados de fatores externos ao sistema. Ex: 
Legislação, requisitos de interoperabilidade com outros sistemas, etc.
Tipos de requisitos não funcionais
Exemplos
• Requisito de produto
• “A interface de usuário para o LIBSYS deve ser implementada usando HTML,
sem applets ou f rames” (compatibil idade)
• Requisito organizacional
• “O processo de desenvolvimento do sistema e os documentos a serem
entregues devem estar em conformidade com a norma: XYZ-ABC-2005”.
• Requisito externo
• “O sistema LIBSYS não deve revelar quaisquer informações pessoais sobre os
usuários aos funcionários da biblioteca, a não ser o nome e o número de
registro no sistema.” (privacidade)
Computação em nuvem
• Produtos de software e hardware se tornam 
serviços;
• Disponibilidade sob demanda de recursos 
computacionais, como armazenamento de 
dados e capacidade de computação, sem o 
gerenciamento ativo direto do usuário.
Arquitetura de software em nuvem
• Uma forma de montar uma arquitetura e obter os 
benefícios desejados tais como performance, 
escalabilidade, confiabilidade e segurança sem 
incorrer nos custos e trabalho de montar sua própria 
solução é utilizar a infraestrutura fornecida por 
terceiros que ofertam ao mercado essas 
características.
• Para entender o funcionamento, vamos usar como
exemplo a GCP (Google Cloud Platform).
Google Cloud Platform
• Suíte de computação em nuvem oferecida pelo Google, 
funcionando na mesma infraestrutura que a empresa 
usa para seus produtos dirigidos aos usuários, tais 
como o buscador Google e o Youtube.
• Consiste em um conjunto de recursos físicos (tais como 
computadores e unidades de disco rígido) e recursos 
virtuais, como máquinas virtuais (VMs), localizados nos 
data centers do Google por todo o mundo.
Google Cloud Platform
• Fornece uma série de serviços incluindo:
• Computação;
• Armazenamento de dados;
• Análise de dados (Big Data);
• Aprendizagem de máquina;
• Redes, operações e softwares.
Google Cloud Platform
• Arquitetura baseada em contêineres, que 
faz uso de serviços automatizados.
• Contêineres: oferecem um mecanismo de 
empacotamento lógico em que os 
aplicativos podem ser abstraídos pelo 
ambiente em que são efetivamente 
executados. 
Google Cloud Platform
• Desacoplamento permite que aplicativos 
baseados em contêiner sejam implantados 
de maneira fácil e consistente, 
independentemente de o ambiente de 
destino ser um data center particular, a 
nuvem pública ou até mesmo o laptop 
pessoal de um desenvolvedor.
Serviços disponibilizados GCP
• IAAS (infrastructure as a service) 
• Oferece recursos de processamento, 
armazenamento e de rede aos clientes. 
• Permite rodar máquinas virtuais com sistema 
operacional Windows e Linux.
• Tarifação realizada pelo que é reservado.
Serviços disponibilizados GCP
• PAAS (platform as a service) 
• Fornece APIs que dão acesso a infraestrutura do 
Google aos sistemas desenvolvidos pelos 
clientes.
• Permite aos clientes focar apenas na lógica do 
negócio.
• Permite instalar sistemas desenvolvidos em 
Java, PHP, Node.js, Python, C#, .Net, Ruby and 
Go.
• Tarifação realizada pelo que é utilizado.
Serviços disponibilizados GCP
• Servless Computing (computação sem servidor) 
• Modelo de execução computacional orientado a eventos 
que é executado em containers. Essas funções gerenciam 
a lógica e o estado no lado do servidor usando serviços. 
• Permite aos desenvolvedores construir sistemas sem se 
preocupar em provisionar ou gerenciar os servidores nos 
quais os aplicativos são executados.
• Similar a IAAS, mas a cobrança é feita apenas pelos 
recursos necessários para a execução do código;
Serviços disponibilizados GCP
• Servless Computing (computação sem 
servidor) 
• O termo serverless é usado porque as especificações 
do servidor não afetam os desenvolvedores. 
Servidores ainda existem, mas eles são gerenciados 
pelo provedor de serviços em nuvem.
• Um evento aciona a execução da aplicação. O 
provedor de cloud então aloca recursos 
dinamicamente para execução desse código. 
• Oferecido na GCP via Google Cloud Functions.
Serviços disponibilizados GCP
• Tipos de computação sem servidor: 
• Back-end como serviço (BaaS) em que vários 
serviços e aplicações de terceiros formam sua 
aplicação. 
• Função como serviço (FaaS): Viabiliza o uso de 
uma arquitetura baseada em microserviços. 
Compute Engine
• Permite criar e executar VMs na infraestrutura do 
Google. É possível executar milhares de CPUs virtuais 
em um sistema criado para oferecer desempenho ágil e 
consistente. 
• Você pode criar uma instância de máquina virtual 
usando o Console do Google Cloud Platform ou a 
ferramenta de linha de comando gcloud, e essas VMs
podem executar imagens do Linux e do Windows 
Server fornecidas pelo Google ou versões 
personalizadas delas. 
Compute Engine
• É possível importar imagens de servidores físicos 
próprios, e usar HDs SSD ou padrão.
• O Compute Engine oferece o Escalonamento 
automático para adicionar e remover VMs do seu 
app com base nas métricas de carga. 
Segurança na GCP
• Aplicações rodando na internet precisam garantir a segurança 
dos dados da empresa e de seus clientes;
• A criptografia é a forma de garantir segurança dos dados dos 
clientes na GCP.
• Através da criptografia é possível atender os requisitos básicos 
da segurança da informação: autenticação, integridade, 
confidencialidade, não repúdio e irretroatividade;
Requisitos de segurança da informação
• Autenticação
• Busca garantir a identidade do autor, ou seja, que a 
mensagem (documento) de fato foi enviada / criada
pelo remetente informado na mensagem.
• Integridade
• Busca garantir que o conteúdo de uma mensagem
chegue de forma íntegra ao seu destino, sem ter
sido adulterada. 
Requisitos de segurança da informação
• Confidencialidade
• Busca garantir que somente as pessoas
autorizadas podem ler / utilizar a mensagem.
• Não repúdio (não recusa)
• Busca impedir que um remetente negue o envio ou
autoria de uma mensagem após a sua transmissão.
Requisitos de segurança da informação
• Âncora temporal (irretroatividade)
• Busca garantir a data em que a mensagem
(documento) foi criado ou enviado, impedindo a 
geração de documentosretroativa.
Segurança na GCP
• Usa várias camadas de criptografia para proteger os dados em repouso do 
cliente nos produtos do Google Cloud.
• Utiliza um ou mais mecanismos para criptografar todo o conteúdo 
armazenado em repouso, sem a necessidade de qualquer ação por parte 
do cliente.
• Todos os dados armazenados no Google Cloud Platform são 
criptografados atualmente no nível do armazenamento usando o AES256.
Computação em nuvem
• Recursos computacionais tais como espaço de 
armazenamento, processamento e rede são 
adquiridos sob demanda e autoatendimento;
• Acesso aos recursos de qualquer lugar;
• Escalabilidade → Permite ao cliente aumentar ou 
diminuir os recursos computacionais contratados.
• Tarifação realizada em cima do que é consumido ou 
reservado apenas.
Computação em nuvem
• Possíveis desvantagens do uso de 
uma infraestrutura terceirizada: 
• Possibilidade de ficar preso ao fornecedor.
• Perda do controle em relação a decisões 
importantes de projeto.
• Dados da empresa estão com o fornecedor, 
e a segurança deles cabe ao fornecedor.
OBRIGADO(A)
MAURÍCIO DA MOTTA 
BRAGA
BRAGA.MAURICIO@GMAIL.COMPROFESSOR
OBRIGADO(A)

Continue navegando