基于C++的微服务:架构、实践与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++微服务简介



微服务架构(MSA)是构建现代分布式系统的主流方法之一。尽管C++在微服务领域的知名度不如Go、Java或Python,但在对性能、低延迟和高效内存使用要求苛刻的场景中,它仍然是不可或缺的。本文将探讨如何使用C++构建微服务、使用哪些框架和库,并提供实际代码示例。



为什么选择C++开发微服务?

C++开发微服务的主要优势:

  • 极致性能 — C++能够实现最低的响应延迟(latency)和高吞吐量(throughput)。
  • 资源控制 — 手动内存管理和硬件级优化。
  • 成熟的库 — Boost、Poco、cpp-httplib、gRPC、Crow。
  • 与遗留系统集成 — C++常用于高负载系统的核心(金融、电信、游戏)。


C++微服务架构



核心组件

典型的C++微服务包括:

  • HTTP/REST服务器 — 用于接收请求(例如使用cpp-httplib或Crow)。
  • 业务逻辑 — 数据处理模块。
  • 服务间通信客户端 — gRPC或HTTP客户端。
  • 存储交互 — 通过库连接PostgreSQL、Redis或Kafka(libpqxx、redis-plus-plus、librdkafka)。


服务间通信

两种主要协议:

  • gRPC — 基于Protobuf的二进制协议,提供强类型和高速度。
  • REST (JSON) — 适用于外部API,但由于序列化原因速度较慢。


实践:创建C++微服务



1. 使用cpp-httplib构建简单REST API

我们来看一个最小的服务,它接收GET请求并返回JSON。cpp-httplib库是header-only的,易于集成。



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

using json = nlohmann::json;

int main() { httplib::Server svr;

// GET /hello — 返回JSON 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 — 接收JSON并处理 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;}


编译(需要安装nlohmann/json):

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


2. 使用gRPC的微服务

gRPC需要在.proto文件中定义服务。示例:



// calculator.protosyntax = "proto3";

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

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

博客

书籍推荐