bg_image
header

RoadRunner

RoadRunner ist ein High-Performance Application Server für PHP, der von Spiral Scout entwickelt wurde. Er ersetzt den klassischen PHP-FPM (FastCGI Process Manager) und bietet durch eine dauerhafte Ausführung deiner PHP-Anwendung einen massiven Performance-Schub – besonders bei Frameworks wie Laravel oder Symfony.


🚀 Was macht RoadRunner besonders?

Performance durch Worker

  • PHP-Skripte werden nicht bei jeder Anfrage neu geladen, sondern laufen dauerhaft in sogenannten Worker-Prozessen (ähnlich wie bei Node.js oder Swoole).

  • Dadurch sparst du dir das erneute Bootstrapping deiner App bei jedem Request – das ist wesentlich schneller als bei PHP-FPM.

In Go geschrieben

  • RoadRunner selbst ist in der Programmiersprache Go geschrieben – das bedeutet hohe Stabilität, einfache Cross-Plattform-Deployments und parallele Verarbeitung von Anfragen.

Features

  • HTTP-Server (inkl. HTTPS, Gzip, CORS, etc.)

  • PSR-7 & PSR-15 Middleware-Kompatibilität

  • Unterstützung für:

    • Queues (z. B. mit RabbitMQ, Redis, etc.)

    • gRPC

    • WebSockets

    • Static file serving

    • Metrics (Prometheus)

    • RPC zwischen PHP und Go

  • Hot Reload für Änderungen im Code (mit Watch-Modul)


⚙️ Wie funktioniert RoadRunner technisch?

  1. RoadRunner startet PHP-Worker-Prozesse.

  2. Die Worker laden einmal den gesamten Framework-Bootstrap.

  3. RoadRunner verteilt HTTP- oder gRPC-Anfragen an die Worker.

  4. Die Antwort wird über Go zurückgegeben – schnell und parallel.


📦 Typischer Einsatz:

  • Laravel + RoadRunner (statt Laravel + PHP-FPM)

  • Anwendungen mit hoher Request-Frequenz

  • APIs, Microservices, Echtzeit-Anwendungen (z. B. mit WebSockets)

  • Serverless-ähnliche Dienste, wo Latenz kritisch ist


📉 Vergleich zu PHP-FPM

Eigenschaft PHP-FPM RoadRunner
Bootstrapping pro Request Ja Nein (persistente Worker)
Geschwindigkeit Gut Exzellent
WebSockets Nicht direkt Ja
gRPC Nein Ja
Sprache C Go

Docker Compose

Docker Compose ist ein Werkzeug, mit dem du mehrere Docker-Container als einen einzigen Service definieren und starten kannst. Statt jeden Container einzeln über die Docker-CLI zu starten, kannst du mit Docker Compose eine docker-compose.yml-Datei schreiben, in der du alle benötigten Dienste (z. B. Datenbank, Webserver, App-Container) deklarierst.

Kurz gesagt:

Docker Compose = Projektbeschreibung + Mehrere Container + Ein Befehl zum Starten


Beispiel: docker-compose.yml

version: '3.9'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
  redis:
    image: "redis:alpine"

In diesem Beispiel:

  • Ein Container baut die lokale Webanwendung.

  • Ein zweiter Container nutzt das offizielle Redis-Image.

  • Beide Container sind miteinander vernetzt.


Häufige Kommandos:

docker-compose up       # Startet alle Container im Vordergrund
docker-compose up -d    # Startet im Hintergrund (detached)
docker-compose down     # Stoppt und entfernt Container, Netzwerke etc.

Vorteile von Docker Compose:

✅ Einfaches Setup für Multi-Container-Anwendungen
✅ Alles wird in einer Datei versioniert (z. B. für Git)
✅ Reproduzierbare Entwicklungsumgebungen
✅ Leichtes Hoch- und Runterfahren ganzer Stacks


Typische Anwendungsfälle:

  • Lokale Entwicklung mit mehreren Services (z. B. App + DB)

  • Integrationstests mit vollständigem Stack

  • Simpler Deployment-Workflow (z. B. über CI/CD)


NoSQL

NoSQL steht für "not only SQL" (nicht nur SQL) und bezeichnet eine breite Kategorie von Datenbankmanagementsystemen, die sich von traditionellen relationalen Datenbanken unterscheiden. Der Begriff "NoSQL" wurde geprägt, um die Vielfalt der neuen Ansätze und Technologien zur Speicherung und Verwaltung von Daten zu beschreiben, die alternative Modelle zur Datenmodellierung und -speicherung bieten.

