Frage

Kurzversion:

Wir haben mehrere Teams jeweils entwickeln mehrere Anwendungen. Sie müssen einige Daten teilen. Sollen wir diese Anwendungen in eine größeren kombinieren Datenintegration zu vereinfachen oder sollten wir bewahren Sie diese getrennt und einigen Datenaustausch / Caching-Mechanismus verwenden?

Längere Version:

Wir haben eine Reihe von Mannschaften jede Arbeit an einer Reihe von Anwendungen. Viele dieser Anwendungen müssen zum Austausch von Daten. Eine Möglichkeit ist, asynchrones Messaging zu verwenden ein System von Rekord zu haben - wo alle Schreibvorgänge auftreten - und zu senden, dass Daten an alle anderen Systeme, die es brauchen. Diese Systeme würden speichern die Bits von Daten, die sie in einem Lese müssen nur Cache (in ihrer Datenbank).

Der Vorteil dieses Layouts ist, dass ein System sprengen kann, ohne die anderen Systeme zu beeinträchtigen. Es macht es auch leichter für die einzelne Teams der Arbeit an ihren individuellen Anwendungen. Es macht Planung von Releases einfacher, kleinere Codebasis zu navigieren, etc.

Ein andere Möglichkeit ist, zu entscheiden, dass diese Aktien zu viele Daten apps, und dass der Kopf aus der Messaging / Caching ist zu hoch. In diesem Fall könnten Sie sich entscheiden, diese drei Anwendungen in eine größere App zu verschmelzen. Sie würden dann das Datenintegrationsproblem vollständig eliminieren, da Sie die Integration in den Service / Transaktionsschicht des einzelnen Moduls App bewegen würden. Mit anderen Worten, sein MyGiantApp könnte noch split (Gläser, app Kontexte, usw.) in verschiedenen Modulen, die über Transactional Services API des anderen Moduls miteinander sprechen. In unserem Fall würden wir Frühling verwenden fast wie  ein Service-Bus, mit Methodenaufruf anstelle von Web-Service oder Asynchron-Messaging.

Während diese Datenintegration vereinfacht zweite Option, erschwert es Entwicklung. Jetzt haben X-Teams arbeiten auf der gleichen Code-Basis. Dies kann durch Zweig, die kontinuierliche Integration und separate Bibliotheken / Kontexte etwas gelockert werden, usw., aber am Ende des Tages ist es immer noch ein beklagenswerter Artefakt sind wir alle Gebäude. Auch jetzt die Fehler von einem Team können leichter auf die gesamte App verbreiten; eine App, den Haufen ausblasen kann alles nach unten nehmen.

Wie würden Sie entscheiden, wann Lösung verwenden # 1 und verwenden, wenn Lösung # 2?

War es hilfreich?

Lösung

Ich habe dies in einer separaten Antwort als sein Fokus auf meinen ersten ganz anders.

Es klingt wie Sie die Dinge durchdacht haben und haben ein gutes Verständnis sowohl Ihr Problem und Lösung. Lassen Sie mich einen anderen Riss haben an (was ich denke, ist), um Ihre zentrale Frage ...

  

Wie würden Sie entscheiden ...

Gehen Sie zurück zu den Wurzeln. Mit dem, was Sie wissen, um wahr zu sein
Haben Sie einen Whiteboard-Workshop mit relevanten Personen aus Ihrem Team (en), in dem Sie müssen:

  • eine Liste der relevanten Beschränkungen erstellen.
  • Liste Ergebnisse, die Sie nicht (einzige große unmanagable Anwendung, usw.) werden soll.
  • Auch zu empfehlen, aber vielleicht nicht unbedingt notwendig. Risiken erkennen und mögliche Auswirkungen (im Rahmen der Einschränkungen oder unerwünschter Ergebnisse)
  • Liste der Ergebnisse, die Sie möchten (gemeinsame Nutzung von Daten, einfache Bereitstellung, usw.).
  • priorisieren das wünschen und undesireable Ergebnisse (sehr wichtig), und seien Sie nicht überrascht, wenn sie im Verlauf der Debatte ändern.

