Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 de Dezembro de 2011
ndice
1 2 Introduo ............................................................................................................................. 3 Requisitos .............................................................................................................................. 3 2.1 2.2 3 No Funcionais .............................................................................................................. 3 Funcionais...................................................................................................................... 3
Arquitetura ............................................................................................................................ 4 3.1 3.2 3.3 3.4 3.5 Esquema conceptual ..................................................................................................... 4 Arquitetura servidor ...................................................................................................... 4 Arquitetura cliente ........................................................................................................ 5 Esquema de interaes ................................................................................................. 6 Estruturas de dados ...................................................................................................... 6 Informao sobre medicamentos ......................................................................... 6 Lista de farmcias .................................................................................................. 7 Lista de servidores ................................................................................................. 7
Pontos-chave da implementao .......................................................................................... 7 4.1 4.2 4.3 4.4 Propagao do registo das farmcias ........................................................................... 7 Tratamento da falha de um servidor ............................................................................ 7 Reintegrao de um servidor reinicializado / Boot do servidor.................................... 8 Falha de um cliente (farmcia) ...................................................................................... 8 Detetada ao pesquisar (ao interrogar servidor sobre famlia) .............................. 8 Detetada ao consultar produtos (ao inquirir produtos farmcia) ........................ 8
Outros aspetos de implementao ....................................................................................... 9 Outros aspetos conceptuais ................................................................................................ 10 6.1 6.2 6.3 6.4 6.5 Tratamento de excees ............................................................................................. 10 Tempos de vida dos objetos........................................................................................ 10 Modos de ativao dos objetos .................................................................................. 10 Protocolos de comunicao ........................................................................................ 10 Controlo de concorrncia............................................................................................ 11
1 Introduo
Foi-nos proposto desenvolver uma aplicao distribuda que simule um ambiente em que vrias farmcias interagem com um anel de servidores. O anel concilia a necessidade de, por um lado, o objeto alojado no servidor ter estado e, por outro lado, conferir alguma tolerncia a falhas aplicao. A informao encontra-se replicada por todos os servidores do anel. Uma farmcia pede informaes ao servidor da sua zona sobre outras farmcias e, aps ter obtido o contacto dessas, comunica diretamente com elas. O ambiente de desenvolvimento utilizado foi o .NET Remoting, Visual Studio 2010 Ultimate e C#.
2 Requisitos
2.1 No Funcionais
R1 O sistema est dividido em zonas; cada zona contm 1 servidor e vrias farmcias R2 Os servidores de zona esto ligados em anel R3 Cada farmcia contm um objeto StockManager que guarda informao sobre o stock de medicamentos R4 Os medicamentos esto agrupados em famlias R5 Cada farmcia s conhece o servidor da sua zona
2.2 Funcionais
R6 Permitir o registo da farmcia no servidor R7 StockManager aceita pedidos remotos R8 Permitir o de-registo da farmcia do servidor R9 Registo/de-registo tm de ser sincronizados entre os vrios servidores, seguindo o anel R10 A farmcia ao registar-se deve indicar as famlias de produtos que tem e o seu objeto StockManager R11 Uma farmcia pode interrogar o servidor sobre famlias de produtos: obtm uma lista de StockManagers que contm a famlia pretendida R12 Aps conhecer um StockManager, uma farmcia pode inquirir informao sobre produtos a essa outra farmcia (StockManager) R13 O sistema deve fazer a reconfigurao do anel dinamicamente quando um servidor falha R14 Uma farmcia que deteta falha noutra farmcia deve informar servidor R15 A falha do cliente (farmcia) deve ser propagada no anel R16 Aplicao cliente deve mostrar os pedidos que o StockManager est a satisfazer, em tempo real R17 Anel de servidores deve poder ser aumentado dinamicamente
3 Arquitetura
3.1 Esquema conceptual
Algoritmos registaFarmacia / retiraFarmacia - acrescenta-a lista de farmcias - chama mtodo do servidor seguinte (registaFarmacia) para informar sobre o registo daquela farmcia Ou: - verifica se j deu a volta informaSobreFamilia - pergunta a todas as farmcias se tm aquela famlia - constri lista de proxies dos StockManagers - devolve a lista ao cliente retiraServidor / integraServidor - retira servidor da lista - actualiza proximoServidor - envia a lista ao servidor seguinte desactivaFarmacia - confirma se o StockManager sinalizado est de facto indisponvel - em caso afirmativo: - retira StockManager da lista de farmcias - propaga a nova lista - devolve true se confirmou a indisponibilidade
StockManager (farmcia enquanto servidor) informaSobreProdutos temFamilia? aceitaEncomenda ping *(acrescentado posteriormente) servidorDown *(acrescentado posteriormente) servidorUp *(acrescentado posteriormente)
Este o esquema bsico de funcionamento do sistema: - O cliente regista-se no servidor, indicando um StockManager - Outro cliente pede ao servidor informaes sobre famlias; o servidor devolve-lhe proxies de StockManagers - Na posse dos proxies, o cliente pode inquirir diretamente StockManagers de outras farmcias Est aqui implcita a utilizao de Network Pointers, que o centro do funcionamento de todo este sistema.
Produto Nome Preo Quantidade 3.5.2 Lista de farmcias ElemListaFarmacias StockManager Zona Id Esta estrutura partilhada pelo cliente e pelo servidor. 3.5.3 Lista de servidores ElemListaServidores ServidorFarmacias Zona Uri //*s usado no boot do servidor Este elemento utilizado pelo servidor, na lista interna de servidores.
4 Pontos-chave da implementao
4.1 Propagao do registo das farmcias
Quando uma farmcia se regista no num servidor, esse servidor tem de propagar o registo aos restantes servidores do anel. Isto feito pelo mtodo registaFarmacia: O mtodo aceita um ElemListaFarmacias, adiciona-o lista de farmcias do servidor e invoca o mtodo registaFarmacia do prximo servidor. Os pontos relevantes so: - Quando o novo elemento d a volta ao anel gera-se um deadlock. Isto acontece porque o servidor est espera do retorno da chamada e no pode responder ao outro servidor que agora o chama a si A soluo que encontrmos foi fazer uma chamada assncrona ao prximo servidor; - A base da recurso acontece quando o servidor original recebe um pedido de registo de farmcia. O servidor deteta isto verificando que j contm o novo elemento na sua lista de farmcias.
- Propaga a nova lista de servidores aos restantes servidores - Retoma a propagao da farmcia aps reconfigurar o anel de notar que a falha detetada durante o callback do registaFarmacia. Logo, no era possvel, a partir de um mtodo static, aceder ao mtodo da instncia que trata a falha Resolvemos este problema passando a prpria instncia como estado do IAsyncResult.
de um servidor, sendo que da para a frente os servidores so contactados via proxy e no mais so usados os portos ou uris. Assim, qualquer servidor consegue integrar-se no anel e sair dinamicamente. Num dado momento, a lista atual de servidores pode no ter nada em comum com a lista inicial (salvo a situao que j referimos).
8 Prottipo de demonstrao
Para testar a aplicao foram criados batch files para lanar os vrios servidores de zona. Na raiz da soluo encontra-se tambm um atalho para a aplicao cliente. O cliente poder indicar a zona em que se pretende registar.
O funcionamento tpico do cliente este: 1. Indicar a zona e o nmero de cliente. Registar o cliente. (S esto criados ficheiros com os stocks de produtos para 4 clientes diferentes) 2. Indicar a famlia que se pretende pesquisar. Pesquisar. 3. Selecionar qual a farmcia da qual pretendemos obter informaes. Consultar produtos. (So listados os produtos da famlia indicada existentes na farmcia selecionada) A dado momento poder listar as farmcias j conhecidas do cliente. medida que forem efetuadas pesquisas, vo sendo adicionadas farmcias a esta lista. Nesta situao deve ter em ateno que as farmcias listadas no espao Farmacias no correspondem a nenhuma pesquisa e, portanto, no esto relacionadas com a famlia que est selecionada. Pode no entanto selecionar qualquer famlia e qualquer farmcia e consultar os seus produtos. No espao LOG registado um log das aes mais relevantes do cliente. No espao Stock visualizado o stock da farmcia respetiva. No espao STOCK MANAGER so listados os pedidos que o objeto Stock Manager vai recebendo. O servidor vai enviando mensagens de log para a consola. Para configurar a aplicao de um modo mais completo poder consultar ou alterar os ficheiros de configurao: Na pasta ServidorFarmacias\bin\Debug: o configServidor[zona] Define os parmetros remoting do servidor dessa zona, nomeadamente o porto o XMLconfig Contm pares zona/porto de todos os servidores possveis da configurao base do anel Na pasta ClienteFarmaciasWinForms\bin\Debug: o configCliente[zona] Define os parmetros remoting dos clientes de uma determinada zona o stockmanager_c[n] Registo XML do stock de produtos do cliente n