#summary Opções de configuração para escalar e otimizar o sistema. #labels Phase-Support,Phase-Deploy = Como escalar e otimizar o Metabus? = O Metabus foi projetado para ser totalmente escalável, principalmente por que para realizar uma busca, que não está em cache, é necessário consultar muitas fontes (talvez milhares) em um período de tempo aceitável para um usuário que está acostumado a utilizar mecanismos de busca convêncionais que retornam os resultados em menos de 1 segundo. Dessa forma, quanto mais tarefas possam ser executadas paralelamente, melhor, e ainda, aproveitando todos os recursos disponíveis, sejam recursos de rede ou de processamento. Para viabilizar essa idéia o Metabus deve ser capaz de: # Utilizar mais de uma rede. Uma vez que a conexão com a internet disponível em um servidor pode não ser rápida o suficiente para consultar todas as fontes em tempo hábil. # Ampliar ao máximo o paralelismo da realização das consultas de maneira escalável. O principal gargalo dessa aplicação é a realização de uma busca em todas as fontes, se o tempo para finalizar essa busca não for aceitável para o usuário, deve existir a possibilidade de adicionar servidores para agilizar as buscas. # Utilizar _threads_ para efetuar cada uma das buscas. A busca realizada em cada uma das fontes não pode ser sequencial dentro de um processo de forma alguma. == Registro de Servidores == O Metabus é escalável no nível de servidores. É possivel adicionar quantos servidores forem necessários para suprir a necessidade de processamento do sistema. Assim, cada servidor pode possuir recursos de rede diferentes e independentes (a utilização de uma rede não influencia na performance da outra) que serão somados e compartilhados como recursos do sistema Metabus. Para adicionar novos servidores é necessário apenar efetuar o processo de instalaçao do mbserver na nova máquina e cadastrá-lo no mbclient (módulo serverlib), editando o arquivo settings.py e adicionando o IP ou nome do servidor na lista de servidores chamada SERVERS, como no exemplo abaixo: {{{ SERVERS = [ 'http://localhost:9123/', 'http://200.201.122.32:80/', ] }}} A identificação do servidor vem seguida da porta que o Metabus esta rodando. == Processo por processador == O Interpretador _Python_ não é capaz de processar mais de uma _thread_ de um mesmo processo e processadores diferentes simultaneamente. Dessa forma, o número que processos é configurável para prover a possibilidade de utilização de todos os processadores disponíveis em um servidor. O número de processos por servidor é normalmente configurado para ser igual ao número de processadores para que cada processo possa ser escalado para um processador ao mesmo tempo. Para possibilitar essa configuração de número de processos utilizados por servidor foi utilizado o WSGI (http://wsgi.org/) e Apache2 que permitem a configuração de um pool de processos do serviço Metabus. O arquivo de configuração do Apache2, utilizado pelo Metabus, que contém os parametros relativos ao número de processos pode ser encontrado em mbserver/deploy/apache2/etc/apache2/sites-available/mbserver. Segue um trecho desse arquivo: {{{ NameVirtualHost *:9123 ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel error CustomLog /var/log/apache2/access.log combined ServerSignature On WSGIDaemonProcess mbserver user=metabus group=www-data processes=8 threads=1 WSGIProcessGroup mbserver WSGIScriptAlias / /home/metabus/mbserver/mbserver.wsgi }}} Para alterar o número de processos basta modificar o parametro _processes_. == Threads de Buscas == Dividir as requisições de buscas em _threads_ é uma maneira de evitar que a execução do sistema fique interrompida enquanto se obtém os resultados de uma pesquisa em uma fonte de busca. Usando _threads_, as requisições podem ser feitas paralelamente, em outras palavas, é possivel fazer a requisição de uma pesquisa em mais de uma fonte antes que a primeira fonte retorne o resultado da busca. O número de threads de cada processo também é configurável, o que possibilitará o desenvolvimento de testes automáticos para verificar o número ótimo de _threads_ por processo em cada ambiente. Esse parâmetro pode ser editado no arquivo mbserver/server/settings.py: {{{ THREADS_NUMBER = 10 }}}