访问节俭
学习如何获得节俭。
节俭是一种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;
}
测试环境:48核2.30GHz
从客户端发送的服务器端返回字符串“hello”
框架 | 线程数 | 质量保证体系 | 平均兰特西 | 中央处理器 |
---|
本土节俭 | 60 | 6.9瓦 | 0.9毫秒 | 2.8% |
brpc节俭 | 60 | 30瓦 | 0.2毫秒 | 18% |
服务器端返回字符串“hello”*1000
框架 | 线程数 | 质量保证体系 | 平均兰特西 | 中央处理器 |
---|
本土节俭 | 60 | 5.2瓦 | 1.1毫秒 | 4.5% |
brpc节俭 | 60 | 19.5瓦 | 0.3毫秒 | 22% |
服务器端进行一些复杂的数学运算并返回字符串“hello”*1000
框架 | 线程数 | 质量保证体系 | 平均兰特西 | 中央处理器 |
---|
土生土长的节俭 | 60 | 1.7瓦 | 3.5毫秒 | 76% |
brpc节俭 | 60 | 2.1瓦 | 2.9毫秒 | 93% |