掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
不久之前,搜狗開源了一個輕量級的 RPC 框架——srpc。這是一個基于 Sogou C ++ Workflow 的 RPC 項目,通過解析部分 IDL(接口描述文件) 和進(jìn)行代碼生成,實現(xiàn)了與 workflow 底層通信框架的對接和非常簡潔的用戶接口。

srpc 整個項目的代碼量約有一萬行,目前已經(jīng)在搜狗搜索和搜狐集團(tuán)團(tuán)隊的多個線上業(yè)務(wù)中穩(wěn)定應(yīng)用。srpc 接口簡潔易上手,直接打通了 workflow 的任務(wù)流、計算調(diào)度、服務(wù)治理等功能, 可以快速提升開發(fā)效率,對于現(xiàn)有的 pb / thrift 描述文件的項目,也可以做到一鍵遷移。
srpc 項目支持多個層級的縱向拆解和橫向解耦,其中主要包括的層級有用戶代碼、IDL 序列化、數(shù)據(jù)組織、壓縮、協(xié)議和通信。
這些層級之間可以相互拼裝,如果想要實現(xiàn)一套代碼的高度復(fù)用也有多種方式,例如函數(shù)重載、派生子類實現(xiàn)父類接口和模版特化等。之后,如果想要進(jìn)行架構(gòu)升級,也可以在中間再加一層,或是在某層內(nèi)橫向添加一些內(nèi)容。
對于用戶來說,可能更關(guān)心的是 method,request,response。對應(yīng)到 srpc 項目中就是接口描述文件層、RPC 協(xié)議層、網(wǎng)絡(luò)通信層。
其中,接口描述文件層支持多種 IDL 格式,包括 Protobuf 和 Thrift;RPC 協(xié)議層支持 Thrift-binary、BRPC-std 和 SogouRPC-std;網(wǎng)絡(luò)通信層支持 TCP、TPC_SSL、HTTP、HTTPS、HTTP2。
基礎(chǔ)功能對比圖
前文提到 srpc 的接口描述文件層支持 protobuf 和 thrift,這意味著用戶不僅可以一鍵遷移基于 protobuf 或 thrift 作為 IDL 的項目,還可以用 srpc 作為一個性能更優(yōu)的 thrift 框架或者 brpc 框架。
與 thrift 相比,srpc 所實現(xiàn)的 thrift framed 協(xié)議在吞吐和長尾方面性能都遠(yuǎn)超 thrift 原生框架。srpc 對于 thrift 接口描述文件實現(xiàn)了解析和代碼生成,用戶在 srpc 上使用 thrift IDL 時無需依賴 thrift 庫。
而在 baidu-std 協(xié)議的實現(xiàn)上,吞吐和長尾在大部分場景下依然是 srpc 更優(yōu)。由于 workflow 支持 Windows(同機性能比 linux 快 20%),所以用戶得以在 Windows 下使用 brpc。另外,同樣是支持 protobuf 的 RPC 框架,由于 srpc 實現(xiàn)了部分 IDL 解析和代碼生成,接口形式無需受 protobuf 原始限制,因而所提供的接口比 brpc 更為簡潔。
在易用性和可擴展性方面,用戶可以通過 http+json 實現(xiàn)跨語言,如果是 server 提供方,用任何語言的 http server 接受 post 請求,解析若干 http header 即可;如果是 client 調(diào)用方,用任何語言的 http client 發(fā)送 post 請求,添加若干 http header 即可。
srpc 是一個基于 Sogou C ++ Workflow 的 RPC 項目,所以天然就兼容 workflow 的使用方式,例如提供創(chuàng)建任務(wù)的接口來創(chuàng)建一個 rpc 任務(wù)、可以把 rpc 任務(wù)放到任務(wù)流圖中,回調(diào)函數(shù)里也可以拿到當(dāng)前的任務(wù)流、支持 workflow 所支持的其他功能,包括 upstream、計算調(diào)度、異步文件 IO 等。
同時,srpc 與 workflow 一起協(xié)作還可以完成很多其它事情:
srpc 項目開源地址:
https://github.com/sogou/srpc

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流