PHP Microservices: So startest du durch, ohne durchzudrehen
\n\nKennst 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\nDoch 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\nIn 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\nWas sind PHP Microservices einfach erklärt?
\n\nStell 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\nIn 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
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\nWann lohnt sich der Umstieg auf Microservices?
\n\nSeien 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
...dann sind PHP Microservices die richtige Wahl.
\n\nErste Schritte: Ein einfacher Microservice in PHP
\n\nFangen wir klein an. Wir erstellen einen Microservice, der eine Liste von Benutzern ausgibt. Das wird ein PHP REST API Microservice.
\n\nSchritt 1: Projektstruktur
\n\nuser-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\nSchritt 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\nSchritt 3: Controller
\n\n<?php\n// src/Controllers/UserController.php\nnamespace App\\Controllers;\n\nuse App\\Services\\UserService;\n\nclass UserController\n{\n