Mikroservices mit PHP: Architektur und Praxis

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 auf PHP: Architektur und Praxis



In der modernen Webentwicklung weicht die monolithische Architektur zunehmend der Microservice-Architektur. PHP, traditionell mit Monolithen assoziiert (WordPress, Laravel-Monolith), eignet sich hervorragend für den Aufbau verteilter Systeme. In diesem Artikel werden wir die wichtigsten Prinzipien der Microservice-Architektur auf PHP erläutern, praktische Codebeispiele und Tools betrachten, die Ihnen helfen, vom Monolithen zu einem flexiblen System überzugehen.



Was sind Microservices und warum braucht man sie auf PHP



Die Microservice-Architektur ist ein Ansatz, bei dem eine Anwendung in mehrere unabhängige Dienste aufgeteilt wird. Jeder Dienst ist für seine eigene Geschäftslogik verantwortlich (Authentifizierung, Zahlungen, Benachrichtigungen) und kann separat entwickelt, bereitgestellt und skaliert werden.



Warum PHP für Microservices geeignet ist:

  • Schneller Start — PHP-Frameworks (Laravel, Symfony, Lumen) ermöglichen es, einen Dienst in wenigen Minuten zu erstellen.
  • Große Community — Tausende fertige Pakete für die Arbeit mit Warteschlangen, APIs und Datenbanken.
  • Flexibilität — PHP kann mit anderen Sprachen (Go, Python) in einem System kombiniert werden.


Denken Sie jedoch daran: Microservices erhöhen die Komplexität. Sie sollten ein Projekt nicht aufteilen, wenn Sie eine kleine Anwendung haben. Beginnen Sie mit einem Monolithen und gliedern Sie dann mit dem Wachstum Dienste aus.



Architektur eines typischen Microservices auf PHP



Betrachten wir die grundlegende Struktur eines einzelnen Dienstes. Angenommen, wir haben einen Dienst UserService, der für die Registrierung und Autorisierung von Benutzern verantwortlich ist.



Projektstruktur:

user-service/├── api/│   └── index.php          # Einstiegspunkt (REST API)├── src/│   ├── Controllers/│   │   └── AuthController.php│   ├── Models/│   │   └── User.php│   ├── Services/│   │   └── AuthService.php│   └── Database/│       └── migrations/├── config/│   └── database.php├── composer.json├── Dockerfile└── .env


Jeder Dienst:

  • Hat ein eigenes Repository und eine eigene Datenbank (oft PostgreSQL oder MySQL).
  • Kommuniziert mit der Außenwelt über REST API oder gRPC.
  • Ist in einem Docker-Container verpackt.


Beispiel eines einfachen REST-Controllers auf Lumen (Mikro-Framework von Laravel):

<?php

namespace App\\Http\\Controllers;

use Illuminate\\Http\\Request;use App\\Models\\User;

class AuthController extends Controller{ public function register(Request $request) { // Validierung $this->validate($request, [ 'email' => 'required|email|unique:users', 'password' => 'required|min:8' ]);

// Benutzer erstellen $user = User::create([ 'email' => $request->input('email'), 'password' => app('hash')->make($request->input('password')) ]);

return response()->json(['user_id' => $user->id], 201); }}


Datenaustausch zwischen Diensten: synchron und asynchron



Microservices können nicht isoliert existieren. Es gibt zwei Hauptkommunikationswege:



1. Synchron (HTTP/REST)

Dienst A ruft direkt die API von Dienst B auf. Einfach, erzeugt aber eine feste Kopplung.

<?php// Im Dienst OrderService$httpClient = new \\GuzzleHttp\\Client();$response = $httpClient->post('http://user-service/api/validate', [    'json' => ['token' => $token]]);

if ($response->getStatusCode() === 200) { // Benutzer ist gültig}


2. Asynchron (Warteschlangen / RabbitMQ)

Der Dienst sendet eine Nachricht an einen Broker (RabbitMQ, Kafka), und ein anderer Dienst verarbeitet sie im Hintergrund. Dies reduziert die Last und macht das System ausfallsicherer.



Beispiel für das Senden eines Ereignisses über RabbitMQ mit der Bibliothek php-amqplib:

<?phprequire_once __DIR__ . '/ve                

Blogs

Buchempfehlungen