• Nenhum resultado encontrado

dicionários armazenam vídeos dos sinais de LIBRAS pré-renderizados e cada sinal possui um código (por exemplo, sua representação textual em glosa) associado com esse vídeo. Dessa forma, é possível gerar um vídeo de LIBRAS a partir da combinação de sinais no dicionário de LIBRAS. Outro aspecto importante da solução é a utilização de estratégias de colaboração e computação humana para desenvolver as construções linguísticas da solu- ção de forma eficiente e semi-automática. A ideia dessa abordagem é que especialistas em LIBRAS colaborem na geração dessas construções linguísticas e também melhorem a quali- dade dos conteúdos gerados através da melhoria das regras de tradução, da inclusão de novos sinais, etc. Para isso, uma ferramenta de computação humana, denominada WikiLIBRAS, foi desenvolvida, juntamente com linguagens formais para descrever regras de tradução (Lin- guagem de Descrição de Regras de Tradução) e sinais (Linguagens de Descrição de Sinais), e o modelo de um agente animado virtual 3D (avatar 3D).

O sistema VLIBRAS vem sendo aprimorado há alguns anos pela equipe do LAVID, através de apoios financeiros da RNP, CAPES e MinC. Araújo (2012), Ferreira (2012) e Silva (2012) são alguns dos trabalhos que contribuíram para o aperfeiçoamento do sistema.

Na próxima seção serão apresentados os principais conceitos relacionados a sistemas distribuídos e computação em nuvem que são importantes no contexto do presente trabalho.

2.4

Sistemas Distribuídos

Nos últimos anos, a demanda por recursos computacionais tem ultrapassado os limites de poder de processamento que um computador pode oferecer. Nesse sentido, tem se tornado frequente a implementação de sistemas distribuídos com objetivo de compensar tais dispa- ridades. As duas definições mais comumente utilizadas para sistemas distribuídos são de Tanenbaum e Steen (2007) e Coulouris (2009). Tanenbaum e Steen (2007) afirmou que “um sistema distribuído é um conjunto de computadores independentes que se apresenta a seus usuários como um sistema único e coerente”, e Coulouris (2009) definiu sistemas distribuí- dos como uma “coleção de computadores autônomos interligados através de uma rede de computadores e equipados com software que permita o compartilhamento dos recursos do sistema: hardware, software e dados”. As principais características de sistemas distribuídos são: alto desempenho, compartilhamento de recursos, heterogeneidade, abertura, escalabili-

2.4 Sistemas Distribuídos 14

dade, tolerância a falhas, concorrência, e transparência.

Sistemas centralizados tendem a ter desempenho inferior a sistemas distribuídos. O de- sempenho é um conceito relativo que pode estar associado a diferentes grandezas como tempo de resposta do servidor, vazão2, e quantidade de recursos consumidos pela rede (BAR-

CELAR, 2013). O fato é que ao comparar tais grandezas testando dois sistemas, sendo o primeiro um sistema distribuído com algumas unidades de processamento, e o segundo cen- tralizado com uma única unidade de processamento3, o sistema distribuído apresentará re- sultados superiores aos do sistema centralizado. Os sistemas distribuídos conseguem realizar uma tarefa em menos tempo quando a natureza do algoritmo é paralelizável, possibilitando a divisão do problema em sub-problemas que podem ser resolvidos por mais de um nó de processamento. Para que esta otimização seja eficiente, é preciso que o tempo levado para o compartilhamento de dados entre os nós do sistema seja compensado com o paralelismo de suas unidades de processamento (TANENBAUM; STEEN, 2007).

Uma das características mais básicas de sistemas distribuídos é o compartilhamento de recursos, uma vez que sem ela seria impossível conceber um sistema distribuído. O com- partilhamento de recursos é tao comum no dia-a-dia de um usuário de computador e Internet que muitas vezes o mesmo não percebe que está fazendo uso de recursos compartilhados. Tal característica possibilita obter economia, quando se compartilha recursos de hardware como impressoras ou sistemas de armazenamento, além de facilitar a colaboração e troca de informações entre usuários separados geograficamente, utilizando recursos de software, como por exemplo, o correio eletrônico (COULOURIS, 2009).

Uma vez que sistemas distribuídos podem ser compostos de várias unidades independen- tes, existe a liberdade para que tais unidades tenham composição de software e hardware diferenciadas, para melhor atender a demanda de determinado sistema. Se por um lado a heterogeneidade possibilita a construção de um sistema distribuído a partir de várias redes, sistemas operacionais e linguagens de programação, por outro lado surge a necessidade de um componente que lide com essas diferenças, tornando-as transparentes: o middleware. O middlewareconsiste em uma camada de software com objetivo de prover abstração à hetero- geneidade dos nós do sistema distribuídos, fornecendo um modelo computacional uniforme

2Número de requisições atendidas por unidade de tempo.

2.4 Sistemas Distribuídos 15

para programadores (TANENBAUM; STEEN, 2007).

