In-Process und Remote
Clustron Zaris läuft auf zwei Arten: In-Process (eingebettet in Ihre Anwendung) und Remote (verbunden mit einem Cluster). Dieser Artikel erklärt, wie sich die beiden unterscheiden, wann Sie welche verwenden und wie Sie zwischen ihnen wechseln.
Beide nutzen dieselbe Client-API und dasselbe Programmiermodell. Sie schreiben Ihren Code einmal, und die Wahl zwischen In-Process und Remote wird vollständig dadurch ausgedrückt, welche Connection String Sie verwenden — zaris://inproc/store für eingebettet, zaris://host:port/store (oder zariss:// für TLS) für einen Cluster. Da sich nur der String ändert, können Sie während der Entwicklung In-Process starten und in der Produktion auf einen Cluster wechseln, ohne den Anwendungscode anzufassen.
In-Process
Ein In-Process-Store läuft innerhalb des eigenen Prozesses Ihrer Anwendung. Es ist weder ein separater Server noch eine Netzwerkverbindung beteiligt, und die Daten werden im Arbeitsspeicher gehalten. Sie wählen ihn über den reservierten Host inproc:
zaris://inproc/orders
Verwenden Sie In-Process, wenn Sie ohne Infrastruktur arbeiten möchten:
- Lokale Entwicklung, bei der der Store mit Ihrer Anwendung startet und stoppt.
- Unit- und Integrationstests, bei denen Sie einen Store, aber keinen Cluster benötigen.
- Single-Instance-Anwendungen, die keine Daten prozessübergreifend teilen.
Da kein Netzwerk-Hop anfällt, ist In-Process die schnellste Betriebsart des Stores. Ein In-Process-Store kann kein TLS verwenden — es gibt keine Netzwerkverbindung, die abzusichern wäre.
Remote
Eine Remote-Verbindung erreicht einen Store, der auf einem Cluster aus Nodes läuft. Ein Node ist eine einzelne laufende Instanz des Stores, typischerweise eine pro Maschine. Die Nodes kommunizieren über das Netzwerk, um Daten zu replizieren und die Arbeit zwischen Anwendungsinstanzen zu koordinieren. Sie wählen ihn, indem Sie einen oder mehrere Seed-Hosts angeben:
zaris://node-a:7861,node-b:7861/orders
zariss://node-a:7863/orders?ca=/etc/zaris/ca.pem
Durch Kommas getrennte Hosts bilden eine Seed-Liste, anhand derer der Client den Rest des Clusters erkennt und Failover durchführt. Verwenden Sie Remote, wenn ein einzelner Prozess nicht ausreicht:
- Produktionssysteme, die Hochverfügbarkeit benötigen.
- Anwendungen, die als mehrere Instanzen laufen und Zustand teilen müssen.
- Workloads, die über mehr als eine Maschine skalieren müssen.
Eine Form wählen
Die folgende Tabelle vergleicht beide, damit Sie entscheiden können, welche zu einer bestimmten Umgebung passt.
| Aspekt | In-Process | Remote |
|---|---|---|
| Connection String | zaris://inproc/store | zaris(s)://host:port/store |
| Ausführung | Innerhalb Ihres Anwendungsprozesses | Über mehrere Nodes hinweg |
| Netzwerk | Keines | Erforderlich |
| TLS | Nicht verfügbar | Verfügbar über zariss:// |
| Einrichtung | Keine | Installation erforderlich |
| Skalierung | Einzelne Instanz | Mehrere Instanzen |
| Koordination | Lokal zum Prozess | Über Instanzen hinweg geteilt |
Das Leitbild lautet „heute In-Process, morgen Remote“. Entwickeln und testen Sie mit zaris://inproc/... und wechseln Sie dann zu einem zaris://host.../...-String, sobald Sie Verfügbarkeit oder Skalierung benötigen. Derselbe Codepfad bedient beide.
Zwischen beiden wechseln
Sie wählen In-Process oder Remote über die Connection String, nicht über Code. Halten Sie den String im Abschnitt ConnectionStrings und variieren Sie seinen Wert je Umgebung (siehe Einen Client beziehen).
Ein In-Process-Store:
{
"ConnectionStrings": {
"orders": "zaris://inproc/orders"
}
}
Ein Remote-Cluster — gleicher Schlüssel, anderer Wert:
{
"ConnectionStrings": {
"orders": "zaris://node-a:7861,node-b:7861/orders"
}
}
Der Anwendungscode, der den Store registriert und aufruft, ist in beiden Fällen identisch:
services.AddClustronZaris(configuration, "orders");
var client = await provider.GetAsync("orders");
await client.PutAsync("key", "value");