Hosting

Das Hosting einer GP-Komponente teilt sich in die Bereiche der Benutzeroberflächen, Workflows und Services auf.

Hosting von UIs

Das Hosting der PresentationEngine erfolgt derzeit über den IIS. Dabei hat diese einen dedizierten Anwendungspool namens Schleupen Presentation. In den konkreten Worker-Prozessen (w3wp.exe) sind die Bestandteile der einzelnen GP-Komponenten enthalten. 

Ausgeführt werden diese Worker-Prozesse auf Hosts mit der DeploymentRolle PresentationServer.

Besonderheit

Die Assemblies für die UIs der einzelnen GP-Komponenten werden im sogenannten PR.Storage (%ProgramData%\Schleupen.CS\PR.Storage) abgelegt und in die PresentationEngine auf Anforderung geladen. Die Anforderung kann das Laden eines DialogFlows, DialogSteps etc. sein.

Hosting von Workflows

Hingegen werden Workflows über MassTransit in den Prozessen "Schleupen.CS.PI.BPE.Workflows.MassTransit.WorkflowHostCli.exe" gehostet (WorkflowHost), die wiederum durch den sogenannten ProcessHost verwaltet werden. Diese werden im folgenden als ProcessHost-Jobs oder kurz als Jobs bezeichnet.

Der ProcessHost ist ein Windows-Dienst, der auf einem Host mit der Deploymentrolle WorkflowBackendServer ausgeführt wird.

Unter %ProgramData%\Schleupen.CS\ProcessHost\Jobs liegen die Beschreibungen, die bestimmen, welche Jobs durch den ProcessHost gestartet werden.

Der ProcessHost startet dann anhand dieser Jobbeschreibungen die Prozesse: 

Ein Jobbeschreibung hat dabei z.B. folgenden Inhalt:

{
  "name": "Schleupen.CS.its_Workflows",
  "executable": "C:\\Program Files\\Schleupen\\Schleupen.CS.PI.BPE.Workflows.MassTransit\\WorkflowHosting.Net\\Schleupen.CS.PI.BPE.Workflows.MassTransit.WorkflowHostCli.Net.exe",
  "args": "--Name Schleupen.CS.its",
  "level": "Workflows"
}

Wichtig ist, dass auch Services, die auf Web-APIs basieren, auch über den ProcessHost gehostet werden.

Reihenfolge

CSDeploy muss sicherstellen, dass zu jedem Zeitpunkt der Installation die passenden Jobs laufen. Die korrekte Reihenfolge des Startens der Jobs beim Starten und Stoppen wird hierfür durch den Level angegeben.

Hierbei existieren folgende vordefinierte Werte:

  • Services.ServiceRegistry
    • Services der Service-Registry, die mit Consul (von HashiCorp, gekapselte Service-Registry der Web-APIs) kommunizieren. Derartig gekennzeichnete Jobs werden als erstes gestartet.
  • Services.Deployment
    • Services, die während der Installation benötigt werden.
  • Services
    • Alle anderen Services (WebAPI).
  • Workflows.Marktkommunikation
    • Workflows, die für die Marktkommunikation (MaKo-Bausteine) relevant sind.
  • Workflows
    • Alle anderen Workflows.

In der Regel wird für Länder / GP-Komponenten Services zu verwenden. Install-CSWorkflows generiert automatisch die passenden Level für die Workflow-Jobs.

Workflows

Der Beispiel-Parameter "Schleupen.CS.its" für die "WorkflowHostCli.exe" fungiert dabei als Filterkritierium der Workflows, die sich unter dem Verzeichnis %Programdata%\Schleupen.CS\Workflows durch die Installation abgelegt werden und in dem "WorkflowHostCli.exe" dann gehostet werden.

In diesen Workflow-Verzeichnissen liegen jeweils u.a. die Assemblies mit den MassTransit-StateMachines und den Datenverträgen.

Der ProcessHost startet dann anhand dieser Jobbeschreibungen die Prozesse: 

