Mach's so einfach wie möglich
Mir ist durchaus bewusst, dass das Entwicklen von Software zum prozessieren von Daten oft eine komplizierte und knifflige Angelegenheit ist. Dennoch finde ich auch hier sollte das KISS-Prinzip gelten. Klar, manchmal lässt eine solche Lösung vielleicht etwas Eleganz vermissen. Oder aber sie ist sehr spezifisch für einen Anwendungsfall und lässt sich nicht besonders gut erweitern. Hier sollte man sich aber im vorhinein überlegen wie wahrscheinlich es überhaupt ist, diese Teile in einem anderen Umfeld benutzen zu müssen / wollen. Oft sind spezialisierte Lösungen doch deutlich robuster als Komponenten, die "over-engineered" sind und für alles eine Lösung parat haben wollen.
Wenn z.B. Daten in Verzeichnis A landen, mittels einer Komponente bearbeitet und von dieser in Verzeichnis B abgelegt werden. Aus B werden die Daten über einen weiteren Schritt an einen Indexer übertragen. Natürlich ist es denkbar, dass der Indexer auf einem anderen Host läuft. Trotzdem sollte man mit den Parametern wie CPU-Kerne, RAM, etc. und der zu erwartenden Anzahl von zu verarbeitenden Daten entscheiden wie wahrscheinlich dieser Fall ist. Erst danach sollte man ggf. über eine Kommunikation zu einem Indexer-Host nachdenken. Ganz sicher sollte man keine netcat zu xinetd-pipe aufbauen. Erst recht nicht, wenn eine Verteilung der Systeme nur theoretischer Natur ist, aber darauf basieren und auf localhost zu verbinden.
Auch sollte imho mit so wenig schwarzer Magie wie möglich gearbeitet werden. Natürlich kann man mit allen möglichen Sprachen tolle - und im Augenblick - elegante Konstrukte bauen. Doch nicht nur, dass andere Menschen dadurch vor eine extreme Hürde gestellt werden und sie die Komponente verstehen müssen, weil der Prozess plötzlich einfach mitten drin irgendwo hängt. Man sollte ich vielleicht einfach mal 2 Monate in die Zukunft versetzen und sich überlegen, ob man den Code noch verstehen würde.