分布式技术原理与算法解析
聂鹏程
智载云帆CTO,前华为分布式Lab资深技术专家
立即订阅
5969 人已学习
课程目录
已更新 36 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 四纵四横,带你透彻理解分布式技术
免费
01 | 分布式缘何而起:从单兵,到游击队,到集团军
02 | 分布式系统的指标:啥是分布式的三围
第一站:分布式协调与同步 (6讲)
03 | 分布式互斥:有你没我,有我没你
04 | 分布式选举:国不可一日无君
05 | 分布式共识:存异求同
06 | 分布式事务:All or nothing
07 | 分布式锁:关键重地,非请勿入
08 | 分布式技术是如何引爆人工智能的?
第二站:分布式资源管理与负载调度 (6讲)
09 | 分布式体系结构之集中式结构:一人在上,万人在下
10 | 分布式体系结构之非集中式结构:众生平等
11 | 分布式调度架构之单体调度:物质文明、精神文明一手抓
12 | 分布式调度架构之两层调度:物质文明、精神文明两手抓
13 | 分布式调度架构之共享状态调度:物质文明、精神文明多手协商抓
14 | 答疑篇:分布式事务与分布式锁相关问题
第三站:分布式计算技术 (4讲)
15 | 分布式计算模式之MR:一门同流合污的艺术
16 | 分布式计算模式之Stream:一门背锅的艺术
17 | 分布式计算模式之Actor:一门甩锅的艺术
18 | 分布式计算模式之流水线:你方唱罢我登场
第四站:分布式通信技术 (4讲)
19 | 分布式通信之远程调用:我是你的千里眼
20 | 分布式通信之发布订阅:送货上门
21 | 分布式通信之消息队列:货物自取
22 | 答疑篇:分布式体系架构与分布式计算相关问题
第五站:分布式数据存储 (5讲)
23 | CAP理论:这顶帽子我不想要
24 | 分布式数据存储系统之三要素:顾客、导购与货架
25 | 数据分布方式之哈希与一致性哈希:“掐指一算”与“掐指两算”的事
26 | 分布式数据复制技术:分身有术
27 | 分布式数据之缓存技术:“身手钥钱”随身带
特别放送 (3讲)
特别放送 | 分布式下的一致性杂谈
特别放送 | 徐志强:学习这件事儿,不到长城非好汉
特别放送 | 那些你不能错过的分布式系统论文
第六站:分布式高可靠 (5讲)
28 | 分布式高可靠之负载均衡:不患寡,而患不均
29 | 分布式高可靠之流量控制:大禹治水,在疏不在堵
30 | 分布式高可用之故障隔离:当断不断,反受其乱
31 | 分布式高可用之故障恢复:知错能改,善莫大焉
32 | 答疑篇:如何判断并解决网络分区问题?
分布式技术原理与算法解析
登录|注册

19 | 分布式通信之远程调用:我是你的千里眼

聂鹏程 2019-11-04
你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
在前面三个模块中,我带你学习了分布式领域中的分布式协调与同步、分布式资源管理与负载调度,以及分布式计算技术,相信你对分布式技术已经有了一定的了解。
通过前面的学习,不知道你有没有发现分布式的本质就是多进程协作,共同完成任务。要协作,自然免不了通信。那么,多个进程之间是如何通信的呢?这也就是在“第四站:分布式通信技术”模块中,我将要为你讲解的问题。
话不多说,接下来我们就一起进入分布式通信的世界吧。今天,我首先带你打卡的是,分布式通信中的远程调用。

什么是远程调用?

