Mikroservices in C++: Architektur, Praxis und Codebeispiele

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

Einführung in Microservices mit C++



Die Microservice-Architektur (MSA) ist einer der dominierenden Ansätze zur Entwicklung moderner verteilter Systeme. Obwohl C++ seltener mit Microservices assoziiert wird als Go, Java oder Python, bleibt es unverzichtbar für Szenarien, in denen Leistung, niedrige Latenz und effiziente Speichernutzung kritisch sind. In diesem Artikel werden wir erläutern, wie man Microservices mit C++ erstellt, welche Frameworks und Bibliotheken verwendet werden, und praktische Codebeispiele betrachten.



Warum C++ für Microservices?

Die Hauptvorteile von C++ bei der Entwicklung von Microservices:

  • Maximale Leistung — C++ ermöglicht minimale Antwortzeiten (latency) und hohen Durchsatz (throughput).
  • Kontrolle über Ressourcen — manuelle Speicherverwaltung und Optimierung auf Hardware-Ebene.
  • Ausgereifte Bibliotheken — Boost, Poco, cpp-httplib, gRPC, Crow.
  • Integration mit Legacy-Systemen — C++ wird oft in Kernen hochbelasteter Systeme verwendet (Finanzen, Telekommunikation, Spiele).


Microservice-Architektur mit C++



Hauptkomponenten

Ein typischer Microservice mit C++ umfasst:

  • HTTP/REST-Server — zum Empfangen von Anfragen (z. B. mit cpp-httplib oder Crow).
  • Geschäftslogik — Module zur Datenverarbeitung.
  • Client für serviceübergreifende Kommunikation — gRPC oder HTTP-Client.
  • Speicheranbindung — Verbindung zu PostgreSQL, Redis oder Kafka über Bibliotheken (libpqxx, redis-plus-plus, librdkafka).


Kommunikation zwischen Services

Zwei Hauptprotokolle:

  • gRPC — binäres Protokoll auf Basis von Protobuf, bietet strenge Typisierung und hohe Geschwindigkeit.
  • REST (JSON) — geeignet für externe APIs, aber langsamer aufgrund der Serialisierung.


Praxis: Erstellung eines Microservices mit C++



1. Einfache REST-API mit cpp-httplib

Betrachten wir einen minimalen Service, der eine GET-Anfrage empfängt und JSON zurückgibt. Die Bibliothek cpp-httplib ist header-only und leicht einzubinden.



// main.cpp#include <httplib.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() { httplib::Server svr;

// GET /hello — gibt JSON zurück svr.Get("/hello", [](const httplib::Request& req, httplib::Response& res) { json response; response["message"] = "Hello from C++ microservice!"; response["status"] = "ok"; res.set_content(response.dump(), "application/json"); });

// POST /data — empfängt JSON und verarbeitet es svr.Post("/data", [](const httplib::Request& req, httplib::Response& res) { try { auto input = json::parse(req.body); int value = input["value"]; json result; result["squared"] = value * value; res.set_content(result.dump(), "application/json"); } catch (const std::exception& e) { res.status = 400; res.set_content("{\\"error\\":\\"Invalid JSON\\"}", "application/json"); } });

std::cout << "Server started on port 8080"; svr.listen("0.0.0.0", 8080); return 0;}


Build (erfordert installiertes nlohmann/json):

g++ -std=c++17 main.cpp -o microservice -lpthread./microservice


2. Microservice mit gRPC

gRPC erfordert die Definition des Services in einer .proto-Datei. Beispiel:



// calculator.protosyntax = "proto3";

service Calculator { rpc Add (AddRequest) returns (AddResponse);}

message AddRequest { int32 a = 1; int32 b = 2;}

Blogs

Buchempfehlungen