在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变。RPC(Remote Procedure Call Protocol远程过程调用)是分布式架构的核心,按响应方式分如下两种:

同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作

异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。

同步调用的实现方式有WebService和RMI。Web Service提供的服务是基于web容器的,底层使用http协议,因而适合不同语言异构系统间的调用。RMI实际上是Java语言的RPC实现,允许方法返回 Java 对象以及基本数据类型,适合用于JAVA语言构建的不同系统间的调用。

异步调用的JAVA实现版就是JMS(Java Message Service),目前开源的的JMS中间件有Apache社区的ActiveMQ和Kafka,另外有阿里的RocketMQ,昨天(2016年11月28日)看到的新闻阿里已经将此组件捐献给Apache社区基金组织。

下面重点对RPC同步调用的原理进行探讨。简单来说一个RPC架构里包含如下4个组件:

1、 客户端(Client):服务调用方

2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方

3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务

4、 服务端(Server):真正的服务提供者。

这4个组件调用时序图如下:

1、 服务调用方(client)调用以本地调用方式调用服务;

2、 client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;在Java里就是序列化的过程

3、 client stub找到服务地址,并将消息通过网络发送到服务端;

4、 server stub收到消息后进行解码,在Java里就是反序列化的过程;

5、 server stub根据解码结果调用本地的服务;

6、 本地服务执行处理逻辑;

7、 本地服务将结果返回给server stub;

8、 server stub将返回结果打包成消息,Java里的序列化;

9、 server stub将打包后的消息通过网络并发送至消费方

10、 client stub接收到消息,并进行解码, Java里的反序列化;

11、 服务调用方(client)得到最终结果。

RPC框架的目标就是把2-10步封装起来,把调用、编码/解码的过程封装起来,让用户像调用本地服务一样的调用远程服务。要做到对客户端(调用方)透明化服务, RPC框架需要考虑解决如下问题:

1、 服务端提供的服务如何发布,客户端如何发现服务;

2、 如何对请求对象和返回结果进行序列化和反序列化;

3、 如何更高效进行网络通信。

以上问题在一些开源的RPC框架里都有比较好的解决,如阿里的Dubbo,Facebook的Thrift。有兴趣的同学可以对这两个框架进行深入学习研究。

RPC是每个分布式应用的必用之术,本文只是进行了一个粗略的描述,希望能对大家所有帮助,抛砖引玉,引起更多人对底层技术实现的兴趣。

分布式架构核心RPC原理的更多相关文章

  1. 分布式架构基石RPC的实现原理

    RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...

  2. 面向服务架构之RPC原理与实例

    1.RPC概述 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样.主要是为了应对当前互 ...

  3. 分布式架构的CAP原理

    CAP 定理的含义   一.分布式系统的三个指标 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标. Consistency Availability Parti ...

  4. 转载:把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理等等,这样你的核心竞争力才会越来越高

    https://developer.51cto.com/art/202001/608984.htm 把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架 ...

  5. 【分布式搜索引擎】Elasticsearch分布式架构原理

    一.相关概念介绍 1)集群(cluster) 一个集群(cluster)由一个或多个节点组成. 这些节点具有相同的cluster.name,它们协同工作,分享数据和负载.当加入新的节点或者删除一个节点 ...

  6. TCC分布式事务的实现原理(转载 石杉的架构笔记)

    拜托,面试请不要再问我TCC分布式事务的实现原理![石杉的架构笔记] 原创: 中华石杉 目录 一.写在前面 二.业务场景介绍 三.进一步思考 四.落地实现TCC分布式事务 (1)TCC实现阶段一:Tr ...

  7. es的分布式架构原理是什么?

    es的分布式架构原理是什么? 1.首先说一些分片(shard)是什么? ES中所有数据均衡的存储在集群中各个节点的分片中,会影响ES的性能.安全和稳定性 每个shard都是一个最小工作单元,承载部分数 ...

  8. 【架构设计】分布式文件系统 FastDFS的原理和安装使用

    本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下:   -- mo ...

  9. 不懂这些分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构

    互联网行业是大势所趋,从招聘工资水平即可看出,那么如何提升自我技能,满足互联网行业技能要求?需要以目标为导向,进行技能提升,本文主要针对招聘中高频提及的分布式系统设计.架构(数据一致性)做了分析,祝各 ...

随机推荐

  1. nohub用法

    在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/my ...

  2. Cache-Aside模式

    Cache-Aside 该模式是从数据仓库中将数据加载到缓存中,从而提高访问速度的一种模式.该模式可以有效的提高性能,同时也能一定程度上保证缓存中的数据和数据仓库中的数据的一致性,和同步数据到数据仓库 ...

  3. 电脑开机svchost.exe报错

    一.问题: 这几天电脑开机一直弹出一个对话框说:svchost.exe文件不能运行,百度后发现是用于动态运行库的依赖(dll),不过不知道是个啥东西 二.解决: 开机弹框虽然不影响电脑的使用,但是看着 ...

  4. 【SQLSERVER】递归查询算法实例

    一.递归查询 1.结构: 递归CTE最少包含两个查询(也被称为成员). 第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点. 第二个查询被称为递归成员,使该查询称为递归成员 ...

  5. day1 函数 (独立功能代码块)

    1.引入函数 2.函数执行过程 4.带参数的函数 5.带返回值的函数 6. 多个返回值 (return a,b,c)元组 7.4种函数 1.引入函数 独立功能代码块 ---> 封装 ----&g ...

  6. CF 1065 E. Side Transmutations

    E. Side Transmutations http://codeforces.com/contest/1065/problem/E 题意: 长度为n的字符串,字符集为A,问多少不同的字符串.两个字 ...

  7. xpath基础

    XML:一种可扩展标记语言,HTML就是一种XML XPATH:也是一个W3C标准,在所有XML中均可使用 XPATH的路径规则 /表示跟节点 /html 表示html这个元素 /html/body ...

  8. 面向忙碌开发者的 Android

    面向忙碌开发者的 Android passiontim 关注 2016.11.19 21:41* 字数 4013 阅读 2967评论 2喜欢 92 面向忙碌开发者的 Android 视频教程(Tuts ...

  9. python5

    print应用 // 输出两行 print "hahaha" print "hehehe" // 输出在同一行里 print "hahaha" ...

  10. python的pip升级问题

    近来由于pip升级为10.0.1了,导致使用pip命令报错,使用过很多方法,最终找到一种相对靠谱的方法,一下是步骤: 进入https://pypi.python.org/pypi/pip 下载pip- ...