ClusterZope
Origem: I Seminario de Inovacao Tecnologica em Cluster e Grid, a enciclopédia livre.
| Conteúdo |
Texto
ZEO (Zope Enterprise Objects) é um sistema cliente-servidor para compartilhamento de um storage único entre diversos clientes. Normalmente um storage ZODB somente pode ser utilizado por um único processo. Quando utilizamos o ZEO o storage é aberto no processo servidor ZEO. Programas clientes se conectam a esse processo utilizando um ClientStorage (CS) ZEO. ZEO provê uma visão consistente da base de dados a todos os clientes. O cliente e o servidor ZEO se comunicam utilizando um protocolo RPC padrão na última camada TCP.
Ele permite garantia de redundância e alta disponibilidade ao site. Toda instalação Zope será um Client Storage (CS) que conversa com o servidor Zope Storage (ZSS). Cada CS terá seu próprio cache de objetos e será capaz de trabalhar independentemente de outro CS.
Existem diversas opções de configuração que afetam o comportamento do servidor ZEO. Esse documento irá descrever como algumas dessas funcionalidades funcionam. Posteriormente descreveremos como configurar cada opção.
Client Cache
Cada cliente ZEO mantém um cache em disco dos objetos recentemente utilizados para evitar que sejam recolhidos do servidor toda vez que vierem a ser requisitados. Normalmente é mais rápido ler objetos do disco do que buscá-los na rede. O cache pode também prover cópias apenas para leitura durante problemas no servidor.
O cache pode ser persistente ou transiente. Caso o cache seja persistente os arquivos cache serão guardados para uso após do inicio do processo. Um cache não-persistente utiliza arquivos temporários que são removidos quando o storage cliente é fechado.
O tamanho do cache cliente é configurado quando o ClientStorage é criado. O tamanho padrão é de 20MB, mas o tamanho correto depente inteiramente da base de dados particular.
ZEO utiliza invalidações para consistência de cache. Cada vez que o objeto é modificado, o servidor envia uma mensagem a cada cliente informando tal modificação. O cliente descartará o objeto de seu cache após receber uma invalidação. Tais invalidações são sempre registradas.
A cada vez que um cliente se conecta a um servidor. ele deve verificar se o conteúdo de seu cache continua válido. (Ele não recebe nenhuma mensagem de invalidação enquanto ele estava desconectado.) Existem diversos mecanismos utilizados para elaborar verificação de cache. No pior dos casos o cliente envia ao servidor uma lista de todos os objetos no seu cache com seus respectivos timestamps; o servidor responde com uma mensagem de invalidação a cada objeto modificado. O custo de verificação é uma das coisas a se considerar ao se pensar em usar um cache muito grande.
Sempre que um cliente trava ou se desconecta ele deverá verificar seu cache. Quando um servidor trava todos os clientes devem verificar seus caches.
O processo de verificação do cache é otimizado de dois modos para eliminar os custos ao se reiniciar clientes e servidores. Cada cliente mantém o timestamp da última mensagem de invalidação que ele teve acesso. Ao se conectar ao servidor ele checa se alguma mensagem de invalidação foi enviada após aquele timestamp. Caso não encontre alterações o cache está atualizado e não é feita nova verificação. O outro meio de otimização e a pilha de invalidação, descrita abaixo.
Pilha de invalidação
O servidor ZEO mantém uma pilha de mensagens em memória. Quando um cliente se conecta a um servidor ele envia o timestamp da mensagem de invalidação mais recente que ele recebeu. Caso essa mensagem continue presente na pilha de invalidação o servidor enviará ao cliente todas as invalidações que lhe faltam. Isso geralmente é menos oneroso que executar uma verificação completa de cache.
Links
Use ZEO with Zope (http://www.zope.org/Members/kedai/useZeoZope)
Running a ZEO Server HOWTO (http://www.zope.org/Wikis/ZODB/HowtoRunAZEOServer/howto.html)
Como fazer balanceamento de carga com Zope/ZEO (http://colab.interlegis.gov.br/wiki/FazerUmBalanceamentoDeCarga)
Setting up a ZEO Cluster for ZEO 2, Zope 2.6.1 and DBTab. (http://www.infrae.com/products/silva/auxiliary_docs/archive/zeo2clusternodes)
ZODB/ZEO Programming Guide (http://www.zope.org/Wikis/ZODB/FrontPage/guide/index.html)
Scalability and ZEO (http://zope.org/Documentation/Books/ZopeBook/2_6Edition/ZEO.stx)
ZEO (http://zopewiki.org/ZEO)
ZODB & ZEO Introduction (http://doc.async.com.br/python/zodb-howto/zodb-zeo.html)
Silva Documentation Archive (http://www.infrae.com/products/silva/auxiliary_docs/archive/)
Zope Alta Performance (http://www.agentelinux.com.br/artigos/zope-howto_new/)
ZEO Fact Sheet (http://www.zope.org/Products/ZEO/ZEOFactSheet)

