Como observado na sec¸˜ao anterior, cada um dos exemplos de sistemas distribu´ıdos dinˆamicos citados possui caracter´ısticas particulares e, portanto, diferentes desafios s˜ao encontrados no desenvolvimento de aplicac¸˜oes para cada um destes ambientes. Por exemplo, devido ao meio de comunicac¸˜ao empregado, uma aplicac¸˜ao projetada para uma ambiente de comunicac¸˜ao sem fio (MANET) provavelmente apresentar´a maiores problemas para trocar da- dos entre os processos do que uma aplicac¸˜ao desenvolvida no ˆambito de um sistema P2P (cabeado).
No entanto, existem alguns desafios inerentes aos sistemas distribu´ı- dos dinˆamicos que s˜ao comuns para qualquer um destes ambientes. Da mes- ma maneira que estes ambientes dinˆamicos abrem caminho para novas classes de aplicac¸˜oes, os mesmos tamb´em criam v´arios desafios ligados `a necessida- de de assegurar que os algoritmos distribu´ıdos mantenham suas propriedades, mesmo diante das variac¸˜oes que est˜ao previstas para estes ambientes.
Os primeiros desafios encontrados no desenvolvimento de aplicac¸˜oes distribu´ıdas, que executar˜ao suas computac¸˜oes nestes ambientes, devem estar relacionados com o projeto e implementac¸˜ao de algoritmos que tratem dos problemas fundamentais em sistemas distribu´ıdos, em particular os proble- mas de acordo e de coordenac¸˜ao. Algoritmos empregados na soluc¸˜ao destes problemas s˜ao denominados blocos b´asicos de construc¸˜ao (building blocks), e s˜ao consideradas abstrac¸˜oes essenciais no projeto de aplicac¸˜oes distribu´ıdas. A sec¸˜ao seguinte apresenta um dos principais desafios, que n˜ao deve ser ignorado, no projeto de protocolos para sistemas distribu´ıdos dinˆamicos. Este desafio consiste em contornar os problemas relacionados com o churn,
que engloba precisamente a principal caracter´ıstica de um sistema distribu´ıdo dinˆamico, i.e., a entrada e sa´ıda de n´os do sistema em qualquer momento.
2.5.1 Churn
O termo churn foi introduzido para traduzir a variac¸˜ao no conjunto de participantes dos sistemas distribu´ıdos dinˆamicos, i.e., os eventos de entra- das e sa´ıdas arbitr´arias de n´os no sistema ou ainda de falhas de processos. A ocorrˆencia destes eventos gera perturbac¸˜oes no sistema, as quais podem re- sultar em (GODFREY et al., 2006): perda de mensagens, inconsistˆencia de dados, aumento da latˆencia observada pelo usu´ario, aumento no uso de lar- gura de banda, interrupc¸˜oes parciais ou totais de servic¸os; indisponibilidade de recursos e variac¸˜oes bruscas no desempenho do sistema.
Deste modo, um desafio inerente aos sistemas distribu´ıdos dinˆamicos consiste em projetar e desenvolver arquiteturas auto-organiz´aveis, capazes de detectar e tratar as mudanc¸as que podem ocorrer no grupo de entidades que comp˜oem a aplicac¸˜ao distribu´ıda, permitindo assim a reconfigurac¸˜ao da arquitetura em tempo de execuc¸˜ao. Esta propriedade de auto-adaptac¸˜ao tem por objetivo assegurar que o sistema continuar´a atendendo, durante todo o seu ciclo de vida, aos requisitos de funcionamento da aplicac¸˜ao, evitando a deteriorac¸˜ao da qualidade de servic¸o e, principalmente, da seguranc¸a.
A implementac¸˜ao destas arquiteturas auto-organiz´aveis, principalmen- te quando considerado um ambiente ass´ıncrono e sujeito `a presenc¸a de pro- cessos faltosos, deve envolver o uso de mecanismos que constantemente ava- liem e fornec¸am dados sobre a composic¸˜ao atual do grupo de entidades que sustentam o sistema. Estes dados de composic¸˜ao s˜ao fundamentais no proces- samento da reconfigurac¸˜ao do sistema. No entanto, estes mecanismos devem operar com uma vis˜ao restrita (parcial) da composic¸˜ao do referido grupo, j´a que n˜ao ´e realista assumir em sistemas dinˆamicos a possibilidade de se obter vis˜oes globais e consistentes do sistema.
Assim, o grande desafio que surge nestes ambientes ´e o de manter o progresso de aplicac¸˜oes distribu´ıdas diante do churn. Os estudos relacionados ao churn buscam avaliar o seu impacto sobre sistemas distribu´ıdos dinˆamicos e apresentar alternativas para minimizar a sua ocorrˆencia. Tentativas de mini- mizar a influˆencia do churn envolvem o uso de heur´ısticas na selec¸˜ao dos n´os usados para compartilhar determinado recurso ou prover algum servic¸o. Estas heur´ısticas consistem em escolher n´os que possuem maior probabilidade de permanecerem por mais tempo no sistema, servindo como fontes confi´aveis de recursos ou servic¸os. A selec¸˜ao dos n´os pode ser realizada de maneira aleat´oria dentre o conjunto de n´os que est˜ao presentes no sistema ou atrav´es da
atribuic¸˜ao de pesos aos n´os com base em observac¸˜oes realizadas no decorrer do tempo.
Em (GODFREY et al., 2006) as estrat´egias de selec¸˜ao s˜ao divididas em dois eixos: (1) eixo relacionado com o uso ou n˜ao de informac¸˜oes sobre os n´os, buscando identificar quais n´os s˜ao mais est´aveis, i.e., permanecer˜ao no sistema por mais tempo; e (2) eixo relacionado com a substituic¸˜ao de n´os faltosos, i.e., se os n´os pertencentes ao conjunto escolhido ser˜ao ou n˜ao substitu´ıdos caso apresentarem falhas. No primeiro eixo as estrat´egias s˜ao classificadas como: estabilidade prevista - usam as informac¸˜oes sobre as ca- racter´ısticas de cada n´o; ou estabilidade agn´ostica - n˜ao usam informac¸˜oes sobre os n´os. Com relac¸˜ao ao segundo eixo, as estrat´egias s˜ao classificadas como: fixas - n´os faltosos n˜ao s˜ao substitu´ıdos; ou de substituic¸˜ao - n´os fal- tosos s˜ao substitu´ıdos por outros n´os, caso tais n´os estejam dispon´ıveis no sistema. Assim, a combinac¸˜ao entre estes dois eixos gera as seguintes es- trat´egias: prevista fixa, prevista com substituic¸˜ao, agn´ostica fixa e agn´ostica com substituic¸˜ao. Cada uma destas estrat´egias tamb´em pode ser subdividida em v´arias outras estrat´egias, dependendo de quais informac¸˜oes s˜ao utilizadas na selec¸˜ao dos n´os para compor o grupo inicial ou para substituir algum n´o faltoso, se este for o caso.
Outro trabalho que considera o hist´orico dos n´os para definir o con- junto escolhido como respons´avel por determinado servic¸o ´e apresentado em (STUTZBACH; REJAIE, 2006). Este trabalho indica que existe uma forte correlac¸˜ao entre os tempos que determinado n´o permanece no sistema. As- sim, ´e poss´ıvel estimar de maneira aproximada o tempo em que um n´o per- manecer´a no sistema com base em seus comportamentos pr´evios observados.