Eine Suchfunktion kann als separater Dienst mit einer anderen Verantwortung als die beiden von Ihnen genannten Dienste modelliert werden. Hier könnte der Ansatz darin bestehen, einen neuen Dienst ("Suche") zu erstellen und eine Kopie der Daten von beiden Diensten in einer Form zu speichern, die einfach zu indizieren und zu suchen ist, möglicherweise auch denormalisiert, um schnell Ergebnisse zu erzielen das gewünschte Format.
So könnten Sie zum Beispiel die ältere SQL-Datenbank mit zB mySql, den anderen Microservice mit zB MongoDB und den neuen Suchdienst mit elasticsearch mit Daten aus beiden zusammenfügen (denormalisiert), um bequemer darauf zugreifen zu können. Natürlich hängen die Details von der Art der Suche ab, die Sie durchführen müssen.
Daten aus den beiden Diensten werden am besten asynchron über einen Ereignisbus wie Kafka oder Hermes in den Suchindex übertragen, um den Durchsatz zu erhöhen und die Kopplung zwischen den Diensten zu verringern. Bei einer Änderung eines der beiden Dienste wird ein Ereignis gesendet, das den Suchdienst darüber informiert, dass auch seine Daten aktualisiert werden sollen.
Natürlich entstehen Kosten für eine zusätzliche Verzögerung zwischen Änderungen der Dienste und des Suchdienstes, aber da Mikrodienste normalerweise in verteilten Systemen verwendet werden, sind einige Verzögerungen und vorübergehende Inkonsistenzen ohnehin unvermeidbar. Ein zusätzlicher Dienst und die Verwendung von zusätzlichem Speicher für eine Kopie von Daten, die sich bereits in den beiden anderen Diensten befindet, sind ebenfalls typische Kosten für ein hoch verteiltes und skalierbares System, das Mikrodienste verwendet.