K7 / cache-ovanie Solr odpovedí pre pravidlá Licenses*
rrandiak opened this issue · 4 comments
Ahoj,
v MZK sme rozbehli zbieranie metrík zo Solr java machine a všimli sme si, že na Solr chodia desaťtisíce GET requestov za minútu. Postupným hľadaním som prišiel na to, že jeden požiadavok na endpointy api/client/v7.0/items/{pid}/info
alebo api/client/v7.0/items/{pid}/info/providedByLicenses
používa 100vky GET requestov na Solr. Napríklad tento konkrétny request
curl 'https://api.kramerius.mzk.cz/search/api/client/v7.0/items/uuid:b13c3d20-b821-11ed-93bc-5ef3fcdaa9a7/info/providedByLicenses'
vo svojom behu spraví 113 requestov
172.24.5.13 - - [12/Aug/2024:15:01:36 +0000] "GET /solr/search/select?q=pid%3Auuid%5C%3Ab13c3d20-b821-11ed-93bc-5ef3fcdaa9a7&wt=xml HTTP/1.1" 200 1355
.
Pozeral som v kóde, čím to môže byť spôsobené a oba tieto endpointy využívajú túto funkciu. Očividnú chybu som tam ale nenašiel. Zároveň nechápem kde by tam mohli vznikať requesty s &wt=xml
, keďže sa tam dopytuje iba pre json odpovede.
Ostatné requesty ako
172.24.5.13 - - [12/Aug/2024:15:22:39 +0000] "GET /solr/search/select?q=pid%3Auuid%5C%3Af2938540-d1ca-11e3-bb44-5ef3fc9bb22f&wt=json HTTP/1.1" 200 2511
172.24.5.13 - - [12/Aug/2024:15:22:39 +0000] "GET /solr/search/select?q=pid%3A%28uuid%5C%3A00d46d80-f21a-11e3-b72e-005056827e52+OR+uuid%5C%3Ac91d7aec-5f31-4b4c-97cb-a69443c89479+OR+uuid%5C%3A21c726a0-1619-11e3-8f8a-005056827e52+OR+uuid%5C%3A374a03e0-f880-11e8-a5a4-005056827e52+OR+uuid%5C%3A661997e0...
172.24.7.79 - - [12/Aug/2024:15:22:38 +0000] "POST /solr/processing/update HTTP/1.1" 200 41
chodia po jednom.
Používame verziu 7.0.35 a Solr 9.2.1. Solr logy, ktoré som tu uviedol, sú defaultné logy prístupov generované Solrom. Tieto logy majú denne medzi 0.5 až 2GB, takže mi ich tu nejde uploadnúť.
Ďakujem,
Róbert Randiak, MZK
Testoval som trocha viac a zistil som, že som sa mýlil. Tento problém nie je chyba, ale možná suboptimálna implementácia.
V MZK máme 111 pravidiel pre rolu common_users
a licenciu (Licenses
alebo LicensesIPFiltered
). Zmenil som počet takýchto pravidiel, a číslo requestov sa zmenilo spolu s ním. Teda predpokladám, že sa pre každé pravidlo robí zvlášť request na Solr.
Je možné, že Solr takéto requesty cache-uje a nevyťažujú ho. Ale neviem povedať, či a ako to Solr vyťažuje a neviem to momentálne ani otestovať. Možno by bolo treba pridať cache pre takéto requesty do jadra?
edit: ešte som zabudol napísať, že sa to týka všetkých endpointoch, ktoré overujú prístup k stránke.
@r2it-git Ano je to tak. Pravidlo které kontroluje licence dává dotaz do solru a pokud je tam 111 pravidel, je to 111 dotazu. V K5 byla pro tyto případy udělaná cache. Ta držela všechny dokumenty v rámci jednoho vyhodocení . Cache "resuscitujeme" a znovu zavedeme do K7.