Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

巴扎黑
巴扎黑Original
2017-08-16 09:33:061479Durchsuche


Zusammenfassung: Die Konfiguration von Containern oder Anwendungsbereitstellungen ist kompliziert und variabel. Um die Flexibilität und Wiederverwendbarkeit des Systems sicherzustellen, konzentriert sich dieser Artikel auf die Verwendung der Vorlagen-Engine Erstellen Sie als Kern ein einheitliches Container-Bereitstellungsframework.

Bei der Verwendung von Containern wird jeder eine Erfahrung machen. Es gibt etwa vierzig oder fünfzig Containerkonfigurationselemente, und um sie zu verstehen, ist ein gewisser technischer Hintergrund erforderlich. Während des Bereitstellungsprozesses stoßen Benutzer häufig auf verschiedene Probleme beim Starten von Containern, beim Bereitstellen von Anwendungen oder beim Aktualisieren, da sie die Konfigurationsparameter nicht verstehen. Wie Benutzer ihr Verständnis verschiedener Parameter beschleunigen und je nach Anwendungstyp und Szenario entsprechend erweitern können. Dieser Artikel konzentriert sich auf die Untersuchung und Lösung dieser Probleme.

Die Containererstellung oder Anwendungsbereitstellungskonfiguration ist komplex und variabel. Um die Systemflexibilität und Wiederverwendbarkeit sicherzustellen, wurde beschlossen, ein einheitliches Containerbereitstellungsframework mit der Template-Engine als Kern zu erstellen. Dieser Artikel konzentriert sich auf den Aufbau einer Template-Engine und das Funktionsprinzip beim Aufbau eines Container-Bereitstellungsframeworks mit der Template-Engine als Kern. In der Template-Engine sind Dateien, die bestimmten Formatspezifikationen entsprechen, die Grundlage. Für Standorte, die sich je nach Bereitstellungsprozess ändern können oder geändert werden müssen, werden Parameter zur Identifizierung der Site verwendet. Die Definition des Parameterbezeichners wird an das Ende der Vorlagendatei angehängt, um eine semantische Transformation des Parameterbezeichners durchzuführen. Der spezifische Inhalt der Vorlage oder Parameteridentifikation kann über eine bestimmte Konfigurationsdatei von den Client-Anforderungsparametern gelesen oder empfangen werden.

Vorlagen-Engine

Die Vorlagen-Engine besteht aus vier Modulen: Vorlagendefinition, Vorlagenanalyse, Vorlagenkonvertierung und Vorlagenausführung. Die Vorlagendefinition hängt vom Verwaltungsframework des Containerclusters ab und ist eine nicht ausführbare Datei. Der Vorlagenparser ist für die Aufteilung der Vorlage in zwei Teile verantwortlich: Ein Teil bildet die nicht ausführbare Bereitstellungsvorlage; der andere Teil bildet die Definitionsbeschreibung der Parameter in der Bereitstellungsvorlage. Die Parameterdefinitionsbeschreibung wird mit der Site-ID in vereinheitlicht Bereitstellungsvorlage über eine eindeutige Site-ID. Eine Korrespondenz. Der Vorlagenkonverter akzeptiert Parameterwerte und kombiniert sie mit der im Parser generierten Bereitstellungsvorlage. Der Parameterwertbezeichner wird mit dem Platzhalterbezeichner in der Vorlage verknüpft. Der Parameterwert wird durch den Platzhalterbezeichner ersetzt, um eine ausführbare Datei zu generieren. Der Vorlagenausführer ist für die Erstellung von Objekten basierend auf der Vorlage verantwortlich und im Allgemeinen für das Planungsframework oder die Container-Engine verantwortlich.

Das Ausführungsprinzip der Template-Engine ist in Abbildung 1 dargestellt:
PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

Abbildung 1 Das Ausführungsprinzip der Template-Engine


Vorlagendefinition

Die Vorlagendefinition umfasst zwei Arten von Informationen: Identifizierung der Bereitstellungsparameter;

