2009-07-14 18 views
0

Ich bin dabei, 4 verschiedene Software-Komponenten zu refactorieren, die ziemlich genau dasselbe in einen einzigen Dienst tun (kein Web-Dienst - notwendig oder sogar wahrscheinlich). 3 sind in C++ geschrieben, während das letzte und wichtigste in Java geschrieben ist. Der Rest des Systems ist in Java geschrieben und deshalb werde ich den C++ - Code nicht neu gestalten und JNI verwenden, insbesondere da die derzeit in C++ geschriebenen Komponenten planmäßig durch Java-Komponenten in absehbarer Zukunft ersetzt werden.Sollte ein Software-Service vollständig eigenständig sein oder kann/sollte er Teil einer größeren Komponente sein?

Die Komponente, die derzeit in Java implementiert ist, ist eigentlich eine Unterkomponente einer größeren Komponente. Wenn die größere/Umhüllungskomponente die Unterkomponente verwenden möchte (die zu einem Dienst refaktorisiert wird), ruft sie einfach intra-process Java-Methoden auf. Wenn ich diese Unterkomponente in einen separaten Dienst umgestalte, verliert die ursprüngliche Umhüllungskomponente den Vorteil, den sie derzeit beim Aufruf der Prozessmethode hat.

Sollte ich dann einen Thread der Original/Wrapping-Komponente hinzufügen, um als das Service-Gateway zu fungieren, oder sollte ich den Code vollständig in einen eigenständigen Dienst umgestalten.

Ich hoffe, dass ich ...

Antwort

0

Im Allgemeinen hinreichend klar gewesen, braucht es nicht eine einzige Instanz von „Service“ und Instanzen müssen nicht remote aufgerufen werden. Eine Co-Deployment-Strategie aus Gründen der Leistung oder Verfügbarkeit ist durchaus sinnvoll. Sie haben viele Vorteile, einfach durch eine einzige Implementierung der Logik.

Wenn Sie jedoch bereits eine Service-Infrastruktur haben, wo die Service Provider vielleicht auf eine bestimmte Weise verwaltet werden, ist es wahrscheinlich wünschenswert, konsistent zu sein.

Sie müssen also die Auswirkungen der Trennung verstehen, sind diese Vorteile der In-Prozess-Aktivierung in diesem Fall signifikant? Sie müssen auch darüber nachdenken, ob die Nutzung des In-Process-Service als Remote-Call-Service für andere Clients die Leistung des bestehenden Systems beeinträchtigt.

Mein Bauchgefühl: ziehe den Code in eine Komponente, die sowohl lokal als auch remote aufgerufen werden kann (in meiner Welt könnte das mit einem einfachen stateless Session EJB geschehen) und stelle ihn zweimal bereit. Einmal zusammen mit dem ursprünglichen System gefunden. Einmal als Service. Opfere absolute Konsistenz für minimale Störung.

Verwandte Themen