Skip to content

Latest commit

History

7,571 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

userver

UbuntuFedoraDebianMacOSAlpineArchDocker CIConanCodeQL

Build and publish ubuntu-24.04-userver imagesBuild and publish ubuntu-22.04-userver imagesGentoo Systemd with Overlay CI

uservice-dynconf CIuservice-dynconf Docker buildurealmedium CIurealmedium Docker buildupastebin CIupastebin Docker

userver is an open source asynchronous framework with a rich set of abstractions for fast and comfortable creation of C++ microservices, services and utilities.

The framework solves the problem of efficient I/O interactions transparently for the developers. Operations that would typically suspend the thread of execution do not suspend it. Instead of that, the thread processes other requests and tasks and returns to the handling of the operation only when it is guaranteed to execute immediately:

#include<userver/easy.hpp>// schemas::KeyRequest and parsers+serializers generated from JSON schema
#include"schemas/key_value.hpp"intmain(int argc, char* argv[]) {
usingnamespaceuserver;
easy::HttpWith<easy::PgDep>(argc, argv)
// Handles multiple HTTP requests to `/kv` URL concurrently
.Get("/kv", [](schemas::KeyRequest&& request, const easy::PgDep& dep) {
// Asynchronous execution of the SQL query in transaction. Current thread// handles other requests while the response from the DB is being received:auto res = dep.pg().Execute(
storages::postgres::ClusterHostType::kSlave,
// Query is converted into a prepared statement. Subsequent requests// send only parameters in a binary form and meta information is// discarded on the DB side, significantly saving network bandwidth."SELECT value FROM key_value_table WHERE key=$1", request.key
);
return schemas::KeyValue{
.key=std::move(request.key),
.value=res[0][0].As<std::string>(),
};
});
}

As a result, with the framework you get straightforward source code, avoid CPU-consuming context switches from OS, efficiently utilize the CPU with a small amount of execution threads.

You can learn more about history and key features of userver from our publications and videos.

Other Features

  • Efficient asynchronous drivers for databases (MongoDB, PostgreSQL, Valkey, Redis, ClickHouse, MySQL/MariaDB, YDB, SQLite ...) and data transfer protocols (HTTP/{1.1, 2.0}, gRPC, AMQP 0-9-1, Kafka, TCP, TLS, WebSocket ...), tasks construction and cancellation.
  • Rich set of high-level components for caches, tasks, distributed locking, logging, tracing, statistics, metrics, JSON/YAML/BSON.
  • Functionality to change the service configuration on-the-fly.
  • On-the-fly configurable drivers, options of the deadline propagation, timeouts, congestion-control.
  • Comprehensive set of asynchronous low-level synchronization primitives and OS abstractions.

See the docs for more info.

About

Production-ready C++ Asynchronous Framework with rich functionality

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages