An industrial-grade RPC framework used throughout Baidu, with 1,000,000+ instances(not counting clients) and thousands kinds of services, called "baidu-rpc" inside Baidu. Only C++ implementation is opensourced right now.
You can use it to:
- Build a server that can talk in multiple protocols (on same port), or access all sorts of services
- restful http/https, h2/h2c (compatible with grpc, will be opensourced). using http in brpc is much more friendly than libcurl.
- redis and memcached, thread-safe, more friendly and performant than the official clients.
- rtmp/flv/hls, for building streaming services.
- hadoop_rpc (may be opensourced)
- rdma support (will be opensourced)
- thrift support, thread-safe, more friendly and performant than the official clients.
- all sorts of protocols used in Baidu: baidu_std, streaming_rpc, hulu_pbrpc, sofa_pbrpc, nova_pbrpc, public_pbrpc, ubrpc and nshead-based ones.
- Access protobuf-based protocols with HTTP+json, probably from another language.
- Build HA distributed services using an industrial-grade implementation of RAFT consensus algorithm which is opensourced at braft
- Servers can handle requests synchronously or asynchronously.
- Clients can access servers synchronously, asynchronously, semi-synchronously, or use combo channels to simplify sharded or parallel accesses declaratively.
- Debug services via http, and run cpu, heap and contention profilers.
- Get better latency and throughput.
- Extend brpc with the protocols used in your organization quickly, or customize components, including naming services (dns, zk, etcd), load balancers (rr, random, consistent hashing)
- Read overview to know where brpc can be used and its advantages.
- Read getting started for building steps and play with examples.
- Docs:
- Performance benchmark
- bvar
- bthread
- Client
- Server
- Builtin Services
- Tools
- Others
- IOBuf
- Streaming Log
- FlatMap
- brpc外功修炼宝典(training material)
- A tutorial on building large-scale services(training material)
- brpc internal(training material)
- RPC in depth
- Use cases inside Baidu
If you can fix any of the issues or add new features, you're welcome to send the PR to us. If the PR is accepted, your contribution will be scored from 0 to 5 points according to the difficulty and quality (higher is better). If you accumulate 10 points, you can contact us for interviewing opportunities or recommendation letter for your future jobs.
Make sure your code meets following requirements before submitting the PR:
- The code conforms to google C++ coding style and is indented by 4 spaces.
- The code appears where it should be. For example the code to support an extra protocol should not be put in general classes like server.cpp, channel.cpp, while a general modification would better not be hidden inside a very specific protocol.
- Has unittests.
Check following items after submitting the PR:
- Compilations and unittests in travis-ci are passed.
Please report bugs, concerns, suggestions by issues, or join QQ-group 498837325 to discuss problems around source code.