rpc相关技术调研
REST:无状态的数据传输结构,适用于通用、快速迭代和标准化语义的场景。
gRPC:轻量的传输方式,特殊适合对性能高要求或者环境苛刻的场景,比如 IOT。
GraphQL: 请求者可以自定义返回格式,某些程度上可以减少前后端联调成本。
Webhooks: 推送服务,主要用于服务器主动更新客户端资源的场景。
nanomsg
zmq作者重新设计的一个框架,解决了一些zmq的问题。
作者的博客
http://250bpm.com/
go 实现
https://bravenewgeek.com/fast-scalable-networking-in-go-with-mangos/
scalability protocols are currently available
- PAIR - simple one-to-one communication
- BUS - simple many-to-many communication
- REQREP - allows to build clusters of stateless services to process user requests
- PUBSUB - distributes messages to large sets of interested subscribers
- PIPELINE - aggregates messages from multiple sources and load balances them among many destinations
- SURVEY - allows to query state of multiple applications in a single go
transports mechanisms
- INPROC - transport within a process (between threads, modules etc.)
- IPC - transport between processes on a single machine
- TCP - network transport via TCP
- WS - websockets over TCP
gRPC
The grpc library uses HTTP2 as a transport layer and provides a code generator based on the protocol buffer syntax making it very simple to use.
GraphQL
GraphQL 不是 REST 的替代品,而是另一种交互形式:前端决定后端的返回结果。
GraphQL 带来的最大好处是精简请求响应内容,不会出现冗余字段,前端可以决定后端返回什么数据。但要注意的是,前端的决定权取决于后端支持什么数据,因此 GraphQL 更像是精简了返回值的 REST,而后端接口也可以一次性定义完所有功能,而不需要逐个开发。
GraphQL 需要配套
GraphQL 不是 REST 的替代品,所以不要想着团队从 Http 接口迁移到 GraphQL 就能提升 X% 的开发效率。GraphQL 方案是一种新的前后端交互约定,所以上手成本会比较高,同时,为了方便前端同学拼 query,等于把一部分后端工作量转移给了前端,如果此时没有一个足够好用的平台快速查阅、生成、维护这些定义,开发效率可能不升反降。
总的来说,对外开放 API 或者拥有完整配套的场景,使用 GraphQL 是比较理想的,但对于快速迭代,平台又不够成熟的团队,继续使用标准 Http 接口可以更快完成项目。
Protocol Buffers vs json
优点:
- 資料輕量化:資料非常輕量,省去了不必要的 { 或 : 累贅。
- 混淆性:在一般人眼中無法輕易地猜測出資料結構為何,因為有經過編碼。
- 效能高:處理速度很快。
- 極具方便性:結構就是你的資料模型,你能夠直接在程式中使用這些結構,而不用建立新的物件來接納、映射(Mapping)這些資料。
- 清晰明瞭、無需文件:.proto 檔案本身就是你的文件,不需要額外撰寫 API 或結構文件來告訴別人你接受怎樣的資料。
适合使用 json 的场景:
- 當你希望資料是人類可解讀的時候。
- 你不打算直接把接收到的資料拿來處理,你希望從中拿取部分資料作為處理。
- 你希望在純文字、終端機的情況下就能夠與伺服器溝通。
- 不想經過任何特殊處理,想直接在瀏覽器中解讀。