gRPC学习笔记——(一)学习铺垫

(如有不全,烦请指出,后续不断跟进修正)

一、什么是RPC?为什么要学习RPC?有没有RPC的代替品?

——今后所有的学习笔记都将以此三问起头。关于编程,个人觉得由此三问,可助于编码人更加透彻清晰的了解学习目的,以及学下去的动力!

   1. 什么是RPC(Remote Procedure Call Protocol,远程过程调用)?


        (部分摘抄于https://www.zhihu.com/question/25536695用心阁回答)

        官解:它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

        通解:简单的来说就是像调用本地服务一样调用远程服务。比如两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

        用例:定义一个方法:Employee getEmployeeByName(String fullName)

                    需要解决的问题:(1.通讯 | 2.寻址 | 3.序列化和编组 | 4.反序列化 | 5.  3 4问题的重复)


需要解决的问题
RPC原理

    2.为什么要学习RPC?


                学习契机:公司游戏服务器需要与我这边的代理后台交互,主要的交互有:充值及反馈、查询游戏数据、公告等等。同时双方使用不同数据库。游戏服务器这边的大神使用GO,熟悉Google的gRPC框架,商讨下决定使用RPC通信。

                比较决定:

                    相较于HTTP通信:速度慢、数据包大、实时交互压力大(无连接、无状态)、数据传输、安全性差。

                    相较于socket通信:较高的开发水平要求、较大的开发量

                优势:

                    可以实现跨语言跨平台调用,GO可以调用JAVA服务,反之亦可。

                    每一次调用方只需要提出需求,不需要了解对方具体的业务。

                    各自模块各自业务隔离开来,满足面向对象思维,各自封装各自的业务逻辑,不会因为不熟悉业务的人的修改而导致系统崩溃。

                    易于拓展,易于复用(当然满足了面向对象的特性肯定有具有面向对象的优势。)

    3.有没有RPC的代替品?


                本地通信——内存映射

                网络通信——socket、rpc。RESTful

认识网络传输


二、目前开源RPC框架有:

    推荐大家阅读分布式RPC框架性能大比拼 ,有详细比较,这里我只加入了去年刚刚开源的bRPC。


        1.Dubbo(阿里的soa服务化治理方案的核心框架,内置有rpc组件,国内最流行的rpc框架,目前听说又开始维护了)

        2.gRPC(Google开发,2016年开源)

        3.THrift(facebook开发,2007年贡献到apache基金)

        4.bRPC(百度开发,据说是百度唯一良心的项目,可惜目前仅开源了C++

        5.Motan(新浪开发,2016/5开源

各大rpc框架比较

推荐阅读更多精彩内容