Vorteile und Herausforderungen
Die Implementierung einer mehrmandantenfähigen Umgebung ist mit vielen Herausforderungen verbunden.
Dazu gehören:
- zusätzliche technische Komplexität
- höherer Entwicklungsaufwand
- organisationsübergreifende Abhängigkeiten von gemeinsam genutzten Ressourcen
- höhere betriebliche Komplexität
Trotz der Herausforderungen bietet die Ausführung einer mehrmandantenfähigen Anwendung Vorteile, z. B.:
- geringere Hardware-Kosten
- kürzere Time-to-Market für zukünftige Sites
- geringere Implementierungskosten für zukünftige Mandanten
- standardmäßige Architektur- und Entwicklungsverfahren im gesamten Unternehmen
- eine gemeinsame Code-Basis
Wenn das Unternehmen eine echte Mehrmandantenfähigkeit erfordert (ohne Kenntnis anderer Mandanten und ohne gemeinsamen Code, gemeinsamen Inhalt oder gemeinsame Autorinnen und Autoren), sind separate Autoreninstanzen die einzige praktikable Option. Der Gesamtanstieg der Entwicklungsbemühungen sollte mit den Einsparungen bei Infrastruktur- und Lizenzkosten verglichen werden, um festzustellen, ob dieser Ansatz am besten geeignet ist.
Entwicklungstechniken
Verwalten von Abhängigkeiten
Bei der Verwaltung von Maven-Projektabhängigkeiten ist es wichtig, dass alle Teams dieselbe Version eines bestimmten OSGi-Bundles auf dem Server verwenden. Folgendes Beispiel zeigt, was bei einer unsachgemäßen Verwaltung von Maven-Projekten schiefgehen kann:
Projekt A hängt von Version 1.0 der Bibliothek „foo“ ab. Die foo-Version 1.0 ist in die entsprechende Bereitstellung auf dem Server eingebettet. Projekt B hängt von Version 1.1 der foo-Bibliothek ab. Die foo-Version 1.1 ist in die entsprechende Implementierung eingebettet.
Außerdem nehmen wir an, dass sich in dieser Bibliothek eine API zwischen Version 1.0 und Version 1.1 geändert hat. An diesem Punkt wird eines dieser beiden Projekte nicht mehr ordnungsgemäß funktionieren.
Um dieses Problem zu lösen, empfehlen wir, alle Maven-Projekte zu untergeordneten Elementen eines übergeordneten Reaktorprojekts zu machen. Dieses Reaktorprojekt dient zwei Zwecken: Es ermöglicht den Aufbau und die Bereitstellung aller Projekte, falls gewünscht, und enthält die Abhängigkeitsdeklarationen für alle untergeordneten Projekte. Das übergeordnete Projekt definiert die Abhängigkeiten und ihre Versionen, während die untergeordneten Projekte nur die von ihnen benötigten Abhängigkeiten deklarieren und die Version vom übergeordneten Projekt übernehmen.
Wenn in diesem Szenario das Team, das an Projekt B arbeitet, Funktionen in der foo-Version 1.1 benötigt, wird in der Entwicklungsumgebung schnell deutlich, dass diese Änderung zu einer Beschädigung von Projekt A führt. An dieser Stelle können die Teams diese Änderung besprechen und entweder Projekt A mit der neuen Version kompatibel machen oder nach einer alternativen Lösung für Projekt B suchen.
Dies bedeutet nicht, dass die Teams diese Abhängigkeit nicht mehr teilen müssen. Probleme werden lediglich schnell und frühzeitig hervorgehoben, damit die Teams alle Risiken diskutieren und sich auf eine Lösung einigen können.