Microsserviços em C++: por onde começar em 2024
\n\nQuando se fala em "microsserviços", geralmente pensamos em Go, Java ou Python. Mas C++? Parece uma linguagem de baixo nível, complexa e nada voltada para a web. Engano seu. Nos últimos anos, o C++ vive um renascimento no backend: os padrões modernos (C++17/20), frameworks leves e ferramentas maduras o tornam uma excelente escolha para microsserviços de alta performance. Se o seu projeto exige consumo mínimo de memória, desempenho máximo ou execução em ARM/MIPS, o C++ pode ser seu trunfo na manga.
\n\nNeste artigo, vou mostrar exatamente por onde começar: vamos escolher um framework, criar um serviço HTTP simples, adicionar gRPC e empacotar tudo em Docker. Nada de teoria — só código e prática.
\n\n\n\n
Por que usar C++ para microsserviços não é loucura?
\n\nO principal argumento dos críticos do C++ é: "demora para escrever e é fácil errar". Mas o C++ moderno, com ponteiros inteligentes, contêineres STL e RAII, permite escrever quase tão rápido quanto em Go, dando total controle sobre a memória. As vantagens são claras:
\n\n- \n
- Velocidade — C++ é de 2 a 10 vezes mais rápido que Java/Python em operações de I/O e processamento. \n
- Consumo de memória — um microsserviço típico em C++ usa de 5 a 15 MB, contra 50 a 150 MB em Java. \n
- Sem GC — sem pausas do garbage collector, latência previsível. \n
- Ecossistema — gRPC, Boost, nlohmann/json, Crow, Drogon — tudo funciona de cara. \n
Claro que há desvantagens: o compilador é mais rigoroso, a compilação é mais lenta e o debug é mais complexo. Mas se você precisa de desempenho de sistemas financeiros, servidores de jogos ou IoT, o C++ é a escolha certa.
\n\n\n\n
Escolhendo o framework: Crow vs Drogon vs Pistache
\n\nPara começar rápido, não é preciso criar um servidor HTTP do zero com sockets. Existem três opções populares:
\n\n1. Crow (leve, header-only)
\nIdeal para microsserviços com até 5 a 10 endpoints. Basta incluir um único arquivo de cabeçalho e pronto. Desvantagem: não suporta HTTP/2 e tem roteamento limitado.
\n\n2. Drogon (completo)
\nA melhor escolha para projetos sérios: HTTP/1.1 e HTTP/2, WebSocket, AOP, suporte a bancos de dados e ORM. O Drogon é inspirado no ASP.NET e Django — ele até gera JSON automaticamente a partir de modelos.
\n\n3. Pistache (moderno, mas imaturo)
\nUma alternativa interessante, mas ainda não estável para produção.
\n\nRecomendo começar com o Crow — ele é minimalista e permite ter uma API REST funcional em 10 minutos. Para projetos mais sérios, vale a pena olhar para o Drogon.
\n\n\n\n
Na prática: criando um microsserviço em C++ com Crow
\n\nVamos criar um serviço simples que recebe um JSON com o nome do usuário e retorna uma saudação. É o clássico "Hello World", mas no estilo microsserviço.
\n\nPasso 1: Instalando as dependências
\nVocê vai precisar do CMake e de um compilador com suporte a C++17 (gcc 9+, clang 10+). O Crow é header-only, então basta copiar o arquivo crow_all.h do repositório.
# Baixando o Crow\nwget https://github.com/CrowCpp/Crow/releases/download/v1.1.0/crow_all.h\n\n\nPasso 2: Código do serviço
\n\n// main.cpp\n#include "crow_all.h"\n#include <iostream>\n#include <string>\n\nint main() {\n crow::SimpleApp app;\n\n // GET /hello — verificação de saúde\n CROW_ROUTE(app, "/hello")\n ([](){\n return crow::response(200, "Hello, World!");\n });\n\n // POST /greet — recebe JSON {"name": "Alice"}\n CROW_ROUTE(app, "/greet").methods(crow::HTTPMethod::POST)\n ([](const crow::request& req){\n auto body = crow::json::load(req.body);\n if (!body || !body.has("name")) {\n return crow::response(400, "Bad Request: missing 'name'");\n }\n std::string name = body["name"].s();\n crow::json::wvalue result;\n result