Mikroservices in PHP: Architektur und praktische Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Microservices für PHP relevant sind

Viele Jahre lang wurde PHP mit monolithischen Anwendungen assoziiert – WordPress, Laravel, Symfony. Mit steigender Last und zunehmender Komplexität der Geschäftslogik wird der Monolith jedoch unflexibel. Die Microservice-Architektur ermöglicht es, die Anwendung in unabhängige, lose gekoppelte Komponenten aufzuteilen, die jeweils separat entwickelt, getestet und skaliert werden können. In diesem Artikel werden wir uns ansehen, wie man Microservices in PHP aufbaut, die wichtigsten Prinzipien erläutern, praktische Codebeispiele zeigen und Tools für die Produktion besprechen.



1. Grundlagen der Microservice-Architektur in PHP

1.1. Was ist ein Microservice?

Ein Microservice ist ein kleiner, autonomer Service, der eine einzelne Geschäftsfunktion ausführt. Er verfügt über einen eigenen Datenspeicher, eine eigene API und kann in jeder beliebigen Sprache geschrieben sein. In unserem Fall in PHP. Der Hauptunterschied zum Monolithen: Jeder Service kann unabhängig aktualisiert und skaliert werden.



1.2. Schlüsselprinzipien

  • Einzelne Verantwortung – der Service ist für eine Geschäftseinheit verantwortlich (z. B. „Bestellungen“, „Benutzer“, „Zahlungen“).
  • Lose Kopplung – Services kommunizieren über das Netzwerk (HTTP/gRPC) oder Message Queues.
  • Unabhängige Bereitstellung – jeder Service hat seine eigene CI/CD-Pipeline.
  • Fehlertoleranz – der Ausfall eines Services sollte nicht die gesamte Anwendung zum Absturz bringen.


1.3. Wann eignet sich PHP für Microservices?

PHP eignet sich hervorragend für Microservices, wenn Sie moderne Frameworks (Laravel, Symfony, Slim) und PHP 8.1+ verwenden. Dank JIT-Kompilierung, asynchronen Bibliotheken (ReactPHP, Amp) und hervorragender Docker-Unterstützung können PHP-Services genauso leistungsfähig sein wie solche in Go oder Node.js.



2. Praktische Umsetzung: Beispiel eines Microservices in PHP

2.1. Entwurf des Services „Benutzerverwaltung“

Wir erstellen einen einfachen Microservice mit Slim 4 (einem leichtgewichtigen Framework). Der Service ist für CRUD-Operationen an Benutzern zuständig und speichert die Daten in einer separaten MySQL-Datenbank.



// index.php — Einstiegspunkt des Microservicesuse Psr\\Http\\Message\\ResponseInterface as Response;use Psr\\Http\\Message\\ServerRequestInterface as Request;use Slim\\Factory\\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/users', function (Request $request, Response $response) { // Hier sollte der Code zum Abrufen der Benutzerliste aus der DB stehen $payload = json_encode(['users' => []]); $response->getBody()->write($payload); return $response->withHeader('Content-Type', 'application/json');});

$app->post('/users', function (Request $request, Response $response) { $data = $request->getParsedBody(); // Validierung und Speicherung des Benutzers $payload = json_encode(['status' => 'created', 'id' => 123]); $response->getBody()->write($payload); return $response->withHeader('Content-Type', 'application/json');});

$app->run();


2.2. Kommunikation zwischen Services über REST

Angenommen, der Service „Bestellungen“ muss Benutzerdaten abrufen. Er sendet eine HTTP-Anfrage an den Benutzer-Service. Dafür verwenden wir Guzzle.



// Im Bestellungs-Serviceuse GuzzleHttp\\Client;

$client = new Client(['base_uri' => 'http://user-service:8080']);$response = $client->get('/users/123');$userData = json_decode($response->getBody(), true);


Wichtig: Fügen Sie immer Timeouts und Fehlerbehandlung hinzu, um kaskadierende Ausfälle zu vermeiden.



2.3. Asynchrone Kommunikation über Queues (RabbitMQ)

Für Aufgaben, die keine sofortige Antwort erfordern (E-Mail-Versand, Berichtserstellung), verwenden Sie Queues. Installieren Sie die Bibliothek php-amqplib.



// Senden einer Nachricht an die Queueuse PhpAmqpLib\\Connection\\AMQPStreamConnection;use PhpAmqpLib\\Message\\A                

Blogs

Buchempfehlungen