博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转: 微信开源C/C++ RPC框架PhxRPC
阅读量:6800 次
发布时间:2019-06-26

本文共 1935 字,大约阅读时间需要 6 分钟。

转自: http://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483734&idx=1&sn=da364812eca086532f58bbdfaa4b4fd2&scene=0#wechat_redirect

 

PhxRPC是微信后台团队推出的一个非常简洁小巧的RPC框架,编译生成的库只有450K。

 

开源地址:

https://github.com/tencent-wechat/phxrpc

点击阅读原文可自动跳转到github地址

总览

  • 使用Protobuf作为IDL用于描述RPC接口以及通信数据结构。

  • 基于Protobuf文件自动生成Client以及Server接口,用于Client的构建,以及Server的实现。

  • 半同步半异步模式,采用独立多IO线程,通过Epoll管理请求的接入以及读写,工作线程采用固定线程池。IO线程与工作线程通过内存队列进行交互。

  • 提供完善的过载保护,无需配置阀值,支持动态自适应拒绝请求。

  • 提供简易的Client/Server配置读入方式。

  • 基于lambda函数实现并发访问Server,可以非常方便地实现Google提出的 Backup Requests 模式。

局限

  • 不支持多进程模式。

性能

使用Sample目录下的Search RPC C/S进行Echo RPC调用的压测,相当于Worker空转情况。

运行环境

CPU:24 x Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz内存:32 GB网卡:千兆网卡Client/Server机器之间PING值: 0.05ms请求写入并发:1000个线程业务数据大小:除去HTTP协议部分20bWorker线程数:20

性能测试结果(qps)

短连接

ucontext类型/IO线程 1 3 8 20
system 4.1w 8.5w 9w 9.2w
boost 4.5w 9.5w 9.5w 9.5w

长连接

ucontext类型/IO线程 1 3 8 20
system 5.5w 16w 36w 50w
boost 6.2w 17.5w 41w 50w

如何使用

编写proto文件

下面是sample目录下的proto文件样例。

生成代码

(PhxRPC根目录)/codegen/phxrpc_pb2server -I (PhxRPC根目录) -I (Protobuf include目录) -f (proto文件路径) -d (生成代码放置路径) #sample ../codegen/phxrpc_pb2server -I ../ -I ../third_party/protobuf/include -f search.proto -d . 调用完工具后,在生成代码放置目录下执行make,即可生成全部的RPC相关代码。

选择是否启用boost优化

打开生成代码放置目录下的Makefile文件。

#choose to use boost for network #LDFLAGS := $(PLUGIN_BOOST_LDFLAGS) $(LDFLAGS)

可以看到以上两行,取消注释掉第二行,重新make clean, make即可开启boost对PhxRPC的优化。开启前记得编译好PhxRPC的boost插件。

补充自己的代码

Server(xxx_service_impl.cpp)

Client (xxx_client.cpp)

Client并发调用样例

uthread_beginuthread_enduthread_suthread_t这几个关键字是PhxRPC自定义的宏,分别表示协程的准备,结束,协程调度器以及协程的创建。

上面的代码实现了Google提出的 Backup Requests 模式。实现的功能是分别对两个Server同时发起Echo调用,当有一个Server响应的时候,则整个函数结束。在这段代码里面,我们提供了一种异步IO的同步写法,并给予了一些方便使用的宏定义。首先使用uthread_begin进行准备,然后使用uthread_t以lambda的形式创建一个协程,而在任意一个协程里面都可使用我们PhxRPC生成的Client API进行RPC调用,并可使用uthread_s随时结束所有RPC调用。最后的uthread_end真正通过协程调度发起这些lambda内的RPC调用,并等待结束。

当然你可以借用这4个宏定义,以同步代码的写法,进行更自定义的并发访问。

Server配置说明 (xxx_server.conf)

 

转载地址:http://lfywl.baihongyu.com/

你可能感兴趣的文章
程序代码阅读与分析
查看>>
《常微分方程教程》习题2-2,4:一个跟踪问题
查看>>
replace into 浅析之一
查看>>
软件工程15 个人阅读作业2—提出问题
查看>>
java设计模式-策略模式
查看>>
like 大数据字段 查询慢
查看>>
JSON 数据格式
查看>>
字符编码,文件处理
查看>>
MapperScannerConfigurer
查看>>
UNIX环境高级编程——守护进程列表
查看>>
UIButton
查看>>
UITabBarController
查看>>
融合式架构Nutanix深入分析一
查看>>
独家爆料:创宇云与小鸟云的故事
查看>>
FireEye:K3chang行动***欧洲外交部门
查看>>
你会用Python写洗脑神曲吗?
查看>>
Win32 文件(3)
查看>>
一款基于css3鼠标经过圆形旋转特效
查看>>
【温故而知新-Javascript】使用 Window 对象
查看>>
成功站长应具备的良好心态
查看>>