PHP Microservices: Einstieg für Anfänger 2024

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

PHP Microservices: So startest du durch, ohne durchzudrehen

\n\n

Kennst du das Gefühl, wenn deine monolithische PHP-Anwendung auf über 200.000 Codezeilen angewachsen ist und du bei jedem Commit den Atem anhältst? Ein Fehler im Warenkorb-Modul – und die ganze Website crasht. Kommt dir bekannt vor? Willkommen im Club der Monolith-Überlebenden.

\n\n

Doch hier kommt die gute Nachricht: PHP Microservices sind keine Rocket Science. Es sind einfach kleine, unabhängige Anwendungen, die per HTTP oder über Queues miteinander kommunizieren. Und ja, PHP ist dafür bestens geeignet. Ungläubig? Laravel, Symfony und sogar „reines“ PHP meistern die Rolle als Microservice mit Bravour.

\n\n

In diesem Artikel zeige ich dir die Microservices-Architektur mit PHP anhand echter Codebeispiele. Du erfährst, wie du startest, welche Tools du wählen solltest und wie du typische Anfängerfehler vermeidest. Los geht's!

\n\n

Was sind PHP Microservices einfach erklärt?

\n\n

Stell dir eine Pizzeria vor. Der Monolith ist ein einziger Koch, der alles macht: Teig kneten, Salami schneiden, backen, verpacken, Bestellungen annehmen und Geschirr spülen. Wird der Koch krank, ist die Pizzeria dicht. Microservices hingegen sind wie ein Team: ein Koch nur für den Teig, einer für den Belag, einer für den Ofen und ein separater Fahrer. Jeder arbeitet autonom, und wenn der „Teig-Koch“ ausfällt, läuft der Rest einfach weiter.

\n\n

In der PHP-Welt sieht das so aus:

\n\n
    \n
  • User-Service – Registrierung, Login, Profile
  • \n
  • Order-Service – Erstellung, Bezahlung, Status
  • \n
  • Notification-Service – E-Mail, SMS, Push
  • \n
  • API Gateway – Einheitlicher Einstiegspunkt für Clients
  • \n
\n\n

Jeder Service ist eine eigenständige PHP-Anwendung mit eigener Datenbank, eigenem Repository und eigener Logik. Zusammen bilden sie eine Microservices-Architektur mit PHP.

\n\n

Wann lohnt sich der Umstieg auf Microservices?

\n\n

Seien wir ehrlich: Microservices sind kein Allheilmittel. Bei 3.000 Nutzern und 10 Seiten – vergiss es. Da reicht ein Monolith völlig. Aber wenn:

\n\n
    \n
  • Dein Entwicklungsteam auf 5+ Leute angewachsen ist
  • \n
  • Du jedes kleine Update mit einem Stoßgebet ausrollst
  • \n
  • Eine einzelne Datenbank zum Flaschenhals wird
  • \n
  • Verschiedene Teile der App unterschiedliche Technologien brauchen (z. B. Elasticsearch für die Suche und PostgreSQL für Bestellungen)
  • \n
\n\n

...dann sind PHP Microservices die richtige Wahl.

\n\n

Erste Schritte: Ein einfacher Microservice in PHP

\n\n

Fangen wir klein an. Wir erstellen einen Microservice, der eine Liste von Benutzern ausgibt. Das wird ein PHP REST API Microservice.

\n\n

Schritt 1: Projektstruktur

\n\n
user-service/\n├── public/\n│   └── index.php\n├── src/\n│   ├── Controllers/\n│   │   └── UserController.php\n│   ├── Models/\n│   │   └── User.php\n│   └── Services/\n│       └── UserService.php\n├── config/\n│   └── database.php\n├── composer.json\n└── .env
\n\n

Schritt 2: Einstiegspunkt (index.php)

\n\n
<?php\n// public/index.php\nrequire_once __DIR__ . '/../vendor/autoload.php';\n\nuse Symfony\\Component\\Dotenv\\Dotenv;\nuse App\\Controllers\\UserController;\n\n$dotenv = new Dotenv();\n$dotenv->load(__DIR__ . '/../.env');\n\n$uri = $_SERVER['REQUEST_URI'];\n$method = $_SERVER['REQUEST_METHOD'];\n\n// Einfacher Router\nif ($uri === '/api/users' && $method === 'GET') {\n    $controller = new UserController();\n    echo json_encode($controller->index());\n} elseif (preg_match('/\\/api\\/users\\/(\\d+)/', $uri, $matches) && $method === 'GET') {\n    $controller = new UserController();\n    echo json_encode($controller->show($matches[1]));\n} else {\n    http_response_code(404);\n    echo json_encode(['error' => 'Not found']);\n}
\n\n

Schritt 3: Controller

\n\n
<?php\n// src/Controllers/UserController.php\nnamespace App\\Controllers;\n\nuse App\\Services\\UserService;\n\nclass UserController\n{\n                

Blogs

Buchempfehlungen