\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}
\title{SCCUbi: Terceira Atividade}
\author{Juliano Rosinha Barboza}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
O presente texto contempla a Terceira Atividade de SCCUbi 01/2015, onde foi proposto que cada aluno respondesse nove perguntas elaboradas por seus pares a partir do capítulo "Caracterização de Sistemas Distribuídos" do livro "Sistemas Distribuídos, Conceitos e Projeto" . Este texto foi produzido com o Overleaf.
\end{abstract}
\section{Perguntas referentes ao Item 1.3.1 - A World Wide Web:}
\subsection*{Pergunta 1:}
\textbf{A que se referencia o autor no momento em que afirma que para que a comunicação unilateral ocorra de forma correta, é necessária o mesmo padrão em suas implementações?}
A operação da web é baseada em padrões de comunicação e de documentos livremente publicados, onde qualquer navegador pode recuperar recursos de qualquer servidor desde que todos utilizem os mesmos padrões em suas implementações. Logo, para que a comunicação ocorra de forma correta, sem falhas na busca e troca de informações, de modo que todos os usuários tenham acesso as informações independente do navegador web escolhido ou local de acesso (como telefones celulares e computadores de mesa) é necessário que o mesmo padrão seja utilizado em suas implementações.
\subsection*{Pergunta 2:}
\textbf{Qual a principal relação entre a URL e o protocolo HTTP, mais comum em navegadores, bem como sua relação com DNS e definição das portas de entrada de cada protocolo?}
Uma URL serve para identificar um recurso solicitado pelo usuário. Os navegadores examinam as URLs fornecidas, no momento em que são digitadas no navegador web, para acessar os recursos correspondentes. Nas URLs existem identificadores que indicam qual o tipo de serviço que o cliente pretende acessar através de protocolos, como por exemplo o HTTP (mais comum na web). Uma URL HTTP tem duas tarefas principais: identificar qual o servidor web mantém o recurso e qual dos recursos está sendo solicitado a esse serviço.
Em geral, as URLs HTTP são da forma:
http://nomedoservidor|:porta||/nome do caminho||?consulta||fragmento|
, onde o nome do servidor refere-se ao DNS que é, opcionalmente, seguido do número da porta em que o servidor recebe os pedidos, que por padrão á a porta 80. O DNS trata-se, então, do nome do servidor onde está alocado o recurso a ser acessado.
\subsection*{Pergunta 3:}
\textbf{O que faz com que os padrões HTML e HTTP sejam insuficientes para interações mais complexas, e onde o XML pode ajudar na funcionalidade de serviços web?}
O aumento contínuo da necessidade na web pra troca de dados de tipos estruturados esbarra nas limitações dos padrões HTML e HTTP. O protocolo HTML não tem capacidade para realizar a navegação em informações pois apresenta um conjunto estático de estruturas restritas nas maneiras como os dados devem ser apresentados para os usuários. Já o protocolo HTTP não fornece estrutura alguma para estabelecer as operações específicas do serviço, que podem ser solicitadas para recursos web, nem os argumentos e respostas de erro das operações.
Em contrapartida, a linguagem XML ajuda na funcionalidade de serviços web pois trata-se de uma metalinguagem para descrever dados, a qual torna os dados portáveis entre aplicativos. A linguagem foi projetada como um modo de representar dados em formas padronizadas, estruturadas e específicas de um determinado aplicativo.
\section{Perguntas referentes ao Item 1.4.4 - Escalabilidade:}
\subsection*{Pergunta 1:}
\textbf{Por que a escalabilidade é meta em um sistema distribuído?}
A escalabilidade é uma das mais importantes metas de projeto para desenvolvedores de sistemas distribuídos por que mede:
a. Tamanho, Indicando quando há um aumento significativo no número de recursos e no número de usuários. Avaliando a possibilidade de acrescentar mais usuários e recursos ao sistema;
b. Distância geográfica e a viabilidade de acesso a distâncias maiores;
c. Facilidade de administração.
\subsection*{Pergunta 2:}
\textbf{Cite e explique as principais técnicas que podem ser aplicadas na escalabilidade.}
a. Esconder a latência na comunicação: Construir a aplicação utilizando somente comunicação assíncrona. Em aplicações batch e paralelas normalmente é bem aceita mas o mesmo não ocorre em aplicações interativas. Neste caso, uma solução é diminuir a necessidade de comunicação movendo parte da computação do servidor para o cliente;
b. Distribuir entre vários computadores os serviços e dados, decompondo os componentes em partes menores, que são distribuídas por todo o sistema distribuído. Exemplos: DNS e Web. Nenhum servidor prestará todos os serviços nem possuirá todos os dados. Se um servidor falhar, nem tudo está perdido;
c. Replicação: Aumenta a disponibilidade dos serviços e melhora o balanceamento de carga no sistema. A replicação também aumenta a disponibilidade do serviço nas zonas da rede onde há réplicas.
\subsection*{Pergunta 3:}
\textbf{Quais os problemas enfrentados pela escalabilidade?}
a. Relação ao tamanho: Servidores, dados e algoritmos centralizados. Uma máquina tem informação completa sobre o estado do sistema, ou as máquinas tomam decisões baseadas em informações de outros nós, ou uma falha de um nó pode arruinar o algoritmo;
b. Relação à distância geográfica: Em LANs é comum usar comunicação síncrona, onde o cliente envia o pedido e fica bloqueado à espera de uma resposta. Numa WAN a comunicação pode durar três ordens de grandeza mais (centenas de milisegundos). Se uma aplicação tem componentes centralizados fica também limitada em termos geográficos;
c. Relação à facilidade de administração, onde são necessários dois tipos de medidas de segurança quando o sistema distribuído se expande para um novo domínio: O sistema tem de se proteger de ataques vindos do novo domínio e o domínio tem de se proteger de ataques vindos do sistema distribuído.
\section{Perguntas referentes ao Item 1.4.5 - Tratamento de falhas:}
\subsection*{Pergunta 1:}
\textbf{Quando ocorre uma falha em um dos componentes de um sistema distribuído, todos os demais componentes irão parar de operar?}
As falhas em um sistema distribuído são parciais, ou seja, alguns componentes falham, enquanto outros continuam funcionando.
\subsection*{Pergunta 2:}
\textbf{Quais técnicas podem ser aplicadas em sistemas distribuídos para detectar e tratar uma falha?}
Técnicas como o uso de contadores para detectação dos dados danificados em uma mensagem ou em um arquivos, podem auxiliar na detecção de falhas. Como as falhas em um sistema distribuído são parciais, o tratamento de falhas é particularmente difícil. Algumas técnincas são utilizadas para reverter ou reduzir os impactos causados pelas falhas, como: mascaramento de falhas, tolerância a falhas, recuperação de falhas e redundância.
\subsection*{Pergunta 3:}
\textbf{Em um sistema distribuído como podemos garantir que dados importantes não sejam perdidos quando ocorrer uma falha?}
Através da replicação do banco de dados em vários servidores, garantindo que os dados permaneçam acessíveis, mesmo após a falha de qualquer servidor. Os servidores podem ser projetados de forma a detectar falhas em seus pares. Quando uma falha é detectada em um servidor, os clientes são redirecionados para os servidores restantes.
\end{document}