C++ 工程组件与基础设施(三)详解RPC服务的概念与安装,图片介绍Brpc服务器和客户端的搭建过程


◆ 博主名称: 小此方-CSDN博客 大家好,欢迎来到小此方的博客。
⭐️网络系列个人专栏: 【插曲】C++ 工程组件与基础设施
⭐️此方的GitHub: github_此方
⭐️ 我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)


文章目录

  • 概要&序論
  • 一、概念
    • [1.1 RPC初探与主流框架横向对比](#1.1 RPC初探与主流框架横向对比)
    • [1.2 深入 brpc:工业级 RPC 框架的核心能力](#1.2 深入 brpc:工业级 RPC 框架的核心能力)
    • [1.3 一个端口支持多协议的服务](#1.3 一个端口支持多协议的服务)
    • [1.4 灵活的同步与异步处理机制](#1.4 灵活的同步与异步处理机制)
    • [1.5 强大的调试与内置组件](#1.5 强大的调试与内置组件)
    • [1.6 安装](#1.6 安装)
  • 二、图片解析:客户端和服务器的搭建过程

概要&序論

  Hello大家好,我是此方。本文深入解析RPC远程过程调用概念,横向对比gRPC、brpc等主流框架优劣势。重点剖析百度工业级框架brpc,讲解其单端口多协议、高并发异步机制与内置调试能力。提供完整的Linux依赖安装与源码编译指南,与客户端服务器搭建过程。

一、概念

1.1 RPC初探与主流框架横向对比

  RPC(Remote Procedure Call)远程过程调用,简单来说就是客户端在不知道调用细节的情况下,调用远程计算机上的某个功能就像调用本地功能一样,其主要目标就是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。

  目前主流 RPC 框架的特性对比如下:

框架 开发者 语言支持 序列化 http协议 文档 编译问题 (ubuntu 22.04) 服务端推送 异步调用 流式传输 (大块数据传输) 易用性
grpc google C++、Java、Python、Go pb 支持 文档较为完善,没有中文文档 主要是下载submodule的问题,没有vpn 不支持 1.异步客户端需要用户自己创建消费线程,使用起来较为麻烦 2.支持异步服务器 支持(接口简单易用) 1.简单易用 2.支持跨语言、跨平台
brpc baidu C++ pb 支持 文档较为完善,有中文文档 编译基本没有问题 支持,但是支持的不好,是通过一次长的RPC调用实现的 1.通过回调函数支持客户端异步调用 支持(接口稍微比原生复杂) 1.提供简洁的API和友好的使用文档,易于上手 2.在sofa-prpc基础上加了一些封装,比如资源管理等,更易用
srpc sogou C++ pb、Thrift 支持 文档略显简单,没有独立网站、都托管在github 编译基本没有问题 不支持 1.支持异步客户端 2.通过workflow支持异步服务器 不支持 专注于异步编程,性能较高,用起来更复杂一些
sofa-pbrpc baidu C++、Java pb 支持 官方文档较少 编译存在问题依赖的库版本都比较老 不支持 1.通过回调函数支持客户端异步调用 不支持 1.轻量化 2.接口简单,容易使用

1.2 深入 brpc:工业级 RPC 框架的核心能力

  brpc 是用 C++ 语言编写的工业级 RPC 框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统。那么,它到底能用来干什么?它的核心能力主要体现在以下几个方面。

1.3 一个端口支持多协议的服务

  你可以使用它搭建能在一个端口支持多协议的服务,或访问各种服务。这极大简化了微服务网关和混合架构的部署。

  1. restful http/https, h2/gRPC:使用 brpc 的 http 实现比 libcurl 方便多了。它还支持从其他语言通过 HTTP/h2+json 访问基于 protobuf 的协议。
  2. redis 和 memcached:支持线程安全,比官方 client 更方便。
  3. rtmp/flv/hls:可用于搭建流媒体服务。
  4. thrift:支持 thrift,线程安全,比官方 client 更方便。
  5. 百度内部协议:支持各种百度内使用的协议,如 baidu_std、streaming_rpc、hulu_pbrpc、sofa_pbrpc、nova_pbrpc、public_pbrpc、ubrpc 和使用 nshead 的各种协议。
  6. 工业级 RAFT 算法:基于工业级的 RAFT 算法实现搭建高可用分布式系统,已在 braft 开源。

1.4 灵活的同步与异步处理机制

  在网络 IO 层面,brpc 提供了极其灵活的调用模式。

  1. Server 端:能同步或异步处理请求。
  2. Client 端:支持同步、异步、半同步,或使用组合 channels 简化复杂的分库或并发访问。

1.5 强大的调试与内置组件

  对于开发和运维来说,brpc 提供了极佳的便利性:

  1. 内置服务调试:可以通过 http 界面调试服务,使用 cpu, heap, contention profilers。
  2. 协议快速接入:把你组织中使用的协议快速地加入 brpc,或定制各类组件,包括命名服务 (dns, zk, etcd),负载均衡 (rr, random, consistent hashing)。
  3. 性能优势:能够获得更好的延时和吞吐。

1.6 安装

1.6.1安装依赖

  在编译 brpc 之前,需要先安装所需的依赖环境:

bash 复制代码
sudo apt-get install -y git g++ make libssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev

1.6.2 安装 brpc

  依赖安装完成后,拉取源码并进行编译安装:

bash 复制代码
git clone https://github.com/apache/brpc.git
cd brpc/
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr .. && cmake --build . -j6
make && sudo make install

二、图片解析:客户端和服务器的搭建过程


好的本文内容到此结束,我是此方,我们下期再见。

相关推荐
qq_406981031 小时前
什么是顶层 const什么是底层const
开发语言·c++
老李IT笔记1 小时前
抹除之后机器上的受管应用可以留下:这一步省掉的是哪段时间
运维·服务器
自由彩虹2 小时前
靶场通关15--bossplayersctf
linux·服务器·网络·安全·web安全·网络安全
zwc32104320552 小时前
第四周第五天——重构成类
c++·人工智能·opencv·算法·计算机视觉
2401_868534782 小时前
网络规划设计师之案例分析 - 网络安全与等级保护
服务器·网络
雾时之林2 小时前
Nginx反向代理与proxy_cache缓存搭建CDN服务器
服务器·nginx·缓存
凉茶钱2 小时前
多态:从虚函数语法到虚表寻址,一次讲透动态绑定
开发语言·c++·多态
Hello.Reader2 小时前
Three.js / Cesium 卡顿怎么办?把三维渲染搬到 GPU 服务器
服务器·开发语言·javascript
Linux_cy2 小时前
nginx 502 排查手册:九种原因分类、定位命令与检查顺序
linux·运维·服务器·网络·数据库·nginx·ssh