Diese Informationen sollten ausreichen, um zu beginnen, einen Rahmen für die Diskussion und decison Herstellung zu etablieren.

Es gibt auch einige zusätzliche Dinge, die Sie können dieses Workshops tun voraus (oder als Teil davon auf die politischen und sozialen Dynamik von Ihrer Situation).

  • Identifizieren Sie die Ziele des Systems - sowohl in einem „Geschäft“ Sinn und eine „Architektur“ Sinn. . (Hinweis: die beide sollten ausrichten - oder zumindest nicht in Konflikt)
  • Wenn es eine gut definierte Vision für das System oder Ihr Unternehmen, dass sollte Hilfe (aber bedenken Sie, dass diese nicht immer vorhanden ist, und gute ist noch seltener).
  • siehe Business / Strategiepläne für die Systeme auf Ihre Arbeit - und betrachten den Markt, Trends usw. Was denken Sie wahrscheinlich auf die Anwendungen in der Zukunft geschehen ist? Vordenken architektonisch nicht die gleiche wie YAGNI an einem Code-Ebene und eine sorgfältige Prüfung der Zukunft kann decsions beeinflussen Sie jetzt machen.

Andere Tipps

Hallo - nicht sicher, ob ich zu verdecken die genauen Punkte, die Sie wollen beantwortet - aber es ist ein Anfang; wenn Sie fragen zur Klärung wollen, und ich werde meine Antwort entsprechend aktualisieren.

Im Hinblick auf die Datenmanagement Sie vielleicht denken beginnen entlang Master Data Management Linien. Der erste Gedanke, dass Sprünge in dem Sinne, dass Sie nicht wollen, inkonsistent Referenzdaten ; dies würde vorschlagen, dass Sie eine einzige gemeinsame Instanz der Daten verwenden - alternativ können Sie mehrere Kopien haben die Verwaltung und Depot Prozesse unter der Annahme, dass um Daten kristallklar

.

Im Hinblick auf die Integration , hängt Wiederverwendung von den nicht-funktionalen Anforderungen der verschiedenen Systeme. Ein einzelner Shared Service macht es einfach, die Daten zu verwalten (in, dass es nur eine einzige Kopie zu befürchten), aber es bedeutet, dass es ein Flaschenhals werden kann; weiter mehr das „schwächste Glied in der Kette“ Regel gilt - was ist die Wirkung, wenn der Shared Service geht

Mögliche Lösung Optionen

Es ist schwer zu wissen, was ohne weitere Informationen zu recommened, aber meine Gedanken sind:

  • Halten Sie Ihre drei Anwendungen zu trennen.
  • Verwenden Sie einen einzigen gemeinsamen Dienst für gemeinsam genutzte Daten.
  • Zugriff auf die gemeinsam genutzten Daten können über einen „Dienst“ sein -. Dies würde Ihnen die beste Kontrolle und Optionen
  • Der gemeinsame Dienst könnte als eine einzelne Instanz existieren - oder -. Sie könnten mutliple Instanzen des Dienstes eingesetzt (aber nur eine Instanz der DB) haben

Der entscheidende Punkt ist tht Sie die anderen Anwendungen ohne Beeinträchtigung zu abstrahieren aus dem gemeinsamen Dienst in der Lage sein sollten -. Specifcially, sollten Sie nicht zur Herstellung eines uber app denken

Eine weitere Sache - Denken an es ist ein „Service“ in einem Geschäftssinn preclude mit nicht mehrere Möglichkeiten, technisch auszusetzen und konsumieren es.

Haben Sie sich Gedanken über Gleichzeitigkeit, Transaktionen, ...

Ich weiß nicht, Ihre Anforderungen, aber es fühlt sich an wie es Zeit, dieses Problem, den richtigen Weg zu bewältigen und mit einem zentralen „Repository“ Ihre freigegebenen Daten zu verwalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top