前不久,搜狗开源了一款轻量级RPC框架——srpc。这是一个基于SogouC++Workflow的RPC项目。通过解析部分IDL(接口描述文件)并生成代码,实现了与工作流底层通信框架的连接和非常简洁的用户界面。整个srpc项目代码量约10000行,已稳定应用于搜狗搜索和搜狐集团团队的多个线上业务。srpc界面简单易用。直接对接Workflow任务流、计算调度、服务治理等功能,可快速提升开发效率。对于已有的项目,有pb/thrift描述文件,也可以实现一键迁移。1.srpc项目架构srpc项目支持多层次的垂直拆解和水平解耦,主要包括用户代码、IDL序列化、数据组织、压缩、协议和通信。这些级别可以相互组装。如果要实现一组代码的高度复用,方法有很多种,比如函数重载、派生子类实现父类接口、模板特化等。以后如果要升级架构,也可以在中间再增加一层,或者在某一层内横向增加一些内容。对于用户来说,他们可能更关心方法、请求和响应。srpc项目对应的是接口描述文件层、RPC协议层、网络通信层。其中,接口描述文件层支持多种IDL格式,包括Protobuf和Thrift;RPC协议层支持Thrift-binary、BRPC-std和SogouRPC-std;网络通信层支持TCP、TPC_SSL、HTTP、HTTPS、HTTP2。基本功能对比图2.srpc项目性能上面提到srpc的接口描述文件层支持protobuf和thrift,也就是说用户不仅可以一键迁移基于protobuf或thrift作为IDL的项目,还可以使用srpc作为具有更高性能的IDL项目。优秀的thrift框架或者brpc框架。与thrift相比,srpc实现的thriftframedprotocol在吞吐量和长尾性能上远超thriftnativeframework。srpc实现了对thrift接口描述文件的解析和代码生成,用户在srpc上使用thriftIDL不需要依赖thrift库。在baidu-std协议的实现上,吞吐量和长尾在大部分场景下还是优于srpc的。由于工作流支持Windows(同机性能比linux快20%),用户可以在Windows下使用brpc。另外,它也是一个支持protobuf的RPC框架。由于srpc实现了部分IDL解析和代码生成,接口形式不需要受限于原来的protobuf,所以提供的接口比brpc更简洁。在易用性和扩展性方面,用户可以通过http+json实现跨语言。如果是服务器提供者,使用任意语言的http服务器,接受post请求,解析几个http头;如果是客户端调用者,使用Anylanguagehttp客户端可以发送post请求,只需要添加一些httpheaders即可。3、与工作流的协作srpc是一个基于搜狗C++Workflow的RPC项目,所以自然兼容工作流的使用,比如提供创建任务的接口来创建rpc任务,将rpc任务放在任务流图中,回调函数还可以获取当前任务流,支持工作流支持的其他功能,包括上游、计算调度、异步文件IO等。同时srpc和workflow的配合还可以完成很多其他的事情:srpc提供了同步、半同步、异步接口,异步接口可以用来打通workflow任务流;绑定到域名下的upstream管理,具有多种负载均衡和熔断恢复机制,srpcclients可以直接使用,创建的client对应一个IP或一个本地服务治理的集群;其他级别的client和task配置,比如可以使用工作流的各种超时,工作流的网络请求本身有重试次数,rpc默认配置为0,如果需要用户可以自行配置;其他系统资源,rpc只是Network相关的,workflow包括计算、异步文件IO等资源,任务流开启后srpc可以使用。srpc项目开源地址:https://github.com/sogou/srpc