Das WorkflowHostCli.exe startet dabei jeweils einen "MassTransit-Host"​​' pro Workflow-Typ:

IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.Host(new Uri(RabbitMqConstants.Endpoints.HostAddress), "<a workflow type>", h =>
    {
        ...
    });

    cfg.ReceiveEndpoint("<a workflow type>", e =>
    {
        ...
    });
    ...
});

Damit ist ein Job-Prozess Consumer der entsprechenden RabbitMQ-Queue der gehosteten Workflow-Typen.

Resilienzmechanismen

  • Retry-Mechanismus von MassTransit mit folgendem Verhalten: exponential backup. Nach Ablauf wird die Nachricht in den Deadletter-Store verschoben.
  • Verwendung der Transactional Outbox von MassTransit-
  • Circuit Breaker bei der Zustellung von Nachrichten an die Consumer, siehe: Killswitch.

Anmerkung: Wir befinden uns derzeit auf dem Weg der Containerisierung! Das bedeutet, dass sich hier Änderungen von dieser Darstellung ergeben können. 

Hosting von Services

Die WCF-Services werden analog zu Services von Ländern gehostet und abgelegt: Siehe Hosting Länder.

WebAPIs, die auf .net 8 und höher basieren werden per ProcessHost gehostet. Den entsprechenden Jobs wird automatisch ein von ASP.NET Core zu verwendender Port übergeben. Hierzu wird das Argument  --WebAPIPort verwendet.

Resilienzmechanismen

Im Folgenden werden die Resilienzmechanismen des ProcessHosts beschrieben.

Health/Readiness

Es wird regelmäßig ein Health-Check der Jobs ausgeführt, der auf .NET Sockets basiert. Dieser verwendet den mit --Port angegebenen Port. Wenn das Ergebnis fehlerhaft ist, wird der entsprechende Job durch den ProcessHost neu gestartet.

Der Readiness-Check wird u.a. beim Starten verwendet.

Start

Es werden immer nur maximal so viele Jobs gleichzeitig gestartet, wie durch folgende Formel definiert: [Anzahl CPUs]/2. Dadurch soll die durchgängige Lauffähigkeit des System gewährleistet werden. Dies kann in der "app.config" mit  Wert Schleupen.CS.PI.DP.Hosting.ProcessHost.ConcurrentStartRateLimit übersteuert werden.

Logging

Logdateien sind unter %ProgramData%\Schleupen.CS\ProcessHost zu finden.

Das Logging kann mittels "NLog.config" konfiguriert werden. Diese liegt unter %ProgramData%\Schleupen\Windows Services\schleupen.cs.pi.dp.hosting.processhost\NLog.config

Monitoring

Der aktuelle Status der Jobs kann mit dem Cmdlet Get-CSProcessHostJobStatus angezeigt werden:

1686650079998-722.png​​​​​​

Entwicklung

Als Entwickler kann es nötig sein, die Jobs manuell zu starten oder zu stoppen. Dazu gibt es folgende Cmdlets:

Start-CSProcessHostJob -Name "Schleupen"
Stop-CSProcessHostJob-Name "Schleupen" -Wait
Restart-CSProcessHostJob -Name "Schleupen" -Wait

Der Level kann hier auch angegeben werden. Dann werden nur Jobs berücksichtigt, die den angegeben Level haben.

Der Windows-Dienst kann ebenfalls per Cmdlet neu gestartet werden:

Restart-CSProcessHost
Restart-CSProcessHost -Start
Restart-CSProcessHost -Stop

Whitelist

Für Entwickler besteht die Möglichkeit, eine Whitelist in der Windows-Registry unter HKEY_LOCAL_MACHINE\SOFTWARE\Schleupen\SystemProcessHostWhitelist anzugeben. Dies ist immer eine mit ; separierte Liste der Job-Namen.

Diese filtert dann die zu startenden Jobs. Dies ermöglicht ein schnelleres Starten nur der für den Entwickler relevanten Jobs.

Chatbot not allowed
Cookie Consent mit Real Cookie Banner