Nehmen Sie als Beispiel die Bereitstellungsvorlage von Kubernetes. Die Bereitstellungsvorlage umfasst vier verschiedene Arten von Definitionen, nämlich: Ressourcen, Versionen, Informationsbeschreibungen und Datenkonfigurationen.

  • Ressource: Stellt den in Kubernetes definierten Objekttyp dar.

  • Version: Gibt die Version des Objekts an

  • Informationsbeschreibung: Einschließlich Objektname, Beschriftung, Kommentar usw., Bereitstellung eines Index für das Objekt Suche oder Terminplanung.

  • Datenkonfiguration: Verantwortlich für die Definition der Standards, denen der Container bei seiner Ausführung folgt, einschließlich Ports, Umgebungsvariablen, Ressourcen, Zeitplanung, Gesundheitsprüfungen usw.

Der Parameterbezeichner besteht aus 6 Attributen, nämlich Parameter, Name, Beschreibung, Anzeigename, Wert, Typ.

  • Parameter: Parameterdefinitions-Startflag

  • Beschreibung: Parameter-Eingabeaufforderungsinformationen

  • Anzeigename: Spezifisch semantische Informationen

  • Name: Entspricht dem Referenzparameternamen und gibt an, dass die Beschreibungsinformationen der entsprechende Referenzparameter sind

  • Wert: Parameterstandardwert

  • Typ: stellt verschiedene Stile dar. Der Kunde präsentiert bestimmte Stile entsprechend dem Typ

Am Beispiel des Namespace-Objekts in Kubernetes ist die vollständige Definition der Vorlage im folgenden Code dargestellt:

apiVersion: v1kind: Namespacemetadata:
  name: ${name }
---
{"parameters":
  [
    {      "description": "命名空间",      "displayName": "命名空间",      "name": "name",      "value": "",      "type": "String"
    }
]}

Der obige Code enthält zwei Teile: Bereitstellung Vorlage und Parameter veranschaulichen.

Die Bereitstellungsvorlage ist wie im folgenden Codeblock dargestellt:

apiVersion: v1kind: Namespacemetadata:
  name: ${name }

Die Bereitstellungsvorlage definiert den gesamten vom Objekt erstellten Inhalt. Die Bedeutung der Felder in der Vorlage wird wie folgt beschrieben folgt:

  • apiVersion: Allgemeine Optionen, Versionsinformationen definieren

  • Art: Objekttypen definieren, verschiedene Objekte unterscheiden

  • Metadaten: Definieren Sie, was bei der Bereitstellung angegeben wird. Parameter-Schlüssel-Wert-Paar

  • ${}: Stellt den Referenzwert des Parameters dar, der den Parameter

    ersetzen kann

Parameter-ID, die die Client-Dynamik definiert. Das Anzeigeformular nach Erhalt der Parameter zeigt das folgende Codebeispiel zur Definition der Parameter-Identifizierung:

{"parameters":  [
    {
      "description": "命名空间",
      "displayName": "命名空间",
      "name": "name",
      "value": "",
      "type": "String"
    }
]}

Die Parameter-Identifizierung definiert ein einheitliches Format. Durch semantische Transformation werden komplexe Konfigurationen in eine für Benutzer leicht verständliche Weise transformiert. Der Client liest den Parameterbezeichner, abstrahiert die Eingabeparameter über den Vorlagenparser, zeigt das erforderliche Formular an und stellt die Benutzereingabefunktion bereit.

Vorlagendefinitionen werden von Fachleuten geschrieben, die mit Kubernetes oder Docker vertraut sind. Basierend auf spezifischen Geschäftsszenarien können Echtzeit- und dynamische Anpassungen vorgenommen werden, um die Flexibilität und Skalierbarkeit der Bereitstellung sicherzustellen. Gleichzeitig stellt das System Basisvorlagen basierend auf unterschiedlichen Objekten zur Verfügung. Benutzer können auch Vorlagen erstellen und pflegen, die auf einem bestimmten Wissenshintergrund basieren.

Vorlagenparser

ruft die Parameterkennungen in der Vorlage über die Eingabe- und Ausgabeströme ab, führt eine semantische Konvertierung durch und ruft leicht verständliche Konfigurationsparameter ab. Das Funktionsprinzip des Vorlagenparsers ist in Abbildung 2 unten dargestellt:

PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

Abbildung 2 Das Funktionsprinzip des Vorlagenparsers


Der Client initiiert eine Anfrage zum Erstellen eines Objekts. Nach Erhalt der Anfrage ordnet der Server automatisch die Basisvorlage entsprechend dem angeforderten Objekttyp zu. Die Basisvorlage wird über den Dateistream gelesen. Während des Lesevorgangs wird das Parameter-Flag als Ausgangspunkt zum Abrufen von Parameterbeschreibungsinformationen verwendet. Nach Abschluss der Analyse werden die Parameter in Form einer JSON-Zeichenfolge an den Client zurückgegeben. Der Client generiert dynamisch ein Formular, das vom Benutzer basierend auf der JSON-Zeichenfolge ausgefüllt werden muss zum Inhalt des Formulars.

