Mikroservices in PHP: Architektur und Praxis von A bis Z

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

Mikroservices in PHP: Architektur und Praxis von A bis Z

\n\n

In 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\n

1. Was sind Mikroservices und warum PHP?

\n\n

Die 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\n

Warum 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
\n\n

2. Architektur einer Mikroservice-Anwendung in PHP

\n\n

Betrachten 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\n

Wichtige 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
\n\n

3. Praktische Umsetzung: Erstellen eines Mikroservices in PHP

\n\n

Wir schreiben einen einfachen Mikroservice zur Benutzerverwaltung mit dem Slim 4 Framework.

\n\n

3.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\n

3.2. Kommunikation zwischen Services

\n\n

Fü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                

Blogs

Buchempfehlungen