Merge pull request #260 from qiaohaijun/patch-1
A 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 live-streaming services.
- hadoop_rpc (may be opensourced)
- rdma support (will be opensourced)
- 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)
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.