Baixe o app para aproveitar ainda mais
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)
Compartilhar