Der Vorlagenparser konzentriert sich auf das Parsen der Parameterbezeichner in der Vorlagendefinition. Durch semantische Transformation und Informationsaufforderungen werden leicht identifizierbare Eingabeelemente gebildet. Für Benutzer können komplexe technische Indikatoren nach Abschluss der Analyse abgeschirmt werden, und der Fokus des Benutzers verlagert sich von der Technologie auf die Geschäftskonfiguration. Minimieren Sie die Nutzungskosten und erhöhen Sie den Bedienkomfort.

Vorlagenkonverter

Der Vorlagenkonverter ist der Kern der Vorlagen-Engine und konzentriert sich auf die Lösung von drei Problemen: Bereitstellungsvorlagen abrufen, Parameter und Werte konvertieren und ausführbare Dateien erstellen. Der Client weist den Parametern im Vorlagenparser echte Werte zu und übergibt sie an den Server. Der Server liest den Vorlageninhalt und beendet das Schreiben des gelesenen Inhalts in eine neue Datei Dateistrom, generiert eine Bereitstellungsdatei und ersetzt dann die Parameter in der Bereitstellungsdatei durch Parameterwerte, um die endgültige ausführbare Datei zu generieren. Das Funktionsprinzip des Vorlagenkonverters ist in Abbildung 3 dargestellt:

PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

Abbildung 3 Das Funktionsprinzip des Vorlagenkonverters


Bereitstellungsvorlage abrufen: Wie aus der Vorlagendefinition ersichtlich ist, enthält die Vorlage zwei Teile: Bereitstellungsvorlage und Parameteridentifikation. Der Vorlagenkonverter muss zunächst die Vorlage bereitstellen, die Bereitstellungsvorlage in der Vorlagendefinition über den Dateistream lesen und sie während des Lesevorgangs mit der Parameterkennung aufteilen, um die Bereitstellungsvorlage zu erhalten.

参数值转化:核心是解决参数与占位符关联和赋值问题。模板转换器通过模板参数定义的name属性key关联,模板转化器拿到参数值以后,获取参数值对应的key(key在部署模板唯一),并且根据key,替换部署模板中占位标识,完成参数替换。

构建可执行文件:通过文件流的方式,把前两部转化的字符流输出到文件,构建出可执行文件。

模板转换器执行以后,生成的可执行文件如下所示:

apiVersion: v1kind: Namespacemetadata:
  name: ruffy

模板执行器

模板执行器接收可执行的部署文件,对于文件中定义的部署类型进行解析,拆分成若干个可执行任务。容器引擎根据收到的任务执行操作,最终协同完成部署工作。模板执行器往往依赖于容器调度和执行引擎。以Kubernetes容器编排框架为例,模板转化器生成的可执行文件,以字符流的方式传输到Kubernetes的Server端,Kubernetes根据传入文件,自动解析文件内容,并且做出相关操作。对于模板引擎而言,无论是Kubernetes还是Swarmkit都能够得到友好的支持。模板执行器的工作原理如图4所示:

PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

Abbildung 4 Das Funktionsprinzip des Template-Executors


Das Ergebnis nach der Ausführung des Template-Executors ist in Abbildung 5 dargestellt:
PHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine

Abbildung 5


Durch die Template-Engine kann die Konfiguration des Containers flexibel verwendet werden, unabhängig davon, ob es sich um die Containerbereitstellung oder die Erstellung anderer Ressourcenthemenobjekte handelt. Es gibt entsprechende Template-Unterstützung. Die Vorlagenverarbeitungs-Engine muss den Code nicht ständig entsprechend den Vorlagenänderungen ändern. Gleichzeitig können sich Benutzer auf Konfigurationsinformationen aus der Semantik konzentrieren, die sie verstehen, ohne auf bestimmte technische Details und Implementierungsmethoden achten zu müssen, wodurch das Betriebsverhalten vereinfacht und die Nutzungskosten gesenkt werden.

Das obige ist der detaillierte Inhalt vonPHP-Designmuster-Container-Bereitstellungsframework basierend auf der Template-Engine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn