ceskaexpedice / kramerius

System Kramerius
GNU General Public License v3.0
45 stars 26 forks source link

K7 / cache-ovanie Solr odpovedí pre pravidlá Licenses* #1074

Open rrandiak opened 2 months ago

rrandiak commented 2 months ago

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

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

rrandiak commented 2 months ago

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.

pavel-stastny commented 2 months ago

@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.