Hermes: Um Arcabouc ¸o para Programac ¸˜ ao de Aplicac ¸˜ oes P2P Emilio Francesquini, Francisco Reverbel Departamento de Ciˆ encia da Computac ¸˜ ao Instituto de Matem´ atica e Estat´ ıstica da Universidade de S˜ ao Paulo {emilio,reverbel}@ime.usp.br Abstract. In the early stages of the development of a distributed application, in- formation on its final size or utilization profile is often unknown. At an early point, deciding which overlay network implementation suits the application needs can be a complex task. Hermes provides a simple, yet powerful, en- vironment for the development of P2P applications. It gives the application developer the possibility of choosing the overlay network implementation and replacing such implementation at any point, from development to production, without changes on the application code. Resumo. Geralmente, no in´ ıcio do desenvolvimento de uma aplicac ¸˜ ao dis- tribu´ ıda, tem-se poucas informac ¸˜ oes sobre o seu tamanho final ou perfil de utilizac ¸˜ ao. A escolha de uma implementac ¸˜ ao de rede de sobreposic ¸˜ ao ade- quada ` as necessidades da aplicac ¸˜ ao nessa fase do desenvolvimento pode ser uma tarefa complexa. O Hermes oferece um ambiente simples, por´ em pode- roso, para a criac ¸˜ ao de aplicac ¸˜ oes P2P. Ele possibilita a escolha e a troca da implementac ¸˜ ao de rede de sobreposic ¸˜ ao em qualquer uma das fases do ciclo de vida da aplicac ¸˜ ao, desde o desenvolvimento at´ e a produc ¸˜ ao, sem alterac ¸˜ oes no c´ odigo. 1. Introduc ¸˜ ao De uma forma geral ´ e poss´ ıvel classificar as redes de sobreposic ¸˜ ao atuais como estrutu- radas ou n˜ ao estruturadas. Dependendo da aplicac ¸˜ ao, cada uma delas tem vantagens e desvantagens [Castro et al. 2004]. As redes estruturadas, por exemplo, tendem a ser mais eficientes no que diz respeito ao consumo de banda, enquanto as buscas feitas nas redes n˜ ao estruturadas tendem a ser mais robustas. Mesmo entre redes do mesmo tipo, existem diferenc ¸as significativas na maneira pela qual elas realizam suas tarefas, como por exem- plo buscas [Risson and Moors 2004]. No entanto, n˜ ao ´ e muito f´ acil distinguir, a priori, qual soluc ¸˜ ao ´ e a mais apropriada para a construc ¸˜ ao de um sistema P2P. Antes da efetiva implantac ¸˜ ao do sistema, ´ e muito dif´ ıcil obter dados precisos sobre o perfil de utilizac ¸˜ ao e sobre as proporc ¸˜ oes da rede. A obtenc ¸˜ ao de uma estimativa do desempenho real que uma certa soluc ¸˜ ao pode alcanc ¸ar tamb´ em n˜ ao ´ e simples. Muitos modelos de simulac ¸˜ ao foram propostos mas, em qualquer simulac ¸˜ ao, ´ e sempre necess´ ario fazer diversas suposic ¸˜ oes, algumas delas discut´ ıveis, e aproximac ¸˜ oes para a simplificac ¸˜ ao do modelo. Por isso, ape- sar dos simuladores dispon´ ıveis estarem cada vez mais completos e robustos, n˜ ao existe uma maneira segura de avaliar se o comportamento de um sistema feito para executar em milh˜ oes de n ´ os ser´ a o mesmo tanto no simulador quanto no ambiente real [Gribble 2005]. A escolha de uma soluc ¸˜ ao incorreta pode comprometer o bom funcionamento da aplicac ¸˜ ao e, dependendo do seu grau de acoplamento com a soluc ¸˜ ao escolhida,