Context
Lieber Knot Resolver Benutzer, ich habe eine module that hooks into Knot'sfinish
Phase,Knoten Resolver: paralelism und Parallelität in Module
static knot_layer_api_t _layer = {
.finish = &collect,
};
der Zweck der collect Funktion static int collect(knot_layer_t *ctx) {
ist eine externe oraculum über ein fragen, REST API, ob eine bestimmte Domain zur Aufnahme einer Malware- oder Phishing-Kampagne aufgeführt ist und ob sie aufgelöst oder versenkt werden sollte.
Es funktioniert gut, solange Knot Resolver nicht mit Hunderten von gleichzeitigen DNS-Anforderungen ausgerichtet ist. Wenn dies passiert, beginnen die Clients aufgrund der Tatsache, dass die API-Reaktionszeit des Orakulums schwankt und manchmal bis zu mehreren hundert Millisekunden reicht, sehr lange Antwortzeiten von Knot Resolver, die das festgelegte harte Zeitlimit weit überschreiten Kommunikation zu Oraculums API.
Mögliches Problem
Ich denke, dass das scaling-with-processes tatsächlich das Modul sehr ineffizient implementiert macht, da Abfragen von Modul eins nach dem anderen (in einem bestimmten Prozess) der Warteschlange und verarbeitet werden. Das heißt, wenn n
Abfragen fast-Treffer Oraculum API-Timeout-Limit t
, der Client , die seine n+1
Abfrage an diesen bestimmten Kresd-Prozess gesendet hat, wird eine sehr lange Reaktionszeit von akkumulierten wahrnehmen.
Oder würde es? Bin ich komplett ausgeschaltet?
Als ich ähnliche Funktionalität in GoDNS mit goroutines Prototyping, GoDNS-Server (auf Kosten der scheußlichen CPU-Nutzung) ließ zahlreiche Anfragen der DNS-Clients mit dem Orakulum sprechen und an Clients "gleichzeitig" zurück.
Frage
- Ist es O.K. Apache Portable Runtime-Threading oder OpenMP-Threading zu verwenden und die Reaktionszeit der API im Modul zu verbergen? Ist es nicht ein komplettes Knot Resolver Antipattern?
- Ich Caching Oraculum API-Antworten in einem einfachen im Speicher ephemeren LRU-Cache, der in jedem Kresd-Prozess befindet. Wäre es möglich, stattdessen Kresds eigenen MVCC-Cache für meine willkürliche Struktur zu verwenden?
- Ist es möglich, dass das Problem anderswo ist, zum Beispiel, dass Knot Resolver keine Sperrverzögerung in
finish
Ebene erwartet und somit einige Netzwerkwarteschlange gefüllt ist und nachfolgende DNS-Abfragen abgelehnt und/oder untragbar verzögert werden?
Dank für Zeiger (pun intended) hier