首先,我通过一个例子,来让你对远程调用和本地调用有一个直观了解。
以电商购物平台为例,每一笔交易都涉及订单系统、支付系统及库存系统,假设三个系统分别部署在三台机器 A、B、C 中独立运行,订单交易流程如下所示:
用户下单时,调用本地(机器 A)的订单系统进行下单;
下单完成后,会远程调用机器 B 上的支付系统进行支付,待支付完成后返回结果,之后在本地更新订单状态;
在本地远程调用机器 C 上的仓库系统出货,出货完成后返回出货结果。
在整个过程中,“下单”和“订单状态更新”两个操作属于本地调用,而“支付”和“出货”这两个操作是通过本地的订单系统调用其他两个机器上的函数(方法)实现的,属于远程调用。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式技术原理与算法解析》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • 任大鹏
    服务消费方本地缓存一份地址列表
    2019-11-04
    2
  • 鱼向北游
    回问题 可以用缓存 但要解决缓存失效问题
    2019-12-03
    1
  • 韩Garry
    老师,请问思维导图使用什么软件画的?
    2019-11-05
    1
    1
  • Jackey
    1.抱歉想先纠个错:RPC调用过程第6步Pay写成了Par
    2.思考题:没有了解过dubbo,工作中用的是Spring cloud,注册中心eureka。这里每个服务都会在本地缓存一份注册表,然后定时刷新,这样服务调用时只需要读本地缓存即可。但也引入了一些新的问题,比如缓存时间设置多久合适?太长导致更新不及时,太短则会耗费过多资源。这里是不是可以考虑注册中心“通知”各个客户端,例如引入mq,获取pub/sub。但这样会增加系统复杂度,还是要结合实际情况考虑。
    3.想补充一点点rpc调用的细节,内核中会有消息缓冲区,发送消息时会把消息写到buffer中,然后发给本地网卡,读消息时也一样,需要从内核的read buffer中读。如果发送消息很大,就会有多次网络通信。
    2019-11-04
    1
    1
  • 随心而至
    感觉缓存这个方法用的好多,我觉得本质上就是将数据放到离数据使用者更近的地方。比如磁盘、内存,高速缓存,寄存器,离CPU越来越近,访问速度越来越快,但造价也越来越贵。
    2019-11-04
    1
  • kylexy_0817
    终于打卡都这章,满满的干货,谢谢老师!
    2019-11-22
  • JackJin
    当一台机器 A 上运行的进程 P 需要远程调用时,它就先查一下机器 A 维护的映射表,找出对应的调用 ID,然后把它传到另一台机器 B 上,机器 B 通过查看它维护的映射表,从而确定进程 P 需要调用的函数,然后执行对应的代码,最后将执行结果返回到进程 P。
    请问老师这个映射表是服务提供方注册到注册中心,然后由注册中心下发给调用方的吗?
    2019-11-18
  • 一毛钱
    在各个进程本地做一个缓存,第一可以不用每次都查注册中心,第二可以用来预防注册中心挂掉而引起的服务不可用
    2019-11-17
  • Geek_f6f02b
    同步就是代码会按照所写代码逻辑顺序执行

    异步在正常情况下也是按照所写代码逻辑顺序执行,但是一些特殊的地方不会等待代码执行完成就执行下面代码,例如:异步 ajax 请求,如果你将异步请求来的结果赋值给一个未定义的变量,在下面代码直接alert 这个变量是那么 js 会报错未定义。因为异步执行的代码,还未等 ajax 请求结束就直接执行了下面的代码。


    阻塞,当处理的任务不满足(比如一些公用资源锁了)那么就会切换成其它进程处理(可能其它进程再次不满足执行状态再次切换),等其它进程任务处理完成再切换回来,依赖系统内核调度做进程切换

    非阻塞,进程有一个任务队列,所有请求都先到队列,进程获取队列中任务执行,当处理满足处理状态立即处理,当不满足处理状态,该进程会将当前处理状态存入内存然后注册一个触发事件,等满足该事件可以继续处理的时候会触发通知进程继续处理该任务,而获取通知前该进程可以直接处理下一个任务无需等待,也不依赖系统的进程切换,所以没有进程切换的损耗效率更高

    特点:同步编程的代码更易书写也便于理解排错,非阻塞效率比阻塞效率更高
    不知道这样理解对不对?
    2019-11-15
  • Eternal
    引入了注册中心后,服务的高可用被转嫁到了注册中心,如果注册中心挂了,所有调用都不通;如果一个服务离开或者加入注册中心,这个时候服务注册中心的服务列表是实时更新还是由一定延迟,这也影响可用性
    2019-11-09
  • leslie
    老师的这张图表分享的非常好:用句通俗的话语“没有对比就没有伤害",各种知识的优劣直接用图表展现就非常直观的体现了-方便记忆;毕竟学习中有些知识还是要记忆的。
           记住关键的知识,然后对课程的知识勤加思考和练习;自然就掌握了。
    2019-11-06
  • 1024
    同步异步的例子举的挺好。
    思考题:服务调用方应该有个预加载和缓存机制来减少调用注册中心的次数
    2019-11-04
  • 随心而至
    服务调用端加个本地缓存,但要注意缓存失效的问题,比如注册中心发现注册的服务有变更(可能是新服务来了,也可能是老服务有个实力挂掉等),要通知服务调用端更新本地缓存。
    2019-11-04
  • 啦啦啦
    不错不错,让我真正理解了rpc
    2019-11-04
收起评论
14
返回
顶部