Compute Resource Consolidation Pattern
Dieses Pattern kann verwendet werden, um Berechnungen mehrerer Operationen oder Aufgaben in einer zusammenhängenden Einheit durchzuführen. Hierdurch kann die Ressourcennutzung optimiert und die Kosten gesenkt werden.
Hintergründe und Probleme
Eine Cloud Anwendung enthält häufig viele Operationen und Aufgaben, welche meist standartmäßig in getrennten Einheiten, beispielsweise auf verschieden virtuellen Maschinen, verarbeitet werden. Dieses Konzept verursacht eine große Menge an verarbeitenden Einheiten, welche das System sehr komplex machen. Außerdem verursachen diese Einheiten Kosten, auch wenn sie inaktiv oder unausgelastet sind. Ein weiteres Problem sind die erschwerten Kommunikationswege, welche durch die Aufteilungen entstehen.
Lösung
Um den genannten Problemen entgegenzuwirken, können mehrere Aufgaben und Operationen in eine verarbeitende Einheit zusammengelegt werden. Diese müssen dafür zuallererst gruppiert werden. Eine verbreitete Möglichkeit ist es zu prüfen, welche Aufgaben und Operationen ähnliche Anforderungen und Verarbeitungszeiten besitzen. Zusammengefügt können diese Einheiten je nach Auslastung skalieren und somit mehr Rechenleistung, in Form von weiteren berechnenden Einheiten, hinzufügen oder bei geringer bzw. gar keiner Nutzung Rechenleistung abtreten. Wichtig ist es jedoch darauf zu achten, wie die Aufgaben und Operationen, welche gruppiert werden sollen während der Nutzung skalieren. Werden beispielsweise Operationen gruppiert, welche teilweise viele neue Einheiten für die Verarbeitung benötigen und der andere Teil nur auf bestimmte Ereignisse wartet, könnten unnötigerweise bei Ressourcenanforderungen auch dem Warteprozess erhöhte Ressourcen zugeschrieben werden, obwohl diese nicht benötigt werden. Verarbeitende Einheiten können unterschiedliche Rechenleistungen wiederspiegeln. Daher sollte darauf geachtet werden, dass Einheiten mit hohen Rechenleistungen, welche dementsprechend teurer sind, eine durchgängige und nicht zu schwache Auslastung haben. Daher sollten Operationen und Aufgaben welche viel Leistung in kleinen Schüben benötigen zusammengelegt und einer leistungsstarken Einheit zugewiesen werden. Dagegen sollten langwierige und viel Ressourcen benötigende Aufgaben und Operationen nicht zusammengefasst werden, da es zu einer Überlastung der Einheit führen kann. Eine kontinuierliche Analyse der Gruppierungen hilft dabei diese optimal anzuordnen.
Berücksichtigungen
Bei der Implementierung des Patterns sollten unbedingt vorher bestimmte Aspekte berücksichtigt werden. Hierzu zählt wie bereits beschrieben die Entscheidung der Gruppierung anhand ähnlicher Skalierungsanforderungen und Verarbeitungszeiten. Jedoch sollten Operationen mit hohen Ressourcenanforderungen nicht zusammen in eine Einheit gruppiert werden. Ebenfalls sollte darauf geachtet werden, dass wenn eine Operation oder Aufgabe regelmäßig gewartet wird und dies ein Neuaufsetzen der verarbeitenden Einheit erfordert, alle gruppierten Operation der Einheit ebenfalls gestoppt und neu geladen werden müssen. Hinzukommend kann es sein, dass die Operationen sich denselben Kontext in der Einheit teilen und somit auf Ressourcen des anderen zugreifen können. Die hierdurch mögliche Sicherheitslücke weitet sich mit der Anzahl der sich teilenden Operationen in einer Einheit aus. Ebenso können Fehler die von einer Operation ausgelöst wurden, das Verhalten anderer Operationen in derselben Einheit einschränken. Die Komplexität steigt durch das Gruppieren von Operationen zu einer Einheit, was die Wartbarkeit und Testbarkeit verschlechtert. Außerdem ist zu berücksichtigen, dass die Cloud Infrastruktur regelmäßige Aufräumarbeiten tätigt. Einheiten mit mehreren lang laufenden Operationen sollten daher so konfiguriert werden, dass diese nicht vorzeitig unterbrochen werden. Beim Entwickeln einer Operation sollte darauf geachtet werden, diese so zu entwerfen, dass eine Änderung der Umgebung keine Auswirkung auf die Operation hat und weiterhin funktioniert.
Anwendungsfälle
Dieses Pattern sollte für wenig bzw. regelmäßig keine Leistung benötigende Operationen und Aufgaben verwendet werden, welche in einer eigenen Einheit nicht Kosteneffektiv sind. Sobald eine Operation Ausfallsicher sein soll oder strikten Sicherheitsanforderungen entsprechen muss ist von einer Anwendung des Pattern abzusehen und eine eigene Einheit zu verwenden.