O Apache Solr é uma plataforma de indexação e busca que permite a criação de arquiteturas das mais variadas. O Solr possui diversos recursos como faceted search, replicação de índices, criação de múltiplos cores de indexação além de busca, caching, sharding e busca geoespacial. Este artigo mostra como criar uma arquitetura de múltiplos núcleos com o Solr
O Apache Solr (http://lucene.apache.org/solr) é uma plataforma de indexação e busca que permite a criação de arquiteturas de acordo com as necessidades de negócio da sua aplicação. O Solr possui diversos recursos como: faceted search, replicação de índice, criação de múltiplos cores de indexação, busca, caching, sharding, geopatial search, entre outros. Este artigo mostra como criar uma arquitetura multicore com o Solr.
Em ambientes corporativos é comum o compartilhamento de recursos como banco de dados, serviços de diretório, armazenamento de arquivos, barramento SOA, entre outros; mas como fazer quando estas aplicações precisam compartilhar recursos de busca e indexação de documentos? Como isolar o índice de cada aplicação de maneira que a sua gestão possa ser feita de maneira independente sem interferir nos outros índices existentes? Para responder a essas perguntas é necessário conhecer o recurso de múltiplos núcleos do Apache Solr.
O recurso de múltiplos núcleos do Solr permite que seja criado um ou mais índices na mesma instância do Solr de maneira que cada um deles fique isolado. Com isso pode-se utilizar todos os recursos que o Solr disponibiliza em determinado índice de maneira que ele não afete os demais existentes na mesma instância do Solr.
Funciona da seguinte forma: considere um cenário onde há uma organização que contém várias aplicações distintas e cada uma precisa indexar e consultar documentos acessando um serviço que seja transparente, escalável, isolado e de fácil gestão. A imagem abaixo exemplifica um modelo arquitetural criado para atender este cenário fictício.
Trata-se de um modelo arquitetural Master-Slave onde há um core para cada aplicação. Para as aplicações externas que utilizam os serviços de indexação e busca (Aplicação A, B, C e XYZ na imagem), estes serviços são invocados por uma URL única. Entre as máquinas Solr e as aplicações externas há um redirecionador - que pode ser um apache com load-balancer (http://www.apache.org/) ou um Nginx (http://nginx.org/). A máquina Master é responsável pelo processamento das requisições de indexação, e as máquinas Slaves são responsáveis pelo processamento das requisições de consulta. Em ambas há a configuração dos cores específicos. Aumentando o número de máquinas Slaves, aumenta-se a escalabilidade das consultas.
A configuração padrão do Solr é feita para trabalhar com apenas um índice, portanto para que o Solr entenda os múltiplos índices é necessário criar o arquivo solr.xml no diretório configurado da variável de ambiente solr.home e adicionar os cores que estarão disponíveis na instância do Solr. Abaixo um exemplo do conteúdo deste arquivo:
<solr persistent="true" sharedLib="lib">
<cores adminPath="/admin/cores">
<core name="apliacacaoa" instanceDir="instances/aplicacaoa" />
<core name="aplicacaob" instanceDir="instances/aplicacaob" />
<core name="aplicacaoc" instanceDir="instances/aplicacaoc" />
</cores>
</solr>
Há dois atributos obrigatórios na configuração de cada núcleo:
- name: Nome do núcleo. Ficará disponível na interface administrativa e será usado para operações como edição, atualização, exclusão, entre outras.
- instanceDir: Diretório onde estão localizados os arquivos de configuração de cada core. É neste diretório que estão os arquivos solrconfig.xml e schema.xml do respectivo core.
Após ter configurado o arquivo solr.xml com os cores desejados, deve-se agora criar os diretórios de cada core (no mesmo local especificado no instanceDir) e colocar as configurações específicas deste core como schema, solrconfig, sinônimos, stopwords, etc.
Gerenciamento dos núcleos
A gestão dos núcleos no Solr pode ser feita pela interface administrativa disponibilizada pelo próprio Solr, através de serviços REST, ou manualmente alterando os arquivos de configuração do Solr. As operações permitidas via REST são:
- Criar (Create): Cria um novo núcleo com base em outro já existente (instanceDir).
- Exemplo: http://localhost:8983/solr/admin/cores?action=CREATE&name=coreX&instanceDir=path_to_instance_directory
- Atualizar (Reload): Recarrega as configurações do core. É utilizado quando há uma alteração nos arquivos de configuração (solrconfig.xml ou schema.xml). Dessa forma, é possível recarregar o seu core sem reiniciar a instância do Solr.
- Exemplo: http://localhost:8983/solr/admin/cores?action=RELOAD&core=core0
- Remover (Unload): Remove o core não permitindo que novos requests sejam feitos para este core
- Exemplo: http://localhost:8983/solr/admin/cores?action=UNLOAD&core=core0
- Renomear (Rename): Renomeia o nome do core e consequentemente o caminho para invocação deste core.
- Exemplo: http://localhost:8983/solr/admin/cores?action=RENAME&core=core0&other=novonome
- Trocar (Swap): Usado para trocar um core pelo outro. É muito utilizado para fazer restauração de um índice que estava em backup, substituindo um índice que foi corrompido durante a operação.
- Exemplo: http://localhost:8983/solr/admin/cores?action=SWAP&core=core1&other=core0
Um detalhe importante é que as invocações recebidas até o momento da execução dos comandos atualizar, remover e trocar serão atendidas normalmente até que se completem. Essas operações devem ser realizadas com muita cautela e por pessoas que conheçam os índices criados na instância do Solr para evitar danos às aplicações que utilizem essa estrutura.
É possível realizar todas essas ações utilizando a interface administrativa do Solr, o SolrAdmin, que por sua vez faz uso das mesmas interfaces REST.
Conclusões
Neste artigo foi apresentado um recurso importante do Apache Solr que facilita a criação de uma arquitetura distribuída, transparente e isolada de indexação e busca que facilita a gestão dos múltiplos índices existentes em uma organização. Assim, é possível usar o Solr como um serviço centralizado de indexação e busca para atender várias aplicações distintas com necessidades de negócio específicas, sem comprometer a gestão e a escalabilidade dos índices.
Sobre o autor
Anderson Vasconcelos dos Santos é Bacharel em Análise de Sistemas pela Universidade Federal de Mato Grosso do Sul. É co-fundador da Kaizen desenvolvimento de softwares por encomenda (http://www.kaizen-it.com.br). É consultor em Apache Solr e ferramentas de indexação e busca.