W sytuacji, kiedy nasz indeks jest duży (lub jest ich kilka) w chwili, kiedy konieczna jest pełna replikacja Solr potrafi wykorzystać całą dostępną przepustowość łącza (o ile dyski dadzą radę). W pewnych sytuacjach jest to pożądane, w innych nie. Podczas gdy inne kolekcje serwują zapytania, nie chcielibyśmy, aby jedna z nich wykorzystała całą przepustowość sieci. Na szczęście wraz z premierą Solr 5.0 dostajemy w nasze ręce możliwość ograniczenia wykorzystania sieci przez replikację Solr.
Do pokazania, jak działa nowa funkcjonalność Solr porównajmy dwie sytuacje – kopiowanie indeksu bez żadnych limitów oraz kopiowanie indeksu podczas ustawionego limitu. W tym celu weźmiemy indeks mający około 2GB i zobaczymy jak wygląda wykorzystanie sieci podczas domyślnej konfiguracji replikacji oraz wtedy, kiedy mamy ustawione limity. Do tego celu wykorzystamy wdrożenie oparte o SolrCloud. Należy jednak pamiętać, iż sposób ten działa także we wdrożeniach opartych o architekturę master – slave.
Replikacja bez limitów
Do replikacji bez limitów wykorzystujemy następującą konfigurację:
<requestHandler name="/replication" class="solr.ReplicationHandler"> </requestHandler>
A tak wygląda wykorzystanie sieci podczas replikacji:
Replikacja z limitami
Do replikacji z limitami wykorzystujemy następującą konfigurację:
<requestHandler name="/replication" class="solr.ReplicationHandler"> <lst name="defaults"> <str name="maxWriteMBPerSec">0.1</str> </lst> </requestHandler>
Wykorzystanie sieci w chwili replikacji wygląda następująco:
Jak widać różnica pomiędzy dwoma scenariuszami jest znaczna.
Podsumowanie
Jak widać sama konfiguracja jest banalna i działa. Oczywiście działa nie tylko w przypadku wdrożenia opartego o SolrCloud, ale także w bardziej tradycyjnym master – slave. Jedyne czego mi teraz brakuje, to możliwości kontroli za pomocą dedykowanego API, ale to może w przyszłości 🙂