访问节俭

学习如何获得节俭。

节俭是一种RPC框架,广泛用于各种环境,由Facebook开发,后来被Apache采用。为了与节约服务器交互并解决线程安全、可用性和并发性问题,brpc直接支持节约在非阻塞模式下使用的节约协议。

例子:示例/rickeextensionc++

与官方解决方案相比的优势:

  • 螺纹安全。无需为每个线程设置单独的客户端。
  • 支持同步、异步、批同步、批异步和其他访问方法。还支持ParallelChannel等组合通道。
  • 支持各种连接类型(短连接池)。支持超时、备份请求、取消、跟踪、内置服务以及brpc提供的其他好处。
  • 更好的性能。

编译

brpc依赖于节俭库并重用节俭工具生成的一些代码。请阅读官方文件,了解如何编写节俭文件、生成代码、编译等。

brpc默认情况下不启用节俭支持或依赖节俭库。如果需要支持,请使用额外的–with-thrift或-DWITH_thrift=ON编译brpc

在Linux下安装节约阅读官方维基要安装依赖的库和工具,然后从官方网站,解压缩并编译

wget公司http://www.apache.org/dist/ricet/0.11.0/ricet-0.11.0.tar.gz焦油-xf节俭-0.111.0.tar.gz光盘节俭-0.11.0/./configure--前缀=/usr—带红色=否--使用python=否--使用-java=否--带-go=否--带-perl=否--带-php=否--使用-csharp=否--带-erlang=否--带lua=否--带编号=制作CPPFLAGS公司=-DFORCE_BOOST_SMART_PTR-j公司4-秒sudo make安装

为brpc配置节俭支持,然后制作。编译后的libbrpc.a包含用于节约支持的扩展代码,可以像在其他brpc项目中一样正常链接。

#Ubuntu公司
sh config_brpc.sh—标头=/usr/include--库=/usr/lib--收缩#费多拉/CentOS
sh config_brpc.sh—标头=/usr/include--库=/usr/lib64—带收缩#或使用cmake
mkdir构建&& 光盘建造&&c制作../-DWITH_THRIFT公司=打开

阅读入门获取更多编译选项。

客户端访问节约服务器

步骤:

  • 为brpc::protocol_THRIFT创建频道设置协议
  • 创建brpc::ThriftStub
  • 使用本机请求和响应直接启动RPC。

示例代码:

#包括 <brpc/频道.h>
#包括 <brpc/redict_message.h>//定义节俭存根
...

定义_字符串(服务器, “0.0.0.0:8019”, “节约服务器的IP地址”);
定义_字符串(负载平衡器, "", “负载平衡算法”);
...
  
brpc公司::频道选项 选项;
选项协议 = brpc公司::协议_THRIFT;
brpc公司::频道 节约频道;
如果 (节约频道初始化(标志_服务器c_str码(), FLAGS_负载平衡器c_str码(), &选项) != 0) {
   日志(错误) << “无法初始化节约渠道”;
   返回 -1;
}

brpc公司::节俭存根 树桩(&节约频道);
...

//示例::[EchoRequest/EchoResponse]是节俭生成的类型例子::回声请求 请求;
例子::回声响应 物件;
请求数据 = “你好”;

树桩调用方法(“回声”, &碳纳米管, &请求, &物件, 无效的);
如果 (碳纳米管失败()) {
    日志(错误) << “发送节俭请求失败,” << 碳纳米管错误文本();
    返回 -1;
} 

服务器处理节约请求

继承brpc::ThriftService来实现处理代码,它可以调用由节俭生成的本机处理程序来直接重用现有条目,或者像在其他protobuf服务中一样直接读取请求并设置响应。

 回声服务Impl : 公众的 brpc公司::ThriftService公司 {
公众的:
    空隙 处理ThriftFramedRequest(brpc公司::控制器* 碳纳米管,
                                    brpc公司::ThriftFramed消息* 请求,
                                    brpc公司::ThriftFramed消息* 物件,
                                    谷歌::原蟾蜍::关闭* 完成) 覆盖 {
        //将调用分派给不同的方法        如果 (碳纳米管->节俭方法名称() == “回声”) {
            返回 回声(碳纳米管, 请求->铸造<例子::回声请求>(),
                        物件->铸造<例子::回声响应>(), 完成);
        } 其他的 {
            碳纳米管->设置失败(brpc公司::ENOMETHOD公司, “找不到方法=%s”,
                            碳纳米管->节约方法名称().c_str码());
            完成->运行();
        }
    }

    空隙 回声(brpc公司::控制器* 碳纳米管,
              常数 例子::回声请求* 请求,
              例子::回声响应* 物件,
              谷歌::原蟾蜍::关闭* 完成) {
        //此对象帮助您以RAII样式调用done->Run()。如果你需要        //要异步处理请求,请传递doneguard.release()。        brpc公司::封闭防护装置 done_guard(门卫)(完成);

        物件->数据 = 请求->数据 + “(已处理)”;
    }
};

将已实现的服务设置为ServerOptions.react_service并启动该服务。

    brpc公司::服务器 服务器;
    brpc公司::服务器选项 选项;
    选项节俭服务 = 新的 回声服务实施;
    选项空闲超时秒 = FLAGS_idle_timeout_s;
    选项最大一致性 = FLAGS_最大_货币;

    //启动服务器。    如果 (服务器起点(FLAGS_端口, &选项) != 0) {
        日志(错误) << “无法启动EchoServer”;
        返回 -1;
    }

本地节俭的性能测试与brpc节俭实施的比较

测试环境:48核2.30GHz

从客户端发送的服务器端返回字符串“hello”

框架线程数质量保证体系平均兰特西中央处理器
本土节俭606.9瓦0.9毫秒2.8%
brpc节俭6030瓦0.2毫秒18%

服务器端返回字符串“hello”*1000

框架线程数质量保证体系平均兰特西中央处理器
本土节俭605.2瓦1.1毫秒4.5%
brpc节俭6019.5瓦0.3毫秒22%

服务器端进行一些复杂的数学运算并返回字符串“hello”*1000

框架线程数质量保证体系平均兰特西中央处理器
土生土长的节俭601.7瓦3.5毫秒76%
brpc节俭602.1瓦2.9毫秒93%

上次修改时间:2024年5月6日更新index.md(66353dc)