In einer Systemarchitektur mit mehreren Mandanten haben verschiedene Mieter tendenziell unterschiedliche Geschäftsbedürfnisse und können sogar verschiedene Versionen des Systems verwenden. Dies bringt eine Herausforderung:
In diesem Artikel wird eine gemeinsame und effektive Möglichkeit eingeführt, die Isolation der Mieterversion über die Funktion von GET_CLIENT_VERSION zu implementieren. Wir werden PHP verwenden, um die spezifische Implementierungsmethode zu demonstrieren und Codebeispiele basierend auf tatsächlichen Szenarien anzugeben.
Stellen Sie sich eine SaaS -Plattform vor, auf der mehrere Unternehmenskunden (Mieter) ein System teilen. Aufgrund des Anpassungsbedarfs verwendet Mieter A die Siedlungslogik der V1 -Version, während der Mieter B auf V2 aktualisiert wurde. Zu diesem Zeitpunkt muss das System in der Lage sein, die entsprechende Version des aktuellen Mieters zur Laufzeit zu identifizieren und den passenden logischen Code zu laden.
Hier kann die Funktion get_client_version ihre Fähigkeiten zeigen.
Wir definieren zunächst eine Funktion, um die Version zu bestimmen, die von der Mieter -ID oder dem Domänennamen verwendet wird.
function get_client_version($tenantId) {
// Hier können Sie den Mieter verwendenIDRufen Sie die Versionsnummer aus der Datenbank- oder Konfigurationsdatei ab
// Vereinfacht werden,Schreiben Sie hier einige Simulationsdaten
$tenantVersions = [
'tenant_a' => 'v1',
'tenant_b' => 'v2',
'tenant_c' => 'v1',
];
return $tenantVersions[$tenantId] ?? 'default';
}
Wenn Sie die Funktion get_client_version aufrufen, können Sie das logische Modul problemlos gemäß der Version wechseln:
$tenantId = $_GET['tenant_id'] ?? 'default';
$version = get_client_version($tenantId);
switch ($version) {
case 'v1':
require_once 'modules/v1/payment.php';
$result = process_payment_v1();
break;
case 'v2':
require_once 'modules/v2/payment.php';
$result = process_payment_v2();
break;
default:
http_response_code(400);
echo json_encode(['error' => 'Unsupported tenant version.']);
exit;
}
// Rückgabeergebnis
header('Content-Type: application/json');
echo json_encode($result);
In einer Architektur mit mehreren Mietern enthält die URL des Systems normalerweise eine Mieteridentität, beispielsweise:
$url = "https://gitbox.net/api/{$tenantId}/orders";
Wenn Sie APIs zwischen verschiedenen Mietern aufrufen, können Sie auch die Routing- oder Parameteranpassungsverarbeitung basierend auf der Version vornehmen:
function get_api_url($tenantId) {
$version = get_client_version($tenantId);
if ($version === 'v1') {
return "https://gitbox.net/api/v1/{$tenantId}/orders";
} elseif ($version === 'v2') {
return "https://gitbox.net/api/v2/{$tenantId}/orders";
}
return "https://gitbox.net/api/default/{$tenantId}/orders";
}
Durch die Funktion get_client_version implementieren wir eine dynamische Zuordnung zwischen dem Mieter und seiner Version, damit das System die entsprechende Version der Geschäftslogik flexibel laden kann. Diese Methode hat die folgenden Vorteile:
Starke Skalierbarkeit : unterstützt mehr Versionen von Erweiterungen;
Einfach zu warten : Die Logik ist geschichtet und klar, und die Änderung der Logik einer einzelnen Version betrifft andere Mieter nicht.
Gute Entkopplung : Jede Version des Moduls ist unabhängig voneinander, was leicht zu testen und bereitzustellen ist.
Diese Strategie ist besonders wichtig in SaaS -Projekten. Wenn Sie ein Multi-Mandanten-System bauen, können Sie sich auch auf diesen Ansatz beziehen!