Mikroservices in PHP: Architektur und Praxis von A bis Z
\n\nIn der modernen Webentwicklung weicht die monolithische Architektur zunehmend Mikroservices. PHP ist trotz Stereotypen eine hervorragende Plattform für den Aufbau verteilter Systeme. In diesem Artikel werden wir uns ansehen, wie man eine Mikroservice-Architektur in PHP entwirft und implementiert, von der Theorie bis zu praktischen Codebeispielen.
\n\n1. Was sind Mikroservices und warum PHP?
\n\nDie Mikroservice-Architektur ist ein Ansatz, bei dem eine Anwendung in kleine, unabhängig bereitstellbare Services aufgeteilt wird. Jeder Service ist für eine eigene Geschäftsfunktion verantwortlich und kommuniziert mit anderen über leichte Protokolle (normalerweise HTTP/REST oder Message Queues).
\n\nWarum eignet sich PHP für Mikroservices?
\n- \n
- Schnelle Entwicklung und niedrige Einstiegshürde \n
- Reichhaltiges Ökosystem an Frameworks (Laravel, Symfony, Slim) \n
- Hervorragende Unterstützung für Docker und Containerisierung \n
- Viele Bibliotheken für die Arbeit mit Warteschlangen (RabbitMQ, Redis) \n
- Gute Kompatibilität mit API-Gateways \n
2. Architektur einer Mikroservice-Anwendung in PHP
\n\nBetrachten wir eine typische Architektur für einen Online-Shop, der in Mikroservices aufgeteilt ist:
\n\n// Projektstruktur\n/user-service - Benutzerverwaltung\n/product-service - Produktkatalog\n/order-service - Auftragsabwicklung\n/payment-service - Zahlungsabwicklung\n/api-gateway - Einheitlicher Einstiegspunkt\n\n\nWichtige Prinzipien:
\n- \n
- Unabhängige Datenbanken — jeder Service hat seine eigene DB \n
- Lockere Kopplung — Services kommunizieren nur über APIs \n
- Fehlertoleranz — der Ausfall eines Services bringt nicht die gesamte Anwendung zum Stillstand \n
- Skalierbarkeit — nur die Leistung problematischer Services kann erhöht werden \n
3. Praktische Umsetzung: Erstellen eines Mikroservices in PHP
\n\nWir schreiben einen einfachen Mikroservice zur Benutzerverwaltung mit dem Slim 4 Framework.
\n\n3.1. Grundlegende Service-Struktur
\n\n<?php\n// public/index.php - Einstiegspunkt des Mikroservices\n\nuse Psr\\Http\\Message\\ResponseInterface as Response;\nuse Psr\\Http\\Message\\ServerRequestInterface as Request;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\n$app = AppFactory::create();\n\n// Middleware für CORS und JSON\n$app->addBodyParsingMiddleware();\n$app->addErrorMiddleware(true, true, true);\n\n// Routen\n$app->get('/users', function (Request $request, Response $response) {\n $users = [\n ['id' => 1, 'name' => 'Ivan', 'email' => 'ivan@example.com'],\n ['id' => 2, 'name' => 'Maria', 'email' => 'maria@example.com']\n ];\n $payload = json_encode($users);\n $response->getBody()->write($payload);\n return $response->withHeader('Content-Type', 'application/json');\n});\n\n$app->post('/users', function (Request $request, Response $response) {\n $data = $request->getParsedBody();\n // Logik zum Speichern des Benutzers in der DB\n $newUser = [\n 'id' => rand(100, 999),\n 'name' => $data['name'],\n 'email' => $data['email']\n ];\n $payload = json_encode($newUser);\n $response->getBody()->write($payload);\n return $response->withHeader('Content-Type', 'application/json')->withStatus(201);\n});\n\n$app->run();\n\n\n3.2. Kommunikation zwischen Services
\n\nFür die Kommunikation zwischen Mikroservices verwenden wir GuzzleHttp – einen leistungsstarken HTTP-Client für PHP:
\n\n<?php\n// Beispiel für den Aufruf des user-service aus dem order-service\n\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Client;\n\nclass UserServiceClient\n{\n private $client;\n \n public function __construct()\n {\n $this->client = new Client([\n 'base_uri' => 'http://user-service:8080',\n 'timeout' => 2.0,\n