Im Gegensatz zu relationalen Datenbanken, die auf einer tabellenorientierten Struktur basieren und SQL (Structured Query Language) verwenden, um Daten abzufragen und zu manipulieren, verwenden NoSQL-Datenbanken verschiedene Modelle zur Datenorganisation, wie zum Beispiel:

  1. Dokumentdatenbanken: Hier werden Daten in Dokumenten (z. B. JSON- oder XML-Format) gespeichert, die semi-strukturiert oder sogar unstrukturiert sein können. Beispiele: MongoDB, Couchbase.

  2. Spaltendatenbanken: Die Daten werden in Spalten anstelle von Zeilen organisiert, was die Abfrageeffizienz verbessern kann. Beispiele: Apache Cassandra, HBase.

  3. Graphdatenbanken: Diese sind auf die Speicherung und Abfrage von Daten in Form von Graphen spezialisiert, wodurch Beziehungen zwischen Entitäten leicht dargestellt werden können. Beispiele: Neo4j, ArangoDB.

  4. Schlüssel-Wert-Datenbanken: Jedes Datenobjekt (Wert) wird durch einen eindeutigen Schlüssel identifiziert, was schnelle Lese- und Schreibvorgänge ermöglicht. Beispiele: Redis, Riak.

NoSQL-Datenbanken wurden entwickelt, um den Bedürfnissen von modernen Anwendungen gerecht zu werden, die große Mengen an unstrukturierten oder semi-strukturierten Daten verarbeiten, hohe Skalierbarkeit und Flexibilität erfordern oder in dynamischen Umgebungen arbeiten, in denen die Anforderungen sich häufig ändern. Sie eignen sich gut für Anwendungen wie Big Data, Echtzeitanalysen, Content-Management-Systeme, soziale Netzwerke und mehr.

Es ist wichtig zu beachten, dass NoSQL-Datenbanken nicht für alle Anwendungsfälle geeignet sind. Die Wahl zwischen einer NoSQL- und einer relationalen Datenbank hängt von den spezifischen Anforderungen und Zielen Ihrer Anwendung ab.


Redis

redis

Redis ist eine leistungsstarke und schnelle In-Memory-Datenbank, die als Schlüssel-Wert-Speicher dient. Der Name "Redis" steht für "Remote Dictionary Server". Sie wurde ursprünglich von Salvatore Sanfilippo entwickelt und ist eine Open-Source-Software, die unter der BSD-Lizenz veröffentlicht wurde.

Im Allgemeinen wird Redis für eine Vielzahl von Anwendungsfällen verwendet, darunter:

  1. Caching: Redis kann als Cache für häufig abgerufene Daten verwendet werden, um die Leistung von Anwendungen zu verbessern und die Last auf Datenbanken zu reduzieren.

  2. Echtzeitdatenanalyse: Durch seine Fähigkeit, Daten schnell zu lesen und zu schreiben, wird Redis oft für die Verarbeitung und Analyse von Echtzeitdaten eingesetzt.

  3. Sitzungsmanagement: Da Redis Daten im Arbeitsspeicher speichert und sehr schnell Zugriff auf sie ermöglicht, kann es als zuverlässiger Sitzungsspeicher verwendet werden.

  4. Message Broker: Redis bietet auch Funktionen für das Pub/Sub-Messaging-Paradigma (Publisher/Subscriber), wodurch es als leichtgewichtiger Message Broker verwendet werden kann, um Nachrichten zwischen verschiedenen Teilen eines Systems zu verteilen.

  5. Geodatenverarbeitung: Redis verfügt über Unterstützung für geografische Informationen und kann verwendet werden, um geografische Daten zu speichern und abzufragen.

  6. Zählung und Rangfolge: Redis bietet Datenstrukturen wie Zähler und sortierte Sets, die für Rangfolgen und statistische Anwendungen nützlich sind.

Ein wichtiges Merkmal von Redis ist, dass es Daten vollständig im Arbeitsspeicher hält, was die Lese- und Schreibzugriffe sehr schnell macht. Diese Geschwindigkeit geht jedoch zu Lasten der Datenspeicherkapazität, da die Daten nur so lange verfügbar sind, wie Redis läuft und sie im Arbeitsspeicher Platz finden. Redis bietet jedoch auch Mechanismen zur Persistenz, um Daten auf die Festplatte zu speichern und die Datenbank beim Neustart wiederherzustellen.

Aufgrund seiner Einfachheit, Geschwindigkeit und Flexibilität hat sich Redis zu einer beliebten Lösung entwickelt, die in vielen modernen Anwendungen eingesetzt wird, um leistungsstarke und skalierbare Datenspeicherlösungen bereitzustellen.