A abertura de um sistema distribuído é determinada pela capacidade que o mesmo tem de ser estendido e reimplementado de várias maneiras (COULOURIS; DOLLIMORE; KIND- BERG, 2001). Para conceber um sistema distribuído com abertura é preciso que os serviços do mesmo sejam expostos publicamente por meio de uma interface e descritos por suas respectivas especificações, para que possam ser utilizados por terceiros. Adicionalmente, a oferta de seus serviços deve ser interoperável e portável, permitindo que componentes de for- necedores diferentes coexistam, e que outros sistemas distribuídos sejam produzidos a partir de diferentes hardware e software. Em outras palavras, a abertura permite a heterogeneidade de sistemas distribuídos.

Sistemas distribuídos são denominados escaláveis quando conseguem prover um ser- viço de forma eficiente, principalmente quando submetidos a grandes cargas de requisições (COULOURIS; DOLLIMORE; KINDBERG, 2001). Segundo Barcelar (2013), uma das principais vantagens dos sistemas distribuídos em relação aos centralizados, é que “sistemas fortemente acoplados (centralizados) possuem limitação prática no aumento do desempe- nho, pois necessitam de uma infraestrutura especial de barramento e memória para aumentar o número de processadores”. Para suportar uma maior demanda, sistemas distribuídos são acrescidos de novos nós de processamento, sem necessidade de mudança adicional na arqui- tetura, uma vez que, geralmente, a mesma é projetada para suportar o acréscimo de novo hardware de maneira automatizada. Existem dois tipos difundidos de escalonamento (MI- CHAEL et al., 2007): o horizontal, e o vertical. Escalonar horizontalmente significa adicio- nar mais nós de processamento ao sistema. Em contrapartida, para escalonar verticalmente é preciso adicionar mais recursos (memória RAM4, núcleos de processamento, espaço para

armazenamento, etc.) a um nó já pertencente ao sistema. A Figura 2.2 ilustra os dois tipos de escalonamento.

Sistemas computacionais também são suscetíveis a falhas. Quando falhas ocorrem, seja a nível de software ou hardware, os programas podem produzir resultado incorreto, ou sim- plesmente parar antes de completarem suas tarefas. Um sistema tolerante a falhas é aquele com capacidade de sobreviver perante a falha de algum de seus componentes (BARCELAR, 2013). Toda técnica de tolerância a falhas requer primeiramente a detecção da mesma, para

2.4 Sistemas Distribuídos 16

Figura 2.2: Tipos de escalonamento

que posteriormente alguma ação seja efetuada. A técnica mais simples consiste em avisar ao cliente que determinada requisição não pôde ser processada pelo sistema, ou seja, aquela re- quisição não pode mais ser atendida, apesar do sistema continuar funcionando para processar novas requisições. Também é possível tolerar falhas através da redundância de componentes, elevando a confiabilidade5 do sistema (TANENBAUM; STEEN, 2007). Para tal, é preciso

que haja mais de um componente disponível para realizar uma mesma função, pois se um falhar, as requisições podem ser redirecionadas para o outro. Falhas também podem ser to- leradas a nível de software, sendo possível, por exemplo, retransmitir uma mensagem cuja transmissão foi problemática (COULOURIS; DOLLIMORE; KINDBERG, 2001).

Em sistemas distribuídos é normal que haja acesso a recursos compartilhados, o que resulta em concorrência. Um sistema distribuído, por exemplo, poderia ter uma fila que armazenaria as requisições dos clientes, e vários componentes que processariam esta fila.

2.4 Sistemas Distribuídos 17

Tais componentes, portanto, estariam realizando um acesso concorrente à fila para processar o primeiro elemento da mesma. É preciso, dessa forma, que o programador (ou framework utilizado) implemente estratégias para que o acesso a estes recursos sejam atômicos.

Transparência é um conceito chave para o desenvolvimento de sistemas distribuídos. Um sistema distribuído que é capaz de se apresentar a usuários e aplicações como se fosse um único sistema computacional é denominado transparente (TANENBAUM; STEEN, 2007). A função da transparência é abstrair a complexidade do sistema distribuído para programa- dores, de forma que eles se preocupem apenas com o projeto de seu programa em particular (BARCELAR, 2013). Um exemplo é que os programadores de aplicações ao utilizarem um serviço não precisam saber que os recursos de um sistema estão fisicamente distribuídos. A International Standards Organization (1992) identificou os principais tipos de transparência: 1. Transparência de acesso: oculta as diferenças na representação dos dados e no acesso

a recursos locais e remotos;

2. Transparência de localização: abstrai a localização real do recurso;

3. Transparência de concorrência: permite que vários processos e/ou usuários utilizem o mesmo recurso de forma compartilhada sem interferência;

4. Transparência de replicação: múltiplas instâncias de um recurso podem ser utilizadas para aumentar a confiabilidade e desempenho sem que os usuários ou programadores de aplicação percebam;

5. Transparência de falhas: abstrai a ocorrência de falhas dos programadores de aplica- ções e usuários, permitindo que os mesmos completem suas tarefas;

6. Transparência de escalabilidade: permite que o sistema escalone sem necessidade de alteração na estrutura do sistema ou algoritmo da aplicação.

A maioria das características de sistemas distribuídos supracitadas nesta seção integrarão o DAaaS. A medida em que a arquitetura do DAaaS for detalhada no Capítulo 4, serão descritos como cada uma destas caraterísticas dessa beneficiará o sistema. Na próxima seção serão apresentados os principais conceitos e técnicas de computação em nuvem, que é um modelo e infraestrutura para implantação de sistemas distribuídos.