Escolar Documentos
Profissional Documentos
Cultura Documentos
Arquitetura em Camadas
Os componentes do software são
divididos em camadas hierárquicas, de tal
modo que cada camada tenha um
propósito bem definido e que o
acoplamento entre elas seja baixo. Isso
significa que a camada superior conhece
apenas a camada imediatamente inferior,
que fornece serviços através de uma
interface.
Um tipo específico de arquitetura em
camadas muito comum é chamado de
arquitetura de 3 camadas, que divide a
aplicação nas camadas de:
Arquiteturas de Sistema
A Arquitetura de sistema está relacionada com o local onde colocamos cada um
dos componentes do sistema distribuído:
• Arquitetura Centralizada;
• Arquitetura Descentralizada;
• Arquitetura Híbrida;
Arquitetura Centralizada
Essa arquitetura separa os componentes em cliente (aquele que faz uma
solicitação) e servidor (aquele que processa uma solicitação). É muito comum que
aplicações que utilizem o estilo arquitetural de três camadas distribuam esses
componentes verticalmente, isto é, separem a apresentação em uma aplicação (cliente)
que executa em uma máquina, e que se comunica com outra aplicação na qual reside a
lógica do negócio (servidor) em outra máquina, que por sua vez atua como cliente do
servidor de banco de dados ao recuperar ou gravar dados. Também há sistemas que
mantém a apresentação e a lógica de negócio em uma mesma aplicação. Outros mantém
parte da lógica de negócios na apresentação, e outra parte de uma aplicação separada.
Existem diversas formas de organização no modelo cliente-servidor, e é importante
estudar as vantagens e desvantagens de cada uma delas antes de se decidir por uma.
Arquitetura Descentralizada
Essa arquitetura realiza uma distribuição horizontal, isto é, divide um cliente ou
servidor fisicamente em partes logicamente equivalentes. Utilizando o exemplo de
sistemas de três camadas, uma mesma camada por ser distribuída em várias máquinas.
Isso resulta em um melhor equilíbrio de carga. Um exemplo de arquitetura
descentralizada são as redes peer-to-peer.
Arquitetura Híbrida
Esta arquitetura combina características das arquiteturas centralizadas e
descentralizadas. Sistemas que utilizam arquitetura híbrida geralmente utilizam o modelo
cliente-servidor para os nós se conectarem ao sistema, e depois utilizam o esquema
descentralizado.
Tipos de Comunicação
• Comunicação Direta: Protocolo HTTP e Protocolos de comunicação de
streaming;
• Comunicação Indireta: O remetente e o destinatário não precisam se conhecer
inicialmente. Como funciona os canais do Youtube;
Stateful:
• Vantagens: Manter o controle de um usuário durante toda a execução da
aplicação; Mais intuitivo, dados de entidade podem ser mantidos no servidor entre
requisições; Pode melhorar o desempenho quando a recuperação de dados é
necessária apenas uma vez.
• Desvantagens: Requer memória a ser alocada para armazenar os dados; Podem
levar a uma diminuição do desempenho se o armazenamento da sessão não é
mantido de forma eficiente.
Gerenciamento de Processos
Monothread ou Multithread
Em um ambiente Monothread, uma aplicação é composta por códigos que são
executados sequencialmente, de acordo com repetições, desvios, funções e
procedimentos, onde a utilização de concorrência é efetuada através da implementação
de processos independentes e subprocessos, caso exista essa necessidade, causando um
maior consumo de recursos do sistema, uma vez que cada processo detém seu próprio
espaço de endereçamento e a comunicação entre os diversos processos envolvidos
normalmente é mais lenta que no outro modo.
Em um ambiente Multithread, o conceito de thread é amplamente explorado e
aplicado, onde técnicas permitem que as mesmas sejam executadas de maneira
simultânea. Através da utilização deste recursos, os softwares podem efetuar diversas
tarefas de maneira paralela, possibilitando assim que as threads exerçam suas funções de
maneira independente umas das outras.
Scheduler Activations
Threads em modo Scheduler Activations usam o melhor do modo kernel e do
modo usuário. Usam as facilidades do modo kernel com o desempenho e a flexibilidade
do modo usuário. Nesta implementação o núcleo do sistema troca informações com a
biblioteca de threads utilizando uma estrutura chamada scheduler activations. Essa
implementação evita a troca de modo de acesso (usuário-kernel-usuário) pois o kernel e
a biblioteca de threads se comunicam e trabalham de forma cooperativa.
Implementação de Escalabilidade
A implementação de escalabilidade em sistemas distribuídos é um processo
complexo que envolve diversas estratégias e técnicas para permitir que o sistema cresça
em tamanho e capacidade conforme a demanda aumenta.
Algumas das técnicas mais comuns para implementação de escalabilidade em
sistemas distribuídos incluem:
• Adição de mais nós: isso envolve adicionar mais servidores ou máquinas virtuais
ao sistema distribuído para aumentar a capacidade de processamento e
armazenamento disponível.
• Divisão de carga: Isso envolve distribuir a carga de processamento entre
diferentes nós do sistema, de modo que nenhum nó se torne um gargalo de
desempenho.
• Balanceamento de carga: Isso envolve distribuir a carga de processamento entre
diferentes nós do sistema de forma dinâmica, de modo que cada nó esteja
trabalhando em uma quantidade equilibrada de processamento.
• Caching: Isso envolve o uso de memória cache distribuída para armazenar dados
frequentemente acessados, de modo que o acesso a esses dados possa ser feito de
forma mais rápida e eficiente.
• Particionamento de dados: Isso envolve dividir os dados do sistema em
partições menores e distribuí-las em diferentes nós do sistema para aumentar a
capacidade de armazenamento e processamento.
Exemplos de Escalabilidade com Bom Custo e Benefícios: Microsserviços e
Computação em Nuvem.
Microsserviços
Os microsserviços são uma abordagem arquitetônica em que um aplicativo é
construído a partir de serviços independentes que se comunicam entre si por meio de APIs
bem definidas. Em sistemas distribuídos, os microsserviços podem ser usados para
dividir o aplicativo em serviços menores, mais independentes e escaláveis.
Ao usar microsserviços em sistemas distribuídos, cada serviço pode ser executado
em um nó separado, permitindo que diferentes partes do aplicativo sejam escaladas
independentemente umas das outras. Isso significa que é possível escalar apenas as partes
do aplicativo que exigem maior capacidade de processamento ou armazenamento, sem
afetar outras partes do aplicativo.
Exemplos de Microsserviços:
• Serviço de Autenticação: responsável pela autenticação e autorização de
usuários em um sistema distribuído. É um microsserviço crucial para garantir a
segurança do sistema.
• Serviço de Gerenciamento de Usuários: responsável pelo gerenciamento de
usuários, incluindo criação, atualização e exclusão de contas de usuário.
• Serviço de Gerenciamento de Conteúdo: responsável pelo gerenciamento de
conteúdo, como criação, atualização e exclusão de artigos ou notícias em um site.
• Serviço de Mensageria: responsável pela entrega de mensagens entre diferentes
componentes do sistema distribuído.
• Serviço de Pagamentos: responsável pelo processamento de pagamentos, como
o processamento de transações de cartão de crédito ou débito.
• Serviço de Logística: responsável pelo gerenciamento de transporte e entrega de
produtos, como rastreamento de pacotes e notificações de entrega.
• Serviço de Busca: responsável pela indexação e pesquisa de conteúdo em um
sistema distribuído.
Computação em Nuvem
Computação em nuvem é um modelo de entrega de recursos de computação, como
servidor, armazenamento, redes e aplicativos, por meio da internet. Em sistemas
distribuídos, a computação em nuvem pode ser usada para fornecer recursos de
computação sob demanda para um sistema distribuído.
Em vez de ter um data center dedicado com todos os recursos de computação
necessários, um sistema distribuído pode usar a infraestrutura em nuvem para escalar
rapidamente a capacidade de processamento e armazenamento, conforme necessário. Isso
pode ajudar a evitar gargalos de desempenho e melhorar a disponibilidade do sistema.
Além disso, a computação em nuvem também pode ser usada para reduzir os
custos de hardware e software, já que os recursos podem ser adquiridos sob demanda, em
vez de serem mantidos em infraestrutura própria. Isso pode ser particularmente benéfico
para empresas que precisam de capacidade de processamento ou armazenamento variável
ao longo do tempo.
Tipos de Escalabilidade
Existem três tipos de escalabilidade em sistemas distribuídos:
1. Escalabilidade vertical: envolve aumentar a capacidade de processamento,
armazenamento ou memória de um único nó em um sistema distribuído. Isso é
geralmente feito adicionando mais recursos de hardware ao nó existente, como
CPU, RAM ou unidades de disco rígido. A escalabilidade vertical é limitada pela
capacidade física do hardware existente e pode ser bastante cara.
2. Escalabilidade horizontal: envolve adicionar mais nós ao sistema distribuído para
aumentar a capacidade de processamento, armazenamento ou memória. Isso é
geralmente feito adicionando mais servidores ao cluster. A escalabilidade
horizontal é mais fácil de implementar do que a escalabilidade vertical e é
geralmente mais econômica.
3. Escalabilidade funcional: envolve a adição de novas funcionalidades ao sistema
distribuído para lidar com novas cargas de trabalho ou requisitos de negócios. Isso
pode envolver a introdução de novos serviços ou microsserviços para lidar com
novas demandas ou a atualização de serviços existentes para suportar novos
recursos. A escalabilidade funcional é importante para garantir que o sistema
distribuído possa se adaptar a mudança nas necessidades dos usuários ou da
empresa.
Riscos de Escalabilidade
Embora a escalabilidade em sistemas distribuídos possam trazer muito benefícios,
existem também alguns riscos associados a esse processo. Alguns desses riscos incluem: