Erfahrungsbericht Kofax Kapow mit Java Multithreading
In diesem Posting geht es um Screen Scraping mit Kofax Kapow und Steuerung der Robots über Java.
Übersicht
Kofax Kapow [1] ist eine Plattform für die Informationsintegration, insbesondere von Websites und Webportalen. Mit der Software lassen sich sog. Robots erstellen, verwalten und steuern. Entsprechend programmierte Robots extrahieren Inhalte von Webseiten und speichern sie ab.
Bei dem Programm handelt es sich um eine kommerzielle Software der Firma Kofax. Die Lizenz hängt u.a. von der Anzahl der Kapow Compute Units (KCU) ab, wobei 1 KCU 5.000 Punkten entspricht. Jeder Programmierschritt eines Robots "kostet" eine bestimmte Anzahl an Punkten und die Summe der gleichzeitig benötigten Punkte je Zeiteinheit kann die vorhandene Anzahl an Punkten nicht überschreiten. Ist die benötigte Summe an Punkten größer als die lizenztechnisch erlaubte, kommt es zu Wartezeiten bei den Robots.
Die Plattform kommt als Gespann aus Online Management Console (MC), RoboServern und dem Design-Studio als Desktop Anwendung. MC und RoboServer laufen in der JVM und sind plattformunabhängig. In unserer Testumgebung betreiben wir die MC in einem eigenen Tomcat Application Server unter Linux. Auf dem Rechner laufen außerdem 2 RoboServern. Uns stehen 2 KCUs zur Verfügung, je RoboServer 1 KCU.
Für die Code Wiederverwendung bietet Kofax Kapow die Möglichkeit, sog. Snippets anzulegen. Snippets bestehen, wie Robots, aus einer Folge von Programmierschritten. Ein Snippet kann in einem Robot (oder einem anderen Snippet) als Programmierschritt verwendet werden.
Vorteile
Die Robots können einfach und bequem per Drag'n'Drop im Design Studio zusammengebaut werden. Es gibt eine große Anzahl an vordefinierten Programmierschritten, die dabei verwendet werden können. Damit lässt sich schnell ein gutes Ergebnis erzielen!
Nachteile
Um dauerhaft stabile Robots zu bauen, muss man sich mit vielen Kniffen behelfen. Die Robots werden dadurch schnell groß und das Arbeiten im Design Studio wird unübersichtlich.
Snippets bieten eine sinnvolle Erweiterung, ihr Einsatz muss aber gut durchdacht werden. Die Pflege, z. B. von einer Blacklist, verwaltet man besser mit externen Tools.
Kombination mit Java
Aufgrund der oben genannten Nachteile haben wir uns im Rahmen des Projektes "Marktbeobachtung" für die Kombination aus Kofax Kapow und Java entschieden. Unsere Prämissen waren:
- "Einfache Robots mit minimaler Programmlogik"
- "Die Logik steckt in der Java Applikation"
Kofax Kapow bietet die Möglichkeit, Robots per JSON Schnittstelle zu steuern. Zu diesem Zweck haben wir uns eine Java Anwendung gebaut, die die komplette Steuerung der Robots übernimmt und zudem über Logiken hinsichtlich Validierung und Stemming verfügt. Damit haben wir die Robots soweit möglich zu reinen Datensammlern degradiert, in der Hoffnung zukünftig nur wenig Änderungen an den Robots vornehmen zu müssen.
Falls Anpassungen erforderlich werden, z. B. Blacklist anpassen, etc, kann dies einfach in der Java Anwendung oder sogar in einer externen Textdatei im Dateisystem vorgenommen werden.
Für die Robots galt ausserdem folgende Vorgabe:
- "Indexer-Robots sammeln nur Artikel URLs"
- "Crawler-Robots sammeln Artikel Daten"
Die Java Anwendung besteht im Wesentlichen aus dem Robot-Manager, der die Threads steuert und die Blacklist verwaltet und den beiden Klassen Indexer und Crawler. Die beiden Klassen enthalten die jeweils erforderlichen Logiken, wie z. B. Validierung und Stemming.
Vergleich "Abgleich Blackliste"
Nachfolgend sieht man den Java Code für den Abgleich eines Textes mit der Blacklist.
public static boolean isNotOnBlacklist(String content, String[] blacklist) {
for (String pattern : blacklist) {
try {
if (Pattern.matches(pattern, content)) {
return false;
}
} catch (Exception e) {
return false;
}
}
return true;
}
Im Kapow Robot wären dafür mehrere Programmierschritte erforderlich, die sich aber in ein Snippet ausgliedern ließen. Der wesentliche Schritt wäre "Test Variables", wobei die Blacklist in Form von Bedingungen in einem Konfigurationsfenster gepflegt werden müsste.
Untersuchungen und Erfahrungen
Mit dem vorgestellten Konzept haben wir eine wichtige Bedingung erfüllt:
es waren in den letzten Monaten nur sehr wenige Änderungen an den Robots erforderlich. Die Robots laufen stabil und die Ergebnisse sind immer noch gut.
Durch die Kombination von Java Multithreading und dem Einsatz von zwei RoboServern auf unserem Linux Rechner erreichen wir eine gute Auslastung des Systems. Ich habe mit der Anzahl gleichzeitiger Threads experiementiert, um die optimale Auslastung des Systems zu erzielen.
Anzahl Threads | Wartezeit |
---|---|
20 | 12 |
10 | 4 |
5 | 1,5 |
Bei 5 Threads scheint das System in unserem Szenario optimal ausgelastet zu sein.
Bei 20 Threads war die Wartezeit, wie erwartet, deutlich höher und die Lizenz-Nutzung (KCU Usage) war im Durchschnitt niedriger.
Nachdem sich das System "eingependelt" hat, stieg die durchschnittliche Lizenz-Nutzung sogar noch und hielt sich minutenlang auf dem maximalen Level von 1 KCU je RoboServer.
Die Wartezeit lag im gleichen Zeitraum bei ca. 1,5 Sekunden im Durchschnitt.
Fazit
Kofax Kapow bietet großes Potential und lässt sich in vielen Bereichen schnell und effizient einsetzen. Um die Kapow-Lizenz möglichst gut auszunutzen, ist es ratsam, den Einsatz von Robots zu optimieren. Eine gut geeignete Lösung, um dieses Ziel zu erreichen, scheint Java Multithreading zu sein. Damit ist es möglich, sowohl die effektive Nutzung der Lizenz zu maximieren, als auch den Aufwand für die Pflege der Robots zu minimieren.
Links
[1] Kofax Kapow (Englisch)