<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rate &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/rate/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Mon, 28 Mar 2022 16:38:56 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 9.0 &#8211; Rate Limits</title>
		<link>https://solr.pl/2022/03/28/solr-9-0-rate-limits/</link>
					<comments>https://solr.pl/2022/03/28/solr-9-0-rate-limits/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 28 Mar 2022 16:38:51 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[limits]]></category>
		<category><![CDATA[rate]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">https://solr.pl/?p=1186</guid>

					<description><![CDATA[Najnowsza wersja Solr, która zbliża się do nas wielkimi krokami w chwili publikacji tego posta, przynosi wiele zmian, nowych funkcjonalności, usprawnień i poprawek. Jedną z nowych funkcjonalności wprowadzonych w Solr 9.0 jest możliwość kontrolowania liczby zapytań wykonywanych w tym samym]]></description>
										<content:encoded><![CDATA[
<p>Najnowsza wersja Solr, która zbliża się do nas wielkimi krokami w chwili publikacji tego posta, przynosi wiele zmian, nowych funkcjonalności, usprawnień i poprawek. Jedną z nowych funkcjonalności wprowadzonych w Solr 9.0 jest możliwość kontrolowania liczby zapytań wykonywanych w tym samym czasie w ramach danej instancji JVM i Solr działającej na niej. Przyjrzyjmy się szybko tej funkcjonalności.</p>



<span id="more-1186"></span>



<h2 class="wp-block-heading">Podstawy</h2>



<p>Podstawowy pomysł jest dość prosty &#8211; Solr powinien umożliwiać określenie maksymalnej liczby żądań wykonywanych w tym samym czasie, np. takich jak zapytania, indeksowanie danych, czy streaming. To powinno pozwolić chronić klaster Solr, aby nie możliwe było przeładowanie liczbą żądań, a tym samym zapewnienie większej stabilności całego środowiska. Łatwo wyobrazić sobie sytuację, w której liczba zapytań jest wystarczająco duża, aby zaburzyć indeksowanie, czy odwrotnie &#8211; indeksujemy tak dużo danych, że nasze zapytania wykonują się bardzo wolno, a tym samym zauważają to nasi użytkownicy. </p>



<p>Limity, które wprowadzone zostały wraz z wersją 9.0 Solr są globalne dla całej instancji JVM. Oznacza to, że mając dwa Solr działające na tej samej JVM limity są globalne dla obu działających Solr. Warto o tym pamiętać. </p>



<p>Warto także pamiętać, iż obecna implementacja limitera jest dedykowana obsłudze zapytań.  </p>



<h2 class="wp-block-heading"><strong>Konfiguracja &#8211; API</strong></h2>



<p>Konfiguracja limitera możliwa jest w Solr na dwa sposoby &#8211; za pomocą plików konfiguracyjnych oraz za pomocą Cluster API. Przyjrzyjmy się najpierw tej drugiej opcji, czyli API. Aby skonfigurować limiter możemy wykorzystać następujące polecenie:</p>



<pre class="wp-block-code"><code class="">curl -X POST -H 'Content-type:application/json' 'http://localhost:8983/api/cluster' -d '{
  "set-ratelimiter": {
    "enabled": true,
    "allowedRequests": 20,
    "guaranteedSlots": 5,
    "slotBorrowingEnabled": true,
    "slotAcquisitionTimeoutInMS": 50
  }
}' </code></pre>



<p>Wysyłamy żądnie POST do <strong>/api/cluster</strong> i korzystamy z komendy <strong>set-ratelimiter</strong> w celu przekazania odpowiednich parametrów definiujących zachowanie Solr. </p>



<p>Spójrzmy na te parametry:</p>



<ul class="wp-block-list"><li><strong>enabled</strong> &#8211; czy funkcjonalność rate limiting jest włączona (wartość <strong>true</strong>), czy nie (wartość <strong>false</strong>)</li><li><strong>allowedRequests</strong> &#8211; maksymalna liczba żądań możliwych do obsługi w tym samym czasie</li><li><strong>guaranteedSlots</strong> &#8211; liczba slotów, które są zarezerwowane ponad te, które zostały określone przez <strong>allowedRequests</strong>, warto pamiętać, iż działa to tylko w chwili kiedy opcja <strong>slotBorrowingEnabled</strong> jest ustawiona na <strong>true</strong></li><li><strong>slotBorrowingEnabled</strong> &#8211; kiedy jest ustawiona na wartość <strong>true</strong> możliwe jest &#8222;wypożyczanie&#8221; slotów z innych limiterów, które mają wolne zasoby</li><li><strong>slotAcquisitionTimeoutInMS</strong> &#8211; czas, w milisekundach, jakie wątek będzie czekał w kolejce na wykonanie. Po tym czasie Solr odrzuci wykonanie wątku i zwróci status <strong>429</strong> w odpowiedzi.</li></ul>



<h2 class="wp-block-heading"><strong>Konfiguracja &#8211; web.xml</strong></h2>



<p>Oprócz skorzystania z API Solr pozwala na wykorzystanie bardziej statycznej metody konfiguracji limitera &#8211; za pomocą zmian w pliku <strong>web.xml</strong>. Tak, w pliku <strong>web.xml</strong>, nie w pliku <strong>solrconfig.xml</strong>. W pliku <strong>web.xml</strong> możemy dodać jedną lub wiele parametrów do konfiguracji <strong>SolrRequestFilter</strong>, na przykład te odpowiedzialne za zapytania to: </p>



<ul class="wp-block-list"><li><strong>isQueryRateLimiterEnabled</strong> &#8211; kiedy wartość ustawiona jest na <strong>true</strong> limiter jest aktywny</li><li><strong>maxQueryRequests</strong> &#8211; maksymalna liczba zapytań, które mogą być wykonywane w tym samym momencie</li><li><strong>queryWaitForSlotAllocationInMS</strong> &#8211; czas, w milisekundach, jakie wątek będzie czekał w kolejce na wykonanie. Po tym czasie Solr odrzuci wykonanie wątku i zwróci status <strong>429</strong> w odpowiedzi</li><li><strong>queryAllowSlotBorrowing</strong> &#8211; kiedy jest ustawiona na wartość <strong>true</strong> możliwe jest &#8222;wypożyczanie&#8221; slotów z innych limiterów, które mają wolne zasoby</li><li><strong>queryGuaranteedSlots</strong> &#8211; liczba slotów, które są zarezerwowane ponad te, które zostały określone przez <strong>allowedRequests</strong></li></ul>



<h2 class="wp-block-heading"><strong>Podsumowanie</strong></h2>



<p>Pomimo tego, że jest to pierwsza wersja tej funkcjonalności, wraz z Solr 9.0 dostajemy w swoje ręce dość potężne narzędzie, które na pewno będzie wspomagać uzyskanie jeszcze większej stabilności od naszych klastrów Solr. Ale już nawet z tą funkcjonalnością, będziemy mogli ograniczyć liczbę wykonywanych zapytań pozwalając na zareagowanie oraz ewentualnie zwiększenie potrzebnych zasobów. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2022/03/28/solr-9-0-rate-limits/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
