-
HINTERGRUND
-
Die vorliegenden Ausführungsformen beziehen sich auf Anwendungsmodernisierung, z.B. Zerlegen einer monolithischen Anwendung in Mikrodienste und Migrieren in eine Cloud-Umgebung. Die Ausführungsformen sind insbesondere auf Ermitteln und Priorisieren einer Abfolge von Refactoring-Operationen ausgerichtet, die auf Ermitteln von Mikrodiensten abzielen.
-
Bei der Anwendungsmodernisierung handelt es sich um einen Prozess, bei dem ein Refactoring einer monolithischen Anwendung in eigenständige Mikrodienste stattfindet. Die Diskussion über Anwendungsmodernisierung konzentriert sich im Wesentlichen auf monolithische lokale Anwendungen. Ein Aspekt der Modernisierung ist das Verlagern einer monolithischen Anwendung von einer lokalen Infrastruktur in eine gemeinsam genutzte entfernt angeordnete Infrastruktur, die auch als „Cloud“ bezeichnet wird. Bei einem anderen Aspekt geht es um das Modernisieren der monolithischen Anwendungen in eine Mikrodienste-Architektur. Im Allgemeinen handelt es sich bei Mikrodiensten um einen architektonischen Ansatz, der zumeist in der Cloud angesiedelt ist und bei dem eine einzelne Anwendung aus mehreren lose verbundenen und unabhängig implementierbaren kleineren Komponenten oder Diensten besteht, die als Mikrodienste bezeichnet werden. Die Mikrodienste verfügen in der Regel (aber nicht unbedingt) über einen eigenen Stack, einschließlich einer Datenbank und eines Datenmodells, tauschen Daten über eine Kombination von REST-(REST = Representational State Transfer)-Anwendungsprogrammierschnittstellen (APIs) miteinander aus und sind nach Geschäftsfunktionen organisiert.
-
Refactoring ist definiert als ein Prozess, bei dem Software so verändert wird, dass die Änderungen das externe Verhalten des Codes nicht verändern, jedoch die interne Codestruktur verbessern. Konkret geht es beim Refactoring darum, die Struktur des Codes zu verbessern, nachdem der Code geschrieben wurde. Einige dieser Aspekte zum Verbessern der Code-Struktur umfassen Entfernen von Duplizierung, Verbessern der Datenübertragung, Vereinfachen der Struktur und Hinzufügen von Flexibilität. Refactoring und insbesondere das Ermitteln von Mikrodiensten sind mit einigen Problemen verbunden. Die Qualität der ermittelten Mikrodienst-Kandidaten hängt weitgehend von der Struktur des bestehenden Codes ab, z.B. der monolithischen Anwendung. Entsprechend besteht Bedarf an einer qualitativen Verbesserung des Refactorings und des Ermittelns von Refactoring-Operationen.
-
KURZDARSTELLUNG
-
Die Ausführungsformen umfassen ein Computersystem, ein Computerprogrammprodukt und ein durch einen Computer implementiertes Verfahren zum Trainieren eines Modells für maschinelles Lernen (ML) und Einsetzen des ML-Modells, um Konformitätsanforderungen entsprechend einem oder mehreren Mikrodiensten zu ermitteln.
-
Bei einem Aspekt wird ein Computersystem mit einem Prozessor bereitgestellt, der funktionsmäßig mit einem Speicher verbunden ist, mit Tools, die funktionsmäßig mit dem Prozessor verbunden sind, einschließlich eines genetischen Managers, eines Bewertungsmanagers und eines Klassifizierers. Der genetische Manager ist so konfiguriert, dass er einen genetischen Algorithmus auf eine oder mehrere Eltern-Refactoring-Operationen anwendet, die aus einem anfänglich ermittelten Satz von Refactoring-Operationen für den Quellcode ausgewählt wurden. Der angewandte genetische Algorithmus erzeugt eine Nachkommenpopulation der Refactoring-Operationen als Teilsatz der Eltern-Refactoring-Operationen. Der Bewertungsmanager, der funktionsmäßig mit dem genetischen Manager verbunden ist, ist so konfiguriert, dass er einen Eignungsgrad für jede Refactoring-Operation im Teilsatz misst. Das Messen des Eignungsgrads umfasst Sammeln von Laufzeitspuren des Quellcodes und Anwenden der gesammelten Laufzeitspuren auf den Teilsatz. Der Klassifizierer ist so konfiguriert, dass er Refactoring-Operationen innerhalb des Teilsatzes auf der Grundlage eines entsprechenden gemessenen Eignungsgrads priorisiert. Als Reaktion auf das Priorisieren wendet der Prozessor selektiv eine oder mehrere der Refactoring-Operationen aus dem Teilsatz auf den Quellcode an, um einen oder mehrere Mikrodienst-Kandidaten zu erzeugen.
-
Bei einem anderen Aspekt wird ein Computerprogrammprodukt mit einem durch einen Computer lesbaren Speichermedium mit darauf enthaltenem Programmcode bereitgestellt. Programmcode, der von einem Prozessor ausführbar ist, wird bereitgestellt, um einen genetischen Algorithmus auf eine oder mehrere Eltern-Refactoring-Operationen anzuwenden, die aus einem anfänglich ermittelten Satz von Refactoring-Operationen für den Quellcode ausgewählt werden. Der angewandte genetische Algorithmus erzeugt eine Nachkommenpopulation der Refactoring-Operationen als Teilsatz der Eltern-Refactoring-Operationen. Der Programmcode misst einen Eignungsgrad jeder Refactoring-Operation im Teilsatz. Das Messen des Eignungsgrads umfasst Sammeln von Laufzeitspuren des Quellcodes und Anwenden der gesammelten Laufzeitspuren auf den Teilsatz. Der Programmcode priorisiert Refactoring-Operationen innerhalb des Teilsatzes auf der Grundlage eines entsprechenden gemessenen Eignungsgrads. Als Reaktion auf das Priorisieren wendet der Programmcode selektiv eine oder mehrere der Refactoring-Operationen aus dem Teilsatz auf den Quellcode an, um einen oder mehrere Mikrodienst-Kandidaten zu erzeugen.
-
Bei einem weiteren Aspekt wird ein genetischer Algorithmus auf eine oder mehrere Eltern-Refactoring-Operationen angewendet, die aus einem anfänglich ermittelten Satz von Refactoring-Operationen für den Quellcode ausgewählt werden. Der angewandte genetische Algorithmus erzeugt eine Nachkommenpopulation der Refactoring-Operationen als Teilsatz der Eltern-Refactoring-Operationen. Für jede Refactoring-Operation im Teilsatz wird ein Eignungsgrad gemessen. Das Messen des Eignungsgrads umfasst Sammeln von Laufzeitspuren des Quellcodes und Anwenden der gesammelten Laufzeitspuren auf den Teilsatz. Die Refactoring-Operationen im Teilsatz werden auf der Grundlage eines entsprechenden gemessenen Eignungsgrads priorisiert. Als Reaktion auf das Priorisieren werden eine oder mehrere der Refactoring-Operationen aus dem Teilsatz selektiv auf den Quellcode angewandt, um einen oder mehrere Mikrodienst-Kandidaten zu erzeugen.
-
Diese und andere Aspekte, Merkmale und Vorteile ergeben sich anhand der folgenden ausführlichen Beschreibung beispielhafter Ausführungsformen, die in Verbindung mit den beigefügten Zeichnungen zu lesen ist.
-
Figurenliste
-
Die Zeichnungen, auf die hier Bezug genommen wird, sind Teil der Beschreibung und sind in diese einbezogen. Die in den Zeichnungen gezeigten Merkmale dienen nur zur Veranschaulichung einiger Ausführungsformen und nicht aller Ausführungsformen, sofern nicht ausdrücklich anders angegeben.
- 1 zeigt ein Systemschaubild, das ein Computersystem veranschaulicht, das einen oder mehrere entsprechende Mikrodienst-Kandidaten für Quellcode erzeugt.
- 2 zeigt ein Blockschaubild, das die in 1 dargestellten und beschriebenen Tools veranschaulicht sowie deren zugehörige Anwendungsprogrammierschnittstellen.
- 3 zeigt einen Ablaufplan, der einen Prozess zum Quellcode-Modernisieren veranschaulicht, der Analysieren des Quellcodes umfasst, um einen Satz von priorisierten Refactoring-Operationen zu ermitteln, bevor Mikrodienste ermittelt werden.
- 4 zeigt ein Blockschaubild, das ein Beispiel für ein Computersystem/einen Server eines Cloud-gestützten Unterstützungssystems veranschaulicht, um das System und die Prozesse zu implementieren, die vorstehend in Bezug auf die 1 bis 3 beschrieben werden.
- 5 zeigt ein Blockschaubild, das eine Cloud-Computerumgebung veranschaulicht.
- 6 zeigt ein Blockschaubild, das einen Satz von funktionalen Abstraktionsmodellschichten veranschaulicht, die von der Cloud-Computing-Umgebung bereitgestellt werden.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Es versteht sich, dass die Komponenten der vorliegenden Ausführungsformen, wie sie in den Figuren hierin allgemein beschrieben und veranschaulicht sind, in vielen verschiedenen Konfigurationen angeordnet und ausgelegt sein können. Die folgende ausführliche Beschreibung der Ausführungsformen des Computersystems, des Verfahrens und des Computerprogrammprodukts der vorliegenden Ausführungsformen, wie in den Figuren dargestellt, soll daher den Anwendungsbereich der beanspruchten Ausführungsformen nicht einschränken, sondern stellt lediglich ausgewählte Ausführungsformen dar.
-
Wenn in dieser Beschreibung von „einer ausgewählten Ausführungsform“ oder „einer Ausführungsform“ die Rede ist, bedeutet dies, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, die im Zusammenhang mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform enthalten ist. Die an verschiedenen Stellen in der Beschreibung vorkommende Wendung „eine ausgewählte Ausführungsform“ oder „in einer Ausführungsform“ brauchen sich daher nicht unbedingt jeweils auf ein und dieselbe Ausführungsform zu beziehen. Die verschiedenen Ausführungsformen können miteinander kombiniert werden.
-
Die dargestellten Ausführungsformen werden am besten durch Verweis auf die Zeichnungen verstanden, in denen gleiche Teile durchgängig mit gleichen Ziffern bezeichnet sind. Die folgende Beschreibung ist nur als Beispiel gedacht und veranschaulicht lediglich bestimmte ausgewählte Ausführungsformen von Einheiten, Systemen und Prozessen, die mit den hier beanspruchten Ausführungsformen übereinstimmen.
-
Die hier beschriebenen Ausführungsformen umfassen Ermitteln und Priorisieren von Refactoring-Operationen und in einer beispielhaften Ausführungsform Priorisieren einer Abfolge von Refactoring-Operationen. Das Priorisieren zielt darauf ab, qualitativ hochwertige Mikrodienste mit geringen Betriebskosten und hoher funktionaler Kohäsion bereitzustellen, insbesondere im Zusammenhang mit einem Modernisierungsprozess, z.B. der Konvertierung einer monolithischen lokalen (oder nichtlokalen) Anwendung in eine Cloud-Umgebung. In der Technik versteht man unter einer monolithischen Anwendung eine eigenständige, von anderen Anwendungen unabhängige Anwendung. Mikrodienste oder eine Mikrodienst-Architektur beziehen/bezieht sich in der Regel auf eine Computerumgebung, in der eine Anwendung als eine Reihe von modularen Komponenten oder Diensten auf der Grundlage von Funktionsdefinitionen aufgebaut ist, die jeweils einer Funktionsdefinition entsprechen und jeweils in einem eigenen Prozess laufen und über einfache Mechanismen Daten austauschen. In bestimmten Mikrodienst-Architekturen werden Daten außerhalb des Dienstes gespeichert, sodass der Dienst als solcher zustandslos ist. Die Dienste oder Komponenten werden im Allgemeinen als „atomare Dienste“ bezeichnet. Bei jedem atomaren Dienst handelt es sich um eine einfache Komponente, um unabhängig einen modularen Dienst durchzuführen. Ein atomarer Dienst kann zum Beispiel Schlüsselwörter empfangen und kombinieren, einen Algorithmus verarbeiten oder eine Entscheidung auf der Grundlage des Ergebnisses der Algorithmusverarbeitung treffen. Jedes Modul unterstützt eine bestimmte Aufgabe und verwendet eine definierte Schnittstelle, z.B. eine Anwendungsprogrammierschnittstelle (API), um mit anderen Diensten Daten auszutauschen. Die Mikrodienst-Architektur unterstützt und ermöglicht Skalierbarkeit in einem hybriden Netzwerk.
-
Mit Bezug auf 1 wird eine schematische Darstellung eines Datenverarbeitungssystems mit künstlicher Intelligenz (100) gezeigt. Wie dargestellt, wird ein Server (110) bereitgestellt, der mit einer Mehrzahl von Datenverarbeitungseinheiten (180), (182), (184), (186), (188) und (190) über eine Netzwerkverbindung (105) Daten austauscht. Der Server (110) ist mit einer Verarbeitungseinheit, z.B. dem Prozessor (112), konfiguriert, die über einen Bus (114) mit dem Speicher (116) Daten austauscht. Der Server (110) ist mit einer Wissensmaschine (150) dargestellt, die mit einem oder mehreren Tools konfiguriert ist, um Refactoring-Operationen im Quellcode zu ermitteln und einen oder mehrere entsprechende Mikrodienst-Kandidaten zu erzeugen. Wie dargestellt, kann der Server (110) den einen oder die mehreren erzeugten Mikrodienst-Kandidaten über das Netzwerk (105) auf eine oder mehrere der Datenverarbeitungseinheiten (180), (182), (184), (186), (188) und (190) anwenden. Insbesondere tauschen die Datenverarbeitungseinheiten (180), (182), (184), (186), (188) und (190) untereinander und mit anderen Einheiten oder Komponenten über eine oder mehrere drahtgebundene und/oder drahtlose Datenübertragungsverbindungen Daten aus, wobei jede Datenübertragungsverbindung eine(n) oder mehrere Leitungen, Router, Switches, Sender, Empfänger oder dergleichen aufweisen kann. In dieser vernetzten Anordnung ermöglichen der Server (110) und die Netzwerkverbindung (105) die Datenübertragung des Quellcodes, das Priorisieren von Refactoring-Operationen und das Erzeugen von Mikrodiensten. Andere Ausführungsformen des Servers (110) können mit anderen als den hier dargestellten Komponenten, Systemen, Teilsystemen und/oder Einheiten verwendet werden.
-
Die Wissensmaschine (150) ist hier mit Tools konfiguriert dargestellt, um Refactoring-Operationen für Quellcode zu ermitteln. Die Tools umfassen einen Quellcode-Manager (152), einen genetischen Manager (154), einen Bewertungsmanager (156) und einen Klassifizierer (158), ohne auf diese beschränkt zu sein. Der Quellcode-Manager (152), der genetische Manager (154), der Bewertungsmanager (156) und der Klassifizierer (158) sind in 1 zwar als in die Wissensmaschine (150) integriert dargestellt, die Tools (152), (154), (156) und (158) können in anderen Ausführungsformen jedoch von der Wissensmaschine (150) getrennt oder extern sein.
-
Die Wissensmaschine (150) kann Eingaben vom Netzwerk (105) empfangen und/oder eine Datenquelle (160) nutzen, die hier auch als Korpus oder Wissensbasis bezeichnet wird, um potenzielle Refactoring-Operationen zu ermitteln. Refactoring ist ein Prozess, bei dem ein Softwaresystem so verändert wird, dass sich das äußere Verhalten des Codes nicht ändert, aber seine interne Struktur verbessert wird. In einer beispielhaften Ausführungsform zielt das Refactoring darauf ab, den Quellcode zu überarbeiten oder die Quellcode-Struktur zu verbessern, um ihn/sie effizienter, skalierbar, wartbar oder wiederverwendbar zu machen, ohne dabei Funktionen des Programms zu verändern. Das hier dargestellte und beschriebene Refactoring zielt auf eine Anwendungsmodernisierung und Umstellen einer herkömmlichen Anwendung von einer monolithischen Struktur auf Mikrodienste ab. Wie gezeigt, ist die Datenquelle (160) mit einer oder mehreren Bibliotheken konfiguriert, hier beispielhaft als BibliothekA (162A) und BibliothekB (162B) dargestellt. Die hier angegebene Anzahl von Bibliotheken ist beispielhaft und sollte nicht als einschränkend betrachtet werden. Jede Bibliothek ist mit einer Mehrzahl von Refactoring-Operationen dargestellt. Wie gezeigt, ist die BibliothekA (162A) mit den Refactoring-Operationen (164A,0), (164A,1), ..., (164A,N) und die BibliothekB (162B) mit den Refactoring-Operationen (164B,0), (164B,1), ..., (164B,N) dargestellt. Die Anzahl von Refactoring-Operationen in jeder Bibliothek ist beispielhaft und sollte nicht als einschränkend betrachtet werden. Refactoring-Operationen können logisch in Bibliotheken gruppiert werden, um als Teil des Datenkorpus (160) mit der Wissensmaschine (150) verwendet zu werden. Entsprechend fungiert die Datenquelle (160) als Ressource für Bibliotheken und entsprechende Refactoring-Operationen, die der Wissensmaschine (150) und den entsprechenden Tools zur Verfügung stehen.
-
Refactoring-Operationen werden verwendet, um einen oder mehrere entsprechende Mikrodienste oder Mikrodienst-Kandidaten für den Quellcode zu erzeugen. Die verschiedenen Datenverarbeitungseinheiten (180), (182), (184), (186), (188) und (190), die über das Netz (105) mit dem Server (110) Daten austauschen, können Zugangspunkte zur Wissensmaschine (150) umfassen. Einige der Datenverarbeitungseinheiten können Einheiten zum Speichern der ermittelten Refactoring-Operation(en) umfassen, die mithilfe der Wissensmaschine (150) erstellt werden, um eine Antwortausgabe (104) zu erzeugen und die Antwortausgabe (104) an eine entsprechende Netzwerkeinheit-Architektur zu übermitteln, die funktionsmäßig mit dem Server (110) oder einer oder mehreren der Datenverarbeitungseinheiten (180), (182), (184), (186), (188) und (190) über das Computernetzwerk (105) verbunden ist.
-
Das Netzwerk (105) kann lokale Netzwerkverbindungen und entfernt angeordnete Verbindungen in verschiedenen Ausführungsformen umfassen, sodass die Wissensmaschine (150) in Umgebungen beliebiger Größe funktionieren kann, darunter lokale und globale Umgebungen wie beispielsweise das Internet. Zusätzlich dient die Wissensmaschine (150) als Front-End-System, das eine Vielfalt von Wissen zur Verfügung stellen kann, das aus einer oder mehreren Datenquellen extrahiert wurde, die in für das Netzwerk zugänglichen Quellen und/oder strukturierten Datenquellen enthalten sind. Auf diese Weise befüllen einige Prozesse die Wissensmaschine (150), wobei die Wissensmaschine (150) auch Eingabeschnittstellen umfasst, um Anforderungen zu empfangen und entsprechend zu antworten.
-
Der Quellcode (170) wird für die Modernisierung entweder ausgewählt oder ermittelt. In einer beispielhaften Ausführungsform wird der ermittelte Quellcode (170) über das Netzwerk (105) von einer der Datenverarbeitungseinheiten (180), (182), (184), (186), (188) und (190) an den Server (110) übermittelt. Ein Quellcode-Manager (152) führt ein anfängliches Verarbeiten des Quellcodes (170) durch, um einen anfänglichen Satz von Refactoring-Operationen (170A) zu ermitteln, die hier auch als Eltern-Refactoring-Operationen bezeichnet werden. In einer Ausführungsform handelt es sich bei dem anfänglichen Satz (170A) um einen zufällig ausgewählten Teilsatz aus einem Pool von Refactoring-Operationen. Der genetische Manager (154) bildet eine Schnittstelle mit dem Quellcode-Manager (152) und wendet einen genetischen Algorithmus (154A) auf eine oder mehrere Eltern-Refactoring-Operationen an, die aus dem anfänglichen Satz von Refactoring-Operationen (170A) für den Quellcode (170) ausgewählt wurden. Der genetische Algorithmus (154A) erzeugt eine Nachkommenpopulation von Refactoring-Operationen (170B) als Teilsatz der Eltern-Refactoring-Operationen (170A). In einer beispielhaften Ausführungsform spiegelt der genetische Algorithmus (154A) den Prozess der natürlichen Auslese wider, um Nachkommen zu erzeugen, die mindestens eine oder mehrere Eigenschaften der Eltern erben, die an die nächste Generation weitergegeben werden sollen. Der genetische Manager (154) wendet eine Kreuzungsoperation an, um eine Kombination von Nachkommen-Refactoring-Operationen zu erzeugen, und wendet zusätzlich einen Mutationsoperator an, um Variabilität in die erzeugte Kombination einzubringen. Die Kreuzungsoperation wird auf jedes Paar von Eltern-Refactoring-Operationen angewendet. Nachkommen-Refactoring-Operationen werden durch Austausch erzeugt, bis ein Kreuzungspunkt erreicht ist, an dem neue Nachkommen-Refactoring-Operationen zur Population der Refactoring-Operationen hinzugefügt werden. In einem ausgewählten Satz neuer Nachkommen-Refactoring-Operationen können einige ihrer Komponenten einer Mutation unterzogen werden. Die Mutation dient dazu, die Vielfalt zu erhalten, Variabilität in die Population einzuführen und eine vorzeitige Konvergenz zu verhindern. Entsprechend fungiert der genetische Manager (154) als Schnittstelle zu einem Satz von Refactoring-Operationen, um eine Nachkommenpopulation von Refactoring-Operationen zu ermitteln und zu erzeugen.
-
Der hier gezeigte Bewertungsmanager (156), der laut Darstellung funktionsmäßig mit dem genetischen Manager (154) verbunden ist, misst einen Eignungsgrad jeder der Refactoring-Operationen in dem Teilsatz, z.B. (170B). Bei dem Eignungsgrad handelt es sich um einen Zielmesswert der entsprechenden Mikrodienst-Kandidaten. Einzelheiten zum Eignungsgrad sind in 3 dargestellt und beschrieben. Im Hinblick auf den natürlichen Selektionsprozess wird der Messwert des Eignungsgrads jeder der Refactoring-Operationen in dem Teilsatz zugewiesen. Die Wahrscheinlichkeit, dass eine Refactoring-Operation ausgewählt wird, hängt vom entsprechenden Eignungsgrad ab. Gemäß Darstellung und Beschreibung in 3 sammelt der Quellcode-Manager (152) parallel zum anfänglichen Ermitteln von Refactoring-Operationen Laufzeitspuren des Quellcodes (170). In einer beispielhaften Ausführungsform ermitteln die Laufzeitspuren Abhängigkeitsinformationen, die dem Ausführen des Quellcodes zugehörig sind. Der Bewertungsmanager (156) sammelt die Laufzeitspuren und wendet sie auf den ermittelten Teilsatz an, z.B. (170B). Entsprechend umfasst das Messen des Eignungsgrads die Funktionalität des Quellcode-Managers (152) in Bezug auf Laufzeitspuren und die Funktionalität des Bewertungsmanagers (156) in Bezug auf die Bewertung des Eignungsgrads.
-
Die Refactoring-Operationen werden mit entsprechenden Mikrodienst-Kandidaten korreliert. Der Bewertungsmanager (156) ändert die gesammelten Laufzeitspuren entsprechend den Refactoring-Operationen im Teilsatz, z.B. (170B), und wendet dann einen Clustering-Algorithmus auf die geänderten Laufzeitspuren an, um Mikrodienst-Kandidaten zu ermitteln. Die Bewertung des Eignungsgrads dient somit als Messwert der entsprechenden Mikrodienst-Kandidaten. In einer Ausführungsform entspricht der Messwert des Mikrodienst-Kandidaten der Qualität, bei der es sich um eine Kombination von Zielmesswerten handeln kann. Der Bewertungsmanager (156) wählt eine oder mehrere Refactoring-Operationen aus dem Teilsatz, z.B. (170B) aus. In einer beispielhaften Ausführungsform umfasst die Auswahl Operationen in dem Teilsatz, der einen kleinsten euklidischen Abstand zu einer maximalen Kombination der Zielmesswerte aufweist. Das Anwenden des genetischen Algorithmus (154A) und das Messen des Eignungsgrads bilden einen iterativen Prozess, wie in 3 dargestellt und beschrieben, wobei die Auswahl einer oder mehrerer Refactoring-Operationen durch den Bewertungsmanager (156) eine nächste Eltern-Refactoring-Operation oder ein Satz von Eltern-Refactoring-Operationen ist und Gegenstand einer genetischen Operation und einer Nachkommenpopulation ist.
-
Der iterative Prozess des Priorisierens von Refactoring-Operationen hat einen Haltepunkt. Der Haltepunkt kann z.B. einer Anzahl von Iterationen oder in einer Ausführungsform einem Qualitätsmesswert entsprechen, der dem Messwert des Eignungsgrads entspricht. Sobald der Haltepunkt oder die Haltekriterien erreicht sind, werden die ermittelten Refactoring-Operationen im Teilsatz, z.B. (170B), durch den Klassifizierer (158) einem Priorisierungsprotokoll unterzogen, wobei das Priorisieren auf dem entsprechenden Messwert des Eignungsgrads beruht, der jeder einzelnen Refactoring-Operation im Teilsatz zugehörig ist. In einer beispielhaften Ausführungsform ermöglicht das Priorisieren von Refactoring-Operationen den Entwicklern, sich auf die wichtigsten Refactoring-Operationen zu konzentrieren, wenn Zeit und Ressourcen begrenzt sind. In einer Ausführungsform ist das vom Klassifizierer (158) durchgeführte Priorisieren ein Multiziel-Optimierungsproblem, für das ein genetischer Algorithmus mit nichtdominanter Sortierung (non-dominated sorting genetic algorithm - NSGA-II) verwendet wird. Die Ausgabe des Klassifizierers (158) ist ein Satz von priorisierten Refactoring-Operationen. Vor dem Ermitteln von Mikrodiensten werden Refactoring-Möglichkeiten empfohlen, um die Qualität des Quellcodes zu verbessern. Der Prozessor (112) wendet die ermittelten und priorisierten Refactoring-Operationen selektiv auf den Quellcode an und gibt abhängig davon entsprechende Mikrodienst-Kandidaten (170c) aus. Entsprechend priorisieren die hier beschriebenen Tools und ihre zugehörigen Funktionen Refactoring-Operationen, um eine funktional effektive und verbesserte Mikrodienst-Zerlegung zu erreichen, wobei die entsprechenden Mikrodienste geringe Betriebskosten und eine hohe funktionale Kohäsion aufweisen.
-
Über das Netzwerk (105) empfangene Anforderungen zum Modernisieren des Quellcodes können von einem Server (110), z.B. dem IBM Watson® Server, und der entsprechenden Wissensmaschine (150) verarbeitet werden. Wie hier gezeigt, erzeugt die Wissensmaschine (150) zusammen mit den integrierten Tools (152), (154), (156) und (158) einen Satz von priorisierten Refactoring-Operationen und wendet den erzeugten Satz auf den Quellcode an, um Mikrodienst-Kandidaten für eine auf Mikrodiensten gestützte Architektur zu erzeugen.
-
In einigen veranschaulichenden Ausführungsformen kann es sich bei dem Server (110) um das IBM Watson®-System handeln, das von der International Business Machines Corporation in Armonk, New York, erhältlich ist und um die Mechanismen der im Folgenden beschriebenen veranschaulichenden Ausführungsformen ergänzt wird. Das IBM Watson®-System kann eine Anforderung zum Modernisieren des Quellcodes als Eingabeinhalt (102) empfangen oder erkennen, die das Watson®-System dann analysiert, um den Satz von priorisierten Refactoring-Operationen zu ermitteln, bevor Mikrodienste ermittelt werden.
-
Die Manager (152), (154), (156) und (158), die im Folgenden gemeinsam als Wissensmaschinen-Tools bezeichnet werden, sind als in der Wissensmaschine (150) des Servers (110) ausgeführte oder darin integrierte Tools dargestellt. Die Tools können in einem separaten Datenverarbeitungssystem (z.B. 190) implementiert sein, oder in einer Ausführungsform eines Systems oder von Systemen können sie in zwei oder mehr Systemen implementiert sein, die über das Netzwerk (105) mit dem Server (110) verbunden sind. Wenn die Tools (152), (154), (156) und (158) enthalten sind, dienen diese dazu, die Laufzeitspuren und einen genetischen Algorithmus einzusetzen, um Refactoring-Operationen zu priorisieren, die auf den entsprechenden Quellcode angewendet werden sollen, um Mikrodienst-Kandidaten zu erzeugen und den Quellcode effektiv und effizient zu modernisieren.
-
Die Arten von Einheiten und entsprechenden Systemen, die die Wissensmaschine (150) verwenden können, reichen von kleinen tragbaren Einheiten, z.B. Handheld-Computer/Mobiltelefon (180), bis hin zu umfangreichen Großrechnersystemen, z.B. Großrechner (182). Beispiele für Handheld-Computer (180) sind persönliche digitale Assistenten (personal digital assistants - PDAs), persönliche Unterhaltungseinheiten, z.B. MP4-Player, tragbare Fernsehgeräte und Compact-Disc-Player. Weitere Beispiele für Informationsverarbeitungssysteme sind Stift- oder Tablet-Computer (184), Laptop- oder Notebook-Computer (186), Personal-Computer-Systeme (188) und Server (190). Wie dargestellt, können die verschiedenen Einheiten und Systeme über ein Computernetzwerk (105) miteinander vernetzt werden. Zu den Arten von Computernetzwerken (105), die zum Verbinden der verschiedenen Einheiten und Systeme verwendet werden können, gehören lokale Netzwerke (Local Area Networks - LANs), drahtlose lokale Netzwerke (Wireless Local Area Networks - WLANs), das Internet, das öffentliche Telefonnetz (Public Switched Telephone Network - PSTN), andere drahtlose Netzwerke und jede andere Netzwerktopologie, die zum Verbinden der Einheiten und Systeme verwendet werden kann. Viele der Einheiten und Systeme umfassen nichtflüchtige Datenspeicher, z.B. Festplatten und/oder nichtflüchtige Speicher. Einige der Einheiten und Systeme können separate nichtflüchtige Datenspeicher verwenden (z.B. verwendet der Server (190) einen nichtflüchtigen Datenspeicher (190a) und der Großrechner (182) einen nichtflüchtigen Datenspeicher (182a)). Bei dem nichtflüchtigen Datenspeicher (182a) kann es sich um eine Komponente handeln, die sich außerhalb der verschiedenen Einheiten und Systeme befindet, oder um eine interne Komponente in einer der Einheiten und Systeme.
-
Die Einheit(en) und das System bzw. die Systeme, die zur Unterstützung der Wissensmaschine (150) eingesetzt werden, können viele Formen annehmen, von denen einige in 1 dargestellt sind. Ein Informationsverarbeitungssystem kann beispielsweise die Form eines Desktops, eines Servers, eines tragbaren Computers, eines Laptops, eines Notebooks oder Computers oder Datenverarbeitungssystems mit anderem Formfaktor annehmen. Darüber hinaus können die Einheit(en) und das System bzw. die Systeme andere Formfaktoren annehmen, z.B. den eines persönlichen digitalen Assistenten (PDA), einer Spieleinheit, eines Geldautomaten, einer tragbaren Telefoneinheit, einer Datenübertragungseinheit oder anderer Einheiten, die einen Prozessor und einen Speicher umfassen.
-
Unter einer Anwendungsprogrammierschnittstelle (Application Program Interface - API) versteht man in der Technik einen Software-Vermittler zwischen zwei oder mehreren Anwendungen. In Bezug auf die in 1 dargestellte und beschriebene Wissensmaschine (150) können eine oder mehrere APIs verwendet werden, um eines oder mehrere der Tools (152), (154), (156) und (158) und ihre zugehörige Funktionalität zu unterstützen. Mit Bezug auf 2 wird ein Blockschaubild (200) bereitgestellt, in dem die Tools (152), (154), (156) und (158) und ihre zugehörigen APIs dargestellt sind. Wie gezeigt, ist eine Mehrzahl von Tools in die Wissensmaschine (205) integriert, wobei die Tools den Quellcode-Manager (152) umfassen, der in 2 als (252) dargestellt und der APlo (262) zugehörig ist, den genetischen Manager (154), der in 2 als (254) dargestellt und der API1 (264) zugehörig ist, den Bewertungsmanager (156), der in 2 als (256) dargestellt und der API2 (266) zugehörig ist, und den Klassifizierer (158), der in 2 als (258) dargestellt und der API3 (268) zugehörig ist. Jede der APIs kann in einer oder mehreren Sprachen und Schnittstellenspezifikationen implementiert werden. Die APlo (252) stellt funktionale Unterstützung zum Durchführen einer anfänglichen Verarbeitung des Quellcodes bereit, um einen anfänglichen Satz von Refactoring-Operationen zu ermitteln, die hier auch als Eltern-Refactoring-Operationen bezeichnet werden, und Laufzeitspuren des Quellcodes bereitzustellen; die API1 (254) stellt funktionale Unterstützung zum Anwenden eines genetischen Algorithmus auf die Eltern-Refactoring-Operation(en) bereit, wobei der genetische Algorithmus eine Nachkommenpopulation von Refactoring-Operationen erzeugt; die API2 (256) stellt funktionale Unterstützung zum Bewerten eines Eignungsgrads jeder Refactoring-Operation in der Nachkommenpopulation bereit; und die API3 (258) stellt funktionale Unterstützung zum Priorisieren von Refactoring-Operationen innerhalb der Nachkommenpopulation bereit, wobei das Priorisieren dem Bewerten des Eignungsgrads entspricht oder damit zusammenhängt. Wie gezeigt, ist jede der APIs (252), (254), (256) und (258) funktionsmäßig mit einem API-Orchestrator (260) verbunden, der auch als Orchestrierungsschicht bekannt ist und in der Technik als Abstraktionsschicht zum transparenten Verknüpfen der einzelnen APIs bekannt ist. In einer Ausführungsform kann die Funktionalität der einzelnen APIs miteinander verbunden oder kombiniert werden. Daher sollte die hier gezeigte Konfiguration der APIs nicht als einschränkend angesehen werden. Entsprechend kann wie hier gezeigt die Funktionalität der Tools durch ihre jeweiligen APIs ausgeführt oder unterstützt werden.
-
Mit Bezug auf 3 wird ein Ablaufplan (300) gezeigt, der einen Prozess zum Quellcode-Modernisieren veranschaulicht, der Analysieren des Quellcodes umfasst, um einen Satz von priorisierten Refactoring-Operationen zu ermitteln, bevor Mikrodienste ermittelt werden. Wie dargestellt, wird der Quellcode empfangen oder anderweitig ermittelt (302). Danach werden zwei Aspekte des empfangenen oder ermittelten Quellcodes parallel durchgeführt, die Anwenden eines genetischen Algorithmus und Sammeln von Laufzeitspuren umfassen. Laufzeitspuren des Quellcodes werden gesammelt, um Abhängigkeitsinformationen zu ermitteln, die dem Ausführen des Quellcodes (304) zugehörig sind. In einer Ausführungsform einer klassengestützten objektorientierten Programmiersprache wird beim Sammeln von Laufzeitspuren beispielsweise ein Aufruf während der Laufzeitausführung verwendet, um zu erfassen, welche Klassen der Quellcodeausführung eine andere Klasse aufrufen, wobei eine Klasse verwendet wird, um Objekte und Verfahren zu definieren. Auf der Grundlage dieser Ausführungsform ermittelt das Ermitteln in Schritt (304) die Abhängigkeitsinformationen von Klassen und ihren entsprechenden Objekten und Verfahren. Parallel zum Sammeln in Schritt (304) wird die statische Abhängigkeit des Quellcodes ermittelt, beginnend mit dem Ermitteln von Refactoring-Operationen für den Quellcode (306). In einer Ausführungsform verwendet das Ermitteln in Schritt (306) Regeln zum Erkennen von Code-Smells. Code-Smells sind in der Technik als Verstöße gegen die Grundsätze der Codeprogrammierung bekannt. Ein Code-Smell muss nicht zwangsläufig zu einem Fehler führen, kann aber andere negative Auswirkungen auf den Quellcode haben. Ausgehend vom Ermitteln in Schritt (306) wird ein Teilsatz von Refactoring-Operationen zufällig aus einem Pool von Refactoring-Operationen (308) ausgewählt. Genauer ausgedrückt, wird bei einem Satz von ermittelten Operationen O = {o1, o2,..., on} ein Teilsatz von Operationen für K Iterationen zufällig ausgewählt, um eine Anfangspopulation der Größe K zu erzeugen. Ein genetischer Algorithmus wird dann auf eine oder mehrere Eltern-Refactoring-Operationen angewendet, die aus dem anfänglichen Satz von Refactoring-Operationen für den Quellcode ausgewählt werden, um eine Nachkommenpopulation von Refactoring-Operationen (310) zu erzeugen.
-
Der Aspekt des Anwendens eines genetischen Algorithmus in Schritt (310) auf die Elternpopulation umfasst Anwenden von Kreuzungen und Mutationen, um eine andere Kombination von Refactoring-Operationen zu erzeugen. In einer beispielhaften Ausführungsform spiegelt der genetische Algorithmus den Prozess der natürlichen Auslese wider, um Nachkommen zu erzeugen, die eine oder mehrere Eigenschaften der Eltern erben, die an die nächste Generation weitergegeben werden sollen. Refactoring-Operationen werden hier auf Verfahrens- und Klassenebene dargestellt, wobei die Techniken auf Verfahrensebene darauf abzielen, Codeänderungen auf einer Verfahrensebene vorzunehmen. Bei einem Verfahren handelt es sich um eine Sammlung von Angaben, die gruppiert werden, um eine Operation durchzuführen. Zu Beispielen für Techniken auf Verfahrensebene gehören, ohne auf diese beschränkt zu sein, Extrahieren eines Verfahrens, Inline-Verschieben eines Verfahrensaufrufs oder Umwandeln eines langen Verfahrens in eine Klasse. In einer Ausführungsform kann es zusätzliche oder alternative Techniken auf Verfahrensebene geben, und diese Beispiele sollten daher nicht als einschränkend betrachtet werden. Die Refactoring-Techniken in dieser Gruppe, d.h. Techniken auf Verfahrensebene, organisieren die Verfahren zwischen den Klassen neu, verschieben z.B. ein Verfahren von einer Klasse in eine andere. Techniken auf Klassenebene zielen darauf ab, das Verhalten bei der Interaktion von Klassen untereinander zu ändern, wobei eine Klasse ein benutzerdefinierter Entwurf oder Prototyp ist, aus dem Objekte erzeugt werden. Zu Beispielen für Techniken auf Klassenebene gehören, ohne auf diese beschränkt zu sein, Aufteilen einer Klasse in zwei oder mehr Klassen oder Entfernen einer Klasse. In einer Ausführungsform kann es zusätzliche oder alternative Techniken auf Klassenebene geben, und diese Beispiele sollten daher nicht als einschränkend betrachtet werden. Wie hier beispielhaft gezeigt, wird die Kreuzung von Elternteilen eingesetzt, um Nachkommen zu erzeugen. Ein Elternteil von zwei Lösungen wird zufällig aus der anfänglichen Population ausgewählt. In einer beispielhaften Ausführungsform erbt der Nachkomme für jeden Elternteil eine oder mehrere der Refactoring-Operationen. Im Folgenden sind Beispiele für die Kreuzung von Elternteilen aufgeführt:
-
Beispiel 1, Kreuzung der Eltern:
- Elternteil1: Feld verschieben (Klasse A, Klasse B, Feld a) und Verfahren verschieben (Klasse B, Klasse C, Verfahren a)
- was als Verschieben der Funktion a von Klasse A nach Klasse B und Verschieben von Verfahren a von Klasse B nach Klasse C interpretiert wird.
-
Beispiel 2, Kreuzung der Eltern:
- Elternteil2: Feld verschieben (Klasse C, Klasse D, Feld b) und Feld nach oben ziehen (Klasse E, Klasse F, Feld c)
- was als Verschieben der Funktion b von Klasse C nach Anspruch D interpretiert wird, und wenn Klasse E ein Kind von Klasse F ist, dann wird die Funktion c von Klasse E nach Klasse F verschoben.
-
Darüber hinaus kann die Kreuzung von Kindern auch von den vom Elternteil erzeugten Nachkommen verwendet werden. Im Folgenden sind Beispiele für die Kreuzung von Kindern aufgeführt:
-
Beispiel 3, Kreuzung von Kindern:
- Kind1: Feld verschieben (Klasse A, Klasse B, Feld a) und Feld nach oben ziehen (Klasse E, Klasse F, Feld c)
-
Beispiel 4, Kreuzung von Kindern:
- Kind2: Feld verschieben (Klasse C, Klasse D, Feld b) und Verfahren verschieben (Klasse B, Klasse C, Verfahren a)
-
Mit einer Mutationswahrscheinlichkeit wird ein Nachkomme, z.B. Kind1 oder Kind2, nach der Kreuzung zufällig ausgewählt, um die Lösungen variabel zu gestalten. Nach dem zufälligen Auswählen der Nachkommen werden eine oder mehrere Refactoring-Operationen zufällig ausgewählt, um sie durch eine andere Refactoring-Operation zu ersetzen. Im Folgenden wird ein Beispiel für eine Mutation gegeben:
- Kind1 vor der Mutation: Feld verschieben (Klasse A, Klasse B, Feld a) und Feld nach oben ziehen (Klasse E, Klasse F, Feld c)
- Kind2 nach der Mutation: Inline-Klasse (Klasse G, Klasse H) und Feld nach oben ziehen (Klasse E, Klasse F, Feld c)
-
Wie in diesem Mutationsbeispiel gezeigt, wird eine andere Refactoring-Operation „Inline-Klasse“ eingeführt.
-
Der genetische Algorithmus erzeugt eine Nachkommenpopulation von Refactoring-Operationen, wobei die Nachkommenpopulation ein Teilsatz der Eltern-Refactoring-Operationen ist (312). Wie gezeigt, werden Informationen aus den gesammelten Laufzeitspuren extrahiert, um den Messwert des Eignungsgrads zu berechnen, z.B. die Anzahl von Laufzeitaufrufen zwischen zwei Klassen. Die Nachkommenpopulation, z.B. der Teilsatz, ist anschließend Gegenstand einer Messung des Eignungsgrads für jede Refactoring-Operation in dem Teilsatz von Refactoring-Operationen (314). Bei dem Messwert des Eignungsgrads handelt es sich um einen Vektor von Zielfunktionen, f1 bis f6, wie nachstehend definiert. Jeder Kandidaten-Nachkomme einer Refactoring-Operation stellt eine Liste von Kandidaten-Mikrodiensten bereit. Der Eignungsgrad ist ein Messwert für die Qualität der einzelnen Refactoring-Operationen im Teilsatz. Die Wahrscheinlichkeit, dass eine Refactoring-Operation ausgewählt wird, hängt vom entsprechenden Eignungsgrad ab. Die Bewertung des Eignungsgrads in Schritt (314) weist mehrere Teilprozesse auf, darunter Ändern der ursprünglichen Laufzeitspuren gemäß den Refactoring-Operationen (316) und Anwenden von Clustering auf die geänderten Laufzeitspuren, um Mikrodienst-Kandidaten (318) zu ermitteln. Das Clustering wird beispielsweise auf der Grundlage eines Ähnlichkeitsmesswerts durchgeführt, der auf der Grundlage der Anzahl von Laufzeitaufrufen zwischen zwei Klassen berechnet wird. Genauer gesagt, zwei Klassen mit einer hohen Anzahl von Laufzeitaufrufen weisen eine hohe Ähnlichkeit auf. Das Clustering-Verfahren stellt Gruppieren von Klassen bereit, wobei jede Gruppe, z.B. ein Cluster, Mikrodienst-Kandidaten ermittelt. Nach Schritt (318) wird die Qualität der Mikrodienst-Kandidaten aus den Clustern gemessen (320). Die Qualität der Mikrodienst-Kandidaten wird anhand der Eignungsfunktionen f1 bis f6 gemessen, wie nachstehend beschrieben, um die Qualität der gebildeten Cluster zu bewerten. In einer beispielhaften Ausführungsform wird beim Messen des Eignungsgrads eine Funktion als Vektor von Zielfunktionen für die Qualität von Mikrodiensten verwendet. Im Folgenden werden Beispiele für Zielfunktionen, z.B. Zielmesswerte, als Bewertungsmodell für die Qualität von Mikrodiensten und Eignungsfunktionen für die Suche nach nahezu optimalen Lösungen aufgeführt:
- f1: strukturelle Intrakonnektivität innerhalb von zwei Clustern, z.B. Co und C1, wobei: wobei k die Anzahl von Partitionen angibt; Ni die Anzahl von Klassen für Partition i; und ui die Gesamtanzahl von Verfahrensaufrufen innerhalb von Partition i ist.
- f2: strukturelle Interkonnektivität zwischen zwei Clustern, z.B. C0 und C1, wobei: wobei k die Anzahl von Partitionen angibt; Ni die Anzahl von Klassen für Partition i; und σi die Gesamtanzahl von Verfahrensaufrufen zwischen Partition i und Partition j ist.
- f3: Daten-Intraabhängigkeit innerhalb jedes Clusters, wobei: wobei k die Anzahl von Partitionen angibt; Ni die Anzahl von Klassen für Partition i; und wi die Gesamtanzahl von Datenabhängigkeiten innerhalb von Partition i ist.
- f4: Daten-Interkonnektivität zwischen unterschiedlichen Clustern, wobei: wobei k die Anzahl von Partitionen angibt; Ni die Anzahl von Klassen für Partition i; ni,j die Gesamtanzahl von Datenabhängigkeiten zwischen Partition i und Partition j ist.
- f5: Schnittpunkt von Transaktionselementen, wobei: wobei k die Anzahl von Partitionen angibt; Ni die Anzahl von Klassen für Partition i; und bci der Satz von geschäftlichen Anwendungsfällen für Partition i ist.
- f6: Prozentsatz der Schnittstelle pro Cluster, wobei die Schnittstelle eine Menge von Funktionen ist, die zu einem anderen Cluster gehört, wobei: wobei k die Anzahl von Partitionen angibt; Ni die Anzahl von Klassen für Partition i; und Ii die Anzahl von Schnittstellen für Partition i ist, wobei die Schnittstelle ein Verfahren darstellt, das durch eine Klasse aufgerufen werden kann, die zu einer anderen Partition gehört.
-
Der Messwert der Qualität von Mikrodienst-Kandidaten aus den Clustern in Schritt (320) definiert die Eignungsfunktion als einen Vektor F der Eignungsfunktionen, wobei F = (f1; f2; f3; f4; f5; f6) ist. In einer beispielhaften Ausführungsform wird eine nahezu optimale Lösung hier als Kniepunkt bezeichnet, der weiterhin definiert ist als der kleinste euklidische Abstand einer Kombination der Zielmesswerte zu einem idealen Eignungsgrad, und wobei der ideale Eignungsgrad Fideal wie folgt definiert ist:
-
-
Der verbleibende Teil oder der verbleibende Satz von Nachkommen-Refactoring-Operationen ist Gegenstand eines Sortierprozesses auf der Grundlage ihres jeweiligen Dominanzwerts (322). In einer beispielhaften Ausführungsform entspricht der Dominanzwert der Bewertung des Eignungsgrads. Eine Kind-Refactoring-Operation, die dem idealen Eignungsgrad am nächsten kommt, wird als nächste Eltern-Refactoring-Operation (324) ausgewählt. Die in den Schritten (314) bis (320) gezeigte und beschriebene Bewertung des Eignungsgrads und das nachfolgende Sortieren und Auswählen in den Schritten (322) bis (324) ist ein iterativer Prozess, bei dem eine oder mehrere Refactoring-Operationen als nächste Eltern-Refactoring-Operationen oder Satz von Eltern-Refactoring-Operationen ausgewählt werden, die Gegenstand einer genetischen Operation und einer Nachkommenpopulation sind. Der iterative Prozess des Priorisierens von Refactoring-Operationen hat einen Haltepunkt. Der Haltepunkt kann z.B. einer Anzahl von Iterationen oder in einer Ausführungsform einem Qualitätsmesswert entsprechen, der dem idealen Eignungsgrad Fideal entspricht. Wie hier gezeigt, wird nach Schritt (324) eine Bewertung durchgeführt, um zu ermitteln, ob das Haltepunktkriterium erreicht wurde (326). Auf eine negative Antwort auf die Bewertung folgt die Rückkehr zu Schritt (310), und auf eine positive Antwort auf die Bewertung folgt das Anwenden der ermittelten und priorisierten Refactoring-Operationen aus dem Teilsatz auf den Quellcode (328). Die Ausgabe des Anwendens in Schritt (328) erzeugt einen oder mehrere Mikrodienst-Kandidaten (330).
-
Bei der hier dargestellten und beschriebenen Priorisierung handelt es sich um ein Mehrziel-Optimierungsproblem, das in einer beispielhaften Ausführungsform einen genetischen Algorithmus mit nichtdominanter Sortierung verwendet, z.B. NSGA-II. Diese Priorisierung der Refactoring-Operationen ermöglicht es Entwicklern, je nach Zeit- und Ressourcenbeschränkungen Prioritäten zu setzen. Entsprechend ermittelt und priorisiert die hier gezeigte und beschriebene Priorisierung eine Abfolge von Refactoring-Operationen, um ein Ermitteln von nachgelagerten Mikrodiensten zu verbessern, was zu qualitativ hochwertigen Mikrodiensten mit geringen Betriebskosten und hoher funktionaler Kohäsion führt.
-
Die hier gezeigten und beschriebenen Ausführungsformen können die Form eines Computersystems haben, das mit der Wissensmaschine (150) verwendet wird, um eine Abfolge von Refactoring-Operationen zu ermitteln und zu priorisieren, um ein Ermitteln nachgelagerter Mikrodienste zum Auswählen von Quellcode zu verbessern. Aspekte der Tools und Manager, z.B. (152), (154), (156), (158), und ihre zugehörige Funktionalität können in einem Computersystem/Server an einem einzigen Standort ausgeführt oder in einer Ausführungsform in einem Cloud-gestützten System konfiguriert sein, das Datenverarbeitungsressourcen gemeinsam nutzt. Mit Bezug auf 4 wird ein Blockschaubild (400) bereitgestellt, das ein Beispiel für ein Computersystem/einen Server (402) veranschaulicht, im Folgenden als Host (402) bezeichnet, der mit einem Cloud-gestützten Unterstützungssystem Daten austauscht, um die vorstehend in Bezug auf 3 beschriebenen Prozesse zu implementieren. Der Host (402) arbeitet mit zahlreichen anderen Umgebungen oder Konfigurationen von Universal- oder Spezial-Datenverarbeitungssystemen. Beispiele für bekannte Datenverarbeitungssysteme, Umgebungen und/oder Konfigurationen, die für die Nutzung mit dem Host (402) geeignet sein können, sind, ohne auf diese beschränkt zu sein, Personal-Computer-Systeme, Server-Computer-Systeme, schlanke Clients, leistungsintensive Clients, Handheld- oder Laptop-Einheiten, Mehrprozessorsysteme, Systeme auf der Grundlage von Mikroprozessoren, Beistellgeräte, programmierbare Unterhaltungselektronik, Netzwerk-PCs, Minicomputersysteme, Großrechnersysteme und Dateisysteme (z.B. verteilte Speicherumgebungen und verteilte Cloud-Computing-Umgebungen), die jedes beliebige der vorstehend genannten Systeme oder Einheiten und Ähnliches enthalten.
-
Der Host (402) kann im allgemeinen Kontext von durch ein Computersystem ausführbaren Anweisungen beschrieben werden, z.B. als Programmmodule, die von einem Computersystem ausgeführt werden. Im Allgemeinen können Programmmodule Routinen, Programme, Objekte, Komponenten, Logik, Datenstrukturen usw. enthalten, die bestimmte Aufgaben durchführen oder bestimmte abstrakte Datentypen implementieren. Der Host (402) kann in verteilten Cloud-Computing-Umgebungen eingesetzt werden, wo die Aufgaben von entfernt angeordneten Verarbeitungseinheiten durchgeführt werden, die über ein Datenübertragungsnetzwerk verbunden sind. In einer verteilten Cloud-Computing-Umgebung können sich Programmmodule sowohl auf lokalen als auch auf entfernt angeordneten Computersystem-Speichermedien befinden, darunter Speichereinheiten mit Arbeitsspeichern.
-
Wie in 4 gezeigt, wird der Host (402) in Form einer universellen Datenverarbeitungseinheit dargestellt. Bei den Komponenten des Hosts (402) kann es sich - ohne auf diese beschränkt zu sein - um einen oder mehrere Prozessoren oder Verarbeitungseinheiten (404), z.B. Hardware-Prozessoren, einen Systemspeicher (406) und einen Bus (408) handeln, der verschiedene Systemkomponenten, darunter den Systemspeicher (406), mit dem Prozessor (404) verbindet. Der Bus (408) stellt eine oder mehrere von beliebigen mehreren Arten von Busstrukturen dar, darunter einen Speicherbus oder eine Speichersteuereinheit, einen Peripheriebus, eine AGP-Schnittstelle (Accelerated Graphics Port) und einen Prozessor oder lokalen Bus, der eine beliebige aus einer Vielfalt von Busarchitekturen nutzt. Beispielsweise und nicht einschränkend enthalten solche Architekturen einen Industry-Standard-Architecture-(ISA)-Bus, einen Micro-Channel-Architecture-(MCA)-Bus, einen Enhanced-ISA-(EISA)-Bus, einen lokalen Video-Electronics-Standards-Association-(VESA)-Bus und einen Peripheral-Component-Interconnects-(PCI)-Bus. Der Host (402) umfasst in der Regel eine Vielfalt von durch ein Computersystem lesbare Medien. Bei diesen Medien kann es sich um beliebige verfügbare Medien handeln, auf die der Host (402) zugreifen kann, darunter flüchtige und nichtflüchtige Medien, wechselbare und nichtwechselbare Medien.
-
Der Systemspeicher (406) kann vom Computersystem lesbare Medien in Form von flüchtigen Speichern, z.B. Direktzugriffsspeicher (RAM) (430) und/oder Cache (432), enthalten. Nur beispielhaft kann das Speichersystem (434) bereitgestellt werden, um ein nichtwechselbares, nichtflüchtiges magnetisches Medium auszulesen und zu beschreiben (nicht dargestellt und üblicherweise als „Festplatte“ bezeichnet). Obwohl nicht dargestellt, können ein Laufwerk für magnetische Speicherplatten zum Auslesen und Beschreiben einer wechselbaren, nichtflüchtigen magnetischen Speicherplatte (z.B. „Diskette“) und ein Laufwerk für optische Speicherplatten zum Auslesen oder Beschreiben einer wechselbaren, nichtflüchtigen optischen Speicherplatte wie einem CD-ROM, DVD-ROM und andere optische Medien bereitgestellt werden. In solchen Fällen kann jedes über eine oder mehrere Datenmedien-Schnittstellen mit dem Bus (408) verbunden sein.
-
Das Programm/Dienstprogramm (440) mit (mindestens) einem Satz von Programmmodulen (442) kann beispielsweise und nicht einschränkend im Speicher (406) gespeichert sein, ebenso ein Betriebssystem, ein oder mehrere Anwendungsprogramme, weitere Programmmodule und Programmdaten. Jedes der Betriebssysteme, ein oder mehrere Anwendungsprogramme, weitere Programmmodule und Programmdaten oder eine Kombination daraus können jeweils eine Implementierung einer Netzwerkumgebung enthalten. Die Programmmodule (442) führen im Allgemeinen die Funktionen und/oder Methodiken der Ausführungsformen aus, um eine oder mehrere Refactoring-Operationen für den Quellcode zu ermitteln, die bei Anwenden auf den Quellcode einen oder mehrere Mikrodienst-Kandidaten erzeugen. Die Gruppe von Programmmodulen (442) kann beispielsweise wie in 1 beschrieben die Tools (152), (154), (156) und (158) umfassen.
-
Der Host (402) kann auch mit einer oder mehreren externen Einheiten (414), z.B. einer Tastatur, einer Zeigeeinheit, einer Anzeige (424) usw.; mit einer oder mehreren Einheiten, die einen Benutzer in die Lage versetzen, mit dem Host (402) zu interagieren; und/oder beliebigen Einheiten (z.B. Netzwerkkarte, Modem usw.), die den Host (402) in die Lage versetzen, mit einer oder mehreren Datenverarbeitungseinheiten Daten auszutauschen. Eine solche Datenübertragung kann über die Eingabe/Ausgabe-Schnittstellen (E/A-Schnittstellen) (422) erfolgen. Überdies kann der Host (402) mit einem oder mehreren Netzwerken, z.B. einem lokalen Netzwerk (LAN), einem allgemeinen Weitverkehrsnetzwerk (WAN) und/oder einem öffentlichen Netzwerk (z.B. das Internet), über den Netzwerkadapter (420) Daten austauschen. Wie dargestellt, tauscht der Netzwerkadapter (420) über den Bus (408) mit den anderen Komponenten des Hosts (402) Daten aus. In einer Ausführungsform tauscht eine Mehrzahl von Knoten eines verteilten Dateisystems (nicht dargestellt) über die Eingabe/Ausgabe-Schnittstelle (422) oder über den Netzwerkadapter (420) mit dem Host (402) Daten aus. Es versteht sich, dass sonstige Hardware- und/oder Software-Komponenten in Verbindung mit dem Host (402) verwendet werden können, auch wenn sie nicht dargestellt sind. Beispiele sind unter anderem, ohne auf diese beschränkt zu sein: Mikrocode, Einheitentreiber, redundante Verarbeitungseinheiten, Anordnungen externer Festplattenlaufwerke, RAID-Systeme, Bandlaufwerke und Speichersysteme für die Datenarchivierung usw.
-
In diesem Dokument werden die Begriffe „Computerprogrammmedium“, „durch einen Computer verwendbares Medium“ und „durch einen Computer lesbares Medium“ verwendet, um sich allgemein auf Medien, z.B. auf den Hauptspeicher (406), darunter der RAM (430), der Cache (432) und das Speichersystem (434), z.B. ein wechselbares Speicherlaufwerk und eine in einem Festplattenlaufwerk installierte Festplatte, zu beziehen.
-
Computerprogramme (auch Computersteuerungslogik genannt) werden im Speicher (406) gespeichert. Computerprogramme können auch über eine Datenübertragungsschnittstelle, z.B. einen Netzwerkadapter (420), empfangen werden. Wenn solche Computerprogramme ausgeführt werden, kann das Computersystem die hier beschriebenen Merkmale der vorliegenden Ausführungsformen durchführen. Insbesondere ermöglichen die Computerprogramme, wenn sie ausgeführt werden, der Verarbeitungseinheit (404), die Funktionen des Computersystems durchzuführen. Entsprechend stellen solche Computerprogramme Steuereinheiten des Computersystems dar.
-
Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch eine Einheit zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder gehobene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. einen Lichtwellenleiter durchlaufende Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
-
Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs/Verarbeitungs-Einheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetzwerk und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Router, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs/Verarbeitungs-Einheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs/Verarbeitungs-Einheit weiter.
-
Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Ausführungsformen kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server oder Cluster von Servern ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetzwerk (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der Ausführungsformen durchzuführen.
-
In einer Ausführungsform handelt es sich bei dem Host (402) um einen Knoten einer Cloud-Computing-Umgebung. Wie in der Technik bekannt, ist Cloud-Computing ein Modell zum Liefern eines Dienstes, der einen problemlosen, bedarfsorientierten Netzwerkzugriff auf einen gemeinsamen Pool von konfigurierbaren Datenverarbeitungsressourcen (z.B. Netzwerke, Netzwerkbandbreite, Server, Verarbeitung, Speicher, Anwendungen, virtuelle Maschinen und Dienste) ermöglicht, die mit minimalem Verwaltungsaufwand bzw. minimaler Interaktion mit einem Anbieter des Dienstes schnell bereitgestellt und freigegeben werden können. Dieses Cloud-Modell kann mindestens fünf Eigenschaften, mindestens drei Dienstmodelle und mindestens vier Implementierungsmodelle enthalten. Beispiele für solche Eigenschaften sind wie folgt:
-
On-Demand Self-Service (bedarfsorientierte Selbstbedienung): Ein Cloud-Nutzer kann einseitig automatisch nach Bedarf Datenverarbeitungsfunktionen wie Serverzeit und Netzwerkspeicher bereitstellen, ohne dass eine menschliche Interaktion mit dem Anbieter der Dienste erforderlich ist.
-
Broad Network Access (breiter Netzzugriff): Über ein Netzwerk sind Funktionen verfügbar, auf die durch Standardmechanismen zugegriffen wird, die die Verwendung durch heterogene schlanke oder leistungsintensive Client-Plattformen unterstützen (z.B. Mobiltelefone, Laptops und PDAs).
-
Ressource Pooling (Ressourcen-Bündelung): Die Datenverarbeitungsressourcen des Anbieters werden gebündelt, um mehreren Nutzern unter Verwendung eines Mehrmietermodells zu dienen, wobei verschiedene physische und virtuelle Ressourcen dynamisch nach Bedarf zugewiesen und neu zugewiesen werden. Es gibt eine gefühlte Standortunabhängigkeit, da der Nutzer allgemein keine Kontrolle bzw. Kenntnis über den genauen Standort der bereitgestellten Ressourcen hat, aber in der Lage sein kann, einen Standort auf einer höheren Abstraktionsebene festzulegen (z.B. Land, Staat oder Rechenzentrum).
-
Rapid Elasticity (schnelle Anpassungsfähigkeit): Funktionen können für eine schnelle horizontale Skalierung (scale out) schnell und elastisch bereitgestellt werden, in einigen Fällen auch automatisch, und für ein schnelles Scale-in schnell freigegeben werden. Für den Nutzer erscheinen die für das Bereitstellen verfügbaren Funktionen häufig unbegrenzt und sie können jederzeit in jeder beliebigen Menge gekauft werden.
-
Measured Service (messbarer Dienst): Cloud-Systeme steuern und optimieren die Verwendung von Ressourcen automatisch, indem sie eine Messfunktion auf einer gewissen Abstraktionsebene nutzen, die für die Art von Dienst geeignet ist (z.B. Speicher, Verarbeitung, Bandbreite sowie aktive Benutzerkonten). Die Ressourcennutzung kann überwacht, kontrolliert und protokolliert werden, wodurch Transparenz für den Anbieter und den Kunden des genutzten Dienstes bereitgestellt wird.
-
Es gibt folgende Dienstmodelle:
-
Software as a Service (Saas) (Software als Dienst): Die dem Nutzer bereitgestellte Funktion besteht darin, die in einer Cloud-Infrastruktur laufenden Anwendungen des Anbieters zu verwenden. Die Anwendungen sind über eine schlanke Client-Schnittstelle, z.B. einen Web-Browser (z.B. auf dem Web beruhende eMail), von verschiedenen Client-Einheiten aus zugänglich. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, darunter das Netzwerk, Server, Betriebssysteme, Speicher bzw. sogar einzelne Anwendungsfunktionen, mit der möglichen Ausnahme von eingeschränkten benutzerspezifischen Einstellungen der Anwendungskonfiguration.
-
Platform as a Service (Paas) (Plattform als Dienst): Die dem Nutzer bereitgestellte Funktion besteht darin, durch einen Nutzer erstellte bzw. erhaltene Anwendungen, die unter Verwendung von durch den Anbieter unterstützten Programmiersprachen und Werkzeugen erstellt wurden, in der Cloud-Infrastruktur einzusetzen. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, darunter Netzwerke, Server, Betriebssysteme bzw. Speicher, hat aber die Kontrolle über die eingesetzten Anwendungen und möglicherweise über Konfigurationen der Hosting-Umgebung der Anwendung.
-
Infrastructure as a Service (laas) (Infrastruktur als Dienst): Die dem Nutzer bereitgestellte Funktion besteht darin, Verarbeiten, Speicher, Netzwerke und andere grundlegende Datenverarbeitungsressourcen bereitzustellen, wobei der Nutzer in der Lage ist, beliebige Software einzusetzen und auszuführen, zu der Betriebssysteme und Anwendungen gehören können. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, hat aber die Kontrolle über Betriebssysteme, Speicher, eingesetzte Anwendungen und möglicherweise eine eingeschränkte Kontrolle über ausgewählte Netzwerkkomponenten (z.B. Host-Firewalls).
-
Es gibt folgende Einsatzmodelle:
-
Private Cloud: Die Cloud-Infrastruktur wird einzig und allein für eine Organisation betrieben. Sie kann durch die Organisation oder einen Dritten verwaltet werden und kann sich in den eigenen Räumen oder in fremden Räumen befinden.
-
Community Cloud (Benutzergemeinschafts-Cloud): Die Cloud-Infrastruktur wird von mehreren Organisationen gemeinsam genutzt und unterstützt eine spezielle Benutzergemeinschaft, die gemeinsame Anliegen hat (z.B. Aufgabe, Sicherheitsanforderungen, Richtlinien sowie Überlegungen bezüglich der Einhaltung von Vorschriften). Sie kann durch die Organisationen oder einen Dritten verwaltet werden und kann sich in den eigenen Räumen oder fremden Räumen befinden.
-
Public Cloud (öffentliche Cloud): Die Cloud-Infrastruktur wird der allgemeinen Öffentlichkeit oder einer großen Branchengruppe zur Verfügung gestellt und gehört einer Organisation, die Cloud-Dienste verkauft.
-
Hybrid Cloud (hybride Cloud): Die Cloud-Infrastruktur besteht aus zwei oder mehr Clouds (privat, Benutzergemeinschaft oder öffentlich), die zwar einzelne Entitäten bleiben, aber durch eine standardisierte oder herstellereigene Technologie miteinander verbunden sind, die eine Übertragbarkeit von Daten und Anwendungen ermöglicht (z.B. Cloud-Zielgruppenverteilung für den Lastenausgleich zwischen Clouds).
-
Eine Cloud-Computing-Umgebung ist dienstorientiert und schwerpunktmäßig auf Statusunabhängigkeit, geringe Kopplung, Modularität und semantische Interoperabilität ausgerichtet. Der Kern von Cloud-Computing ist eine Infrastruktur, die ein Netzwerk aus miteinander verbundenen Knoten aufweist.
-
Mit Bezug nunmehr auf 5 ist ein veranschaulichendes Cloud-Computing-Netzwerk (500) dargestellt. Wie dargestellt, umfasst das Cloud Computing -Netzwerk (500) eine Cloud Computing-Umgebung (550) mit einem oder mehreren Cloud Computing-Knoten (510), mit denen lokale Computergeräte, die von Cloud-Kunden verwendet werden, Daten austauschen können. Zu Beispielen für diese lokalen Datenverarbeitungseinheiten gehören, ohne auf diese beschränkt zu sein, der persönliche digitale Assistent (PDA) oder das Mobiltelefon (554A), der Desktop-Computer (554B), der Laptop-Computer (554C) und/oder das Kraftfahrzeug-Computersystem (554N). Einzelne Knoten in den Knoten (510) können des Weiteren miteinander Daten austauschen. Sie können physisch oder virtuell in einem oder mehreren Netzwerken wie private, benutzergemeinschaftliche, öffentliche oder hybride Clouds wie oben beschrieben oder in einer Kombination davon in Gruppen angeordnet sein (nicht dargestellt). Dies ermöglicht es der Cloud-Computing-Umgebung (500), Infrastruktur, Plattformen und/oder Software als Dienste anzubieten, für die ein Cloud-Nutzer keine Ressourcen auf einer lokalen Datenverarbeitungseinheit vorhalten muss. Es versteht sich, dass die in 5 gezeigten Arten von Datenverarbeitungseinheiten (554A bis N) nur veranschaulichend sein sollen und die Cloud-Computing-Umgebung (550) mit jeder Art von computergestützter Einheit über jede Art von Netzwerk und/oder netzwerkadressierbarer Verbindung Daten austauschen kann (z.B. über einen Web-Browser)
-
Mit Bezug nunmehr auf 6 wird ein Satz funktionaler Abstraktionsschichten (600) gezeigt, die von dem Cloud-Computing-Netzwerk von 5 bereitgestellt werden. Es versteht sich im Voraus, dass die in 6 dargestellten Komponenten, Schichten und Funktionen nur veranschaulichend sein sollen und Ausführungsformen nicht darauf beschränkt sind. Wie dargestellt, werden die folgenden Schichten und entsprechenden Funktionen bereitgestellt: die Hardware- und Software-Schicht (610), die Virtualisierungsschicht (620), die Verwaltungsschicht (630) und die Arbeitslastschicht (640).
-
Die Hardware- und Software-Schicht (610) enthält Hardware- und Software-Komponenten. Zu Beispielen für Hardware-Komponenten gehören Großrechner, in einem Beispiel IBM® zSeries®-Systeme; auf der RISC-Architektur (Reduced Instruction Set Computer) beruhende Server, in einem Beispiel IBM pSeries®-Systeme; IBM xSeries®-Systeme; IBM BladeCenter®-Systeme; Speichereinheiten; Netzwerke sowie Netzwerkkomponenten. Zu Beispielen für Software-Komponenten gehören eine Netzwerk-Anwendungsserver-Software, in einem Beispiel die IBM WebSphere®-Anwendungsserver-Software; und eine Datenbank-Software, in einem Beispiel die IBM DB2®-Datenbank-Software. (IBM, zSeries, pSeries, xSeries, BladeCenter, WebSphere und DB2 sind Warenzeichen der International Business Machines Corporation, die in vielen Rechtsordnungen weltweit eingetragen sind).
-
Die Virtualisierungsschicht (620) stellt eine Abstraktionsschicht bereit, aus der die folgenden Beispiele für virtuelle Entitäten bereitgestellt werden können: virtuelle Server, virtuelle Speicher, virtuelle Netzwerke, darunter virtuelle private Netzwerke; virtuelle Anwendungen und Betriebssysteme und virtuelle Clients.
-
In einem Beispiel kann die Verwaltungsschicht (630) die folgenden Funktionen bereitstellen: Ressourcenbereitstellung, Messen und Preisfindung, Benutzerportal, Dienstgüteverwaltung sowie Planung und Erfüllung der Dienstgütevereinbarung. Die Ressourcenbereitstellung ermöglicht eine dynamische Bereitstellung von Datenverarbeitungsressourcen und anderen Ressourcen, die verwendet werden, um Aufgaben in der Cloud-Computing-Umgebung durchzuführen. Messen und Preisfindung stellen eine Kostenerfassung (wenn Ressourcen in der Cloud-Computing-Umgebung verwendet werden) sowie eine Abrechnung oder Rechnungsstellung für die Inanspruchnahme dieser Ressourcen bereit. In einem Beispiel können diese Ressourcen Lizenzen für Anwendungs-Software aufweisen. Die Sicherheitsfunktion stellt eine Identitätsprüfung für Cloud-Nutzer und Aufgaben sowie Schutz für Daten und andere Ressourcen bereit. Ein Benutzerportal stellt einen Zugang zur Cloud-Computing-Umgebung für Nutzer und Systemadministratoren bereit. Eine Dienstgüteverwaltung stellt eine Zuordnung und Verwaltung von Cloud-Computing-Ressourcen bereit, sodass die erforderliche Dienstgüte erfüllt wird. Die Planung und Erfüllung der Dienstgütevereinbarung (Service Level Agreement, SLA) stellt eine Vorabanordnung und Bereitstellung von Cloud-Computing-Ressourcen bereit, deren künftiger Bedarf auf der Grundlage einer Dienstgütevereinbarung vorausberechnet wird.
-
Die Arbeitslastschicht (640) stellt Beispiele für Funktionalitäten bereit, für die die Cloud-Computing-Umgebung verwendet werden kann. Zu Beispielen für Arbeitslasten und Funktionen, die von dieser Schicht bereitgestellt werden können, gehören, ohne auf diese beschränkt zu sein: Abbildung und Navigation; Software-Entwicklung und Lebenszyklusverwaltung; Bereitstellung von Ausbildung in virtuellen Klassenzimmern; Datenanalyseverarbeitung; Transaktionsverarbeitung; und Ermitteln und Priorisieren von Refactoring-Operationen.
-
Bestimmte Ausführungsformen der vorliegenden Ausführungsformen wurden zwar gezeigt und beschrieben, doch für den Fachmann ist offensichtlich, dass auf der Grundlage der hier beschriebenen Lehren Änderungen und Anpassungen vorgenommen werden können, ohne von den Ausführungsformen und ihren übergeordneten Aspekten abzuweichen. Die beigefügten Ansprüche sollen daher alle Änderungen und Abwandlungen in ihrem Anwendungsbereich umfassen, die dem eigentlichen Gedanken und Anwendungsbereich der Ausführungsformen entsprechen. Darüber hinaus versteht sich, dass die Ausführungsformen ausschließlich durch die beigefügten Ansprüche definiert sind. Der Fachmann weiß, dass, wenn eine bestimmte Anzahl eines eingeführten Anspruchselements beabsichtigt ist, diese Absicht ausdrücklich im Anspruch erwähnt wird, und dass in Ermangelung einer solchen Erwähnung keine solche Einschränkung vorliegt. Als nicht einschränkendes Beispiel und zum besseren Verständnis werden in den folgenden beigefügten Ansprüchen die einleitenden Ausdrücke „mindestens ein/eine“ und „ein/eine oder mehrere“ verwendet, um Anspruchselemente einzuführen. Die Verwendung solcher Ausdrücke sollte jedoch nicht so ausgelegt werden, dass die Einführung eines Anspruchselements durch die unbestimmten Artikel „ein/eine“ einen bestimmten Anspruch, der ein solches eingefügtes Anspruchselement enthält, auf Ausführungsformen beschränkt, die nur ein solches Element enthalten, selbst wenn derselbe Anspruch die einleitenden Ausdrücke „ein/eine oder mehrere“ oder „mindestens ein/eine“ und unbestimmte Artikel wie „ein/eine“ umfasst; das Gleiche gilt für die Verwendung von bestimmten Artikeln in den Ansprüchen.
-
Bei den vorliegenden Ausführungsformen kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Ausgewählte Aspekte der vorliegenden Ausführungsformen können darüber hinaus die Form einer kompletten Hardware-Ausführungsform, einer kompletten Software-Ausführungsform (darunter Firmware, residente Software, Mikrocode usw.) oder eine Ausführungsform haben, bei der Software- und Hardware-Aspekte kombiniert sind, die allgemein hierin als „Schaltung“, „Modul“ oder „System“ bezeichnet werden können. Aspekte der vorliegenden Ausführungsformen können ferner die Form eines Computerprogrammprodukts in einem durch einen Computer lesbare(n) Speichermedium (oder -medien) aufweisen, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert ist/sind, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen. In dieser ausgeführten Form, dient das offenbarte System, ein Verfahren und/oder ein Computerprogrammprodukt dazu, die Funktionalität und den Betrieb einer Plattform für künstliche Intelligenz zu verbessern, um ein ML-Modell zu trainieren und das trainierte Modell zum Klassifizieren von Mikrodiensten im Hinblick auf Konformitätsanforderungen zu nutzen.
-
Aspekte der vorliegenden Ausführungsformen sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
-
Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, sodass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, sodass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, einen Herstellungsartikel aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktion/Schritts umsetzen.
-
Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, sodass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
-
Der Ablaufplan und die Blockschaltbilder in den Figuren veranschaulichen die Architektur, Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Ausführungsformen. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Implementierungen können die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder bzw. Schaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern bzw. Schaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.
-
Hier wurden zwar bestimmte Ausführungsformen zur Veranschaulichung beschrieben, es sei jedoch darauf hingewiesen, dass verschiedene Änderungen möglich sind, ohne vom Grundgedanken und Anwendungsbereich der Ausführungsformen abzuweichen. Entsprechend ist der Schutzumfang der Ausführungsformen nur durch die folgenden Ansprüche und ihre Entsprechungen begrenzt.