11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

搜狗开源 srpc:自研高性能通用 RPC 框架

  • 2020-10-12
  • 本文字数:1477 字

    阅读完需:约 5 分钟

搜狗开源srpc:自研高性能通用RPC框架

今年 7 月底,搜狗公司开源了内部的工业级 C++服务器引擎 Workflow,一路收获业内许多认可和关注。9 月 15 日,作为 Workflow 最重要的生态项目——srpc,一个基于其打造的轻量级 RPC 框架,也在 GitHub 上开源了。


项目地址:https://github.com/sogou/srpc


一个性能更好的 thrift/brpc

srpc 与 thrift/brpc 是协议与 IDL 均互通的。srpc 除了自带的 sogou-std 协议以外,还实现了 baidu-std 协议和 thrift framed 协议,因此 srpc 可以与 thrift 或 brpc(连接池模式)互通。另外,接口描述文件支持 protobuf 和 thrift,这意味着用户不仅可以一键迁移基于 protobuf 或 thrift 作为 IDL 的项目,还可以用 srpc 作为一个性能更优的 thrift 框架或者 brpc 框架。



与 thrift 相比,srpc 所实现的 thrift framed 协议在吞吐和长尾方面性能都远超 thrift 原生框架。且 srpc 对于 thrift 接口描述文件实现了解析和代码生成,因此用户在 srpc 上使用 thrift IDL 时无需依赖 thrift 库。


而在 baidu-std 协议的实现上,吞吐和长尾在大部分场景下依然是 srpc 更优。且由于 workflow 支持 Windows(同机性能比 linux 快 20%),所以这等同于用户得以在 Windows 下使用 brpc。还有一点值得一提的是,同样是支持 protobuf 的 RPC 框架,由于 srpc 实现了部分 IDL 解析和代码生成,接口形式无需受 protobuf 原始限制,因而所提供的接口比 brpc 更为简洁,以 server 的 rpc 接口为例:




一个通用、易扩展的 RPC 框架

除了支持 binary 传输,还支持 HTTP+json 和 HTTP+binary 的传输方式,业务可以借用 HTTP 实现跨语言,而传输本身对业务透明。这是除了上述介绍的协议层和接口描述文件层以外,srpc 的另外一个重要层次。其中传输方式和协议层还可以互相结合,如果接收方为任何一种协议+HTTP 作传输的 server,则用户都可以对其轻松地发送一个如下请求:



srpc 内部实现层次精巧,非常注重纵向层次拆分和横向解耦。其中压缩层、序列化层、协议层是互相解耦的,利用函数重载、派生子类实现父类接口和模版特化等多种多态方式,来实现内部使用同一套代码的高度复用。后续架构升级或者用户进行二次开发,无论是中间再加一层、还是某层内横向添加一种内容,都不需要改动现有的代码,十分方便。



一个打通了 Workfflow、功能更强大的任务流 RPC

任务流是 Workflow 在设计之初就引入的概念,其可将资源高度封装,用户可不用关心内部细节、不接触到连接池、线程池,仅需要了解业务关系就能实现复杂的业务逻辑。srpc 除了提供同步、半同步接口外,其异步接口可以利用 Context 拿到 Series 来打通 Workflow 任务流,这就意味着 srpc 可以把 RPC 调用当作任务流来组建。


srpc 还可以使用 Workflow 自带的其他功能,一方面是服务治理。Workflow 的 upstream 是本进程内把一批机器绑定到一个域名下,自带多种方式的负载均衡和熔断恢复等机制,srpc 的 client 对应的是一个 ip,或者一个带本地服务治理的集群,直接可以使用负载均衡和熔断恢复等机制。


另一方面,srpc 还可以调用 Workflow 其他资源。RPC 只是网络资源,而 Workflow 包含了如计算调度和异步文件 IO 等资源,还有目前已经实现的多种常用网络协议(包括 HTTP、Redis、MySQL、Kafka),这些都可以为 srpc 所用。



srpc 目前在搜狗搜索和搜狐集团团队中多个线上业务已经稳定使用一段时间,由于接口简洁易上手,且直接打通 workflow 的任务流、计算调度、服务治理等功能, 因此对开发效率有非常大的提升。但 srpc 相对来说也是一个很年轻且代码量不多(约一万行)的项目,搜狗后续还会持续推进其生态建设,有信心为不同的 RPC 开发场景提供更加全面的解决方案。


2020-10-12 12:073750

评论 1 条评论

发布
用户头像
先赞为快。btw,同样的 server 实现,为什么 srpc 的 QPS 可以比 fbthrift 大那么多的?
2020-10-19 13:46
回复
没有更多了
发现更多内容

Java开发必备 Git 分支开发:规范指南及完全学会Git的24堂课笔记

Java 程序员 后端

Java异常架构与异常关键字,海康威视java开发面经

Java 程序员 后端

Java如何支持函数式编程?,大专生面试阿里P7居然过了

Java 程序员 后端

linux去掉空行的几种方法

入门小站

Linux

Java岗大厂面试百日冲刺【Day42】,java基础面试宝典

Java 程序员 后端

033云原生之云服务测评指标体系

穿过生命散发芬芳

云原生 10月月更

Java并发之Condition详解,springframework教程

Java 程序员 后端

Java多态大乱炖,mysql基础教程视频

Java 程序员 后端

Java实现经典算法,阿里java技术专家面试

Java 程序员 后端

【架构设计模块九】:设计电商秒杀系统

Ryoma

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26

Java 程序员 后端

Java市场饱和了吗?现在转行学习Java会不会太晚了?

Java 程序员 后端

java并发之Condition图解与原理剖析,推荐

Java 程序员 后端

Java并发关键字-final,java实战视频

Java 程序员 后端

架构实战营模块二学习总结

吴霏

「架构实战营」

自由职业者靠什么赚钱?

石云升

职场经验 10月月更

Java岗开发者福利!Github热度飙升的多线程学习手册,已获31k+star

Java 程序员 后端

Java常量池理解与总结,java线程池回收原理

Java 程序员 后端

Java多线程 高频面试题,java架构师工作内容

Java 程序员 后端

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

Java 程序员 后端

Java实现图的存储和创建,linux编程基础课后答案第二章

Java 程序员 后端

java实现简单二叉树,深入分布式缓存从原理到实践技术分享

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day16

Java 程序员 后端

架构实战模块二作业

吴霏

「架构实战营」

Java学习笔记——正则表达式,平安金服java面试题

Java 程序员 后端

文本行随机打乱工具

入门小站

工具

Java学习路线和方法推荐,拿下我人生中第7个Offer

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14

Java 程序员 后端

Java实现RPC(源码),java常见面试题

Java 程序员 后端

架构实战营毕业总结

VE

架构实战课

Java开发工作4年还是只会“增删改查”,java技术栈太广

Java 程序员 后端

搜狗开源srpc:自研高性能通用RPC框架_架构_搜狗架构团队_InfoQ精选文章