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./microservice2. 使用gRPC的微服务
gRPC需要在.proto文件中定义服务。示例:
// calculator.protosyntax = "proto3";
service Calculator { rpc Add (AddRequest) returns (AddResponse);}
message AddRequest { int32 a = 1; int32 b = 2;}