Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?

面试题

如何自己设计一个类似 Dubbo 的 RPC 框架?

面试官心理分析

说实话,就这问题,其实就跟问你如何自己设计一个 MQ 一样的道理,就考两个:

  • 你有没有对某个 rpc 框架原理有非常深入的理解。
  • 你能不能从整体上来思考一下,如何设计一个 rpc 框架,考考你的系统设计能力。

面试题剖析

其实问到你这问题,你起码不能认怂,因为是知识的扫盲,那我不可能给你深入讲解什么 kafka 源码剖析,dubbo 源码剖析,何况我就算讲了,你要真的消化理解和吸收,起码个把月以后了。

所以我给大家一个建议,遇到这类问题,起码从你了解的类似框架的原理入手,自己说说参照 dubbo 的原理,你来设计一下,举个例子,dubbo 不是有那么多分层么?而且每个分层是干啥的,你大概是不是知道?那就按照这个思路大致说一下吧,起码你不能懵逼,要比那些上来就懵,啥也说不出来的人要好一些。

举个栗子,我给大家说个最简单的回答思路:

  • 上来你的服务就得去注册中心注册吧,你是不是得有个注册中心,保留各个服务的信心,可以用 zookeeper 来做,对吧。
  • 然后你的消费者需要去注册中心拿对应的服务信息吧,对吧,而且每个服务可能会存在于多台机器上。
  • 接着你就该发起一次请求了,咋发起?当然是基于动态代理了,你面向接口获取到一个动态代理,这个动态代理就是接口在本地的一个代理,然后这个代理会找到服务对应的机器地址。
  • 然后找哪个机器发送请求?那肯定得有个负载均衡算法了,比如最简单的可以随机轮询是不是。
  • 接着找到一台机器,就可以跟它发送请求了,第一个问题咋发送?你可以说用 netty 了,nio 方式;第二个问题发送啥格式数据?你可以说用 hessian 序列化协议了,或者是别的,对吧。然后请求过去了。
  • 服务器那边一样的,需要针对你自己的服务生成一个动态代理,监听某个网络端口了,然后代理你本地的服务代码。接收到请求的时候,就调用对应的服务代码,对吧。

这就是一个最最基本的 rpc 框架的思路,先不说你有多牛逼的技术功底,哪怕这个最简单的思路你先给出来行不行?

转载来源:https://github.com/doocs/advanced-java/blob/master/docs/distributed-system/dubbo-rpc-design.md

Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?相关推荐

  1. php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...

    C++大富翁代码 所属分类:Windows编程 开发工具:C/C++ 文件大小:349KB 下载次数:6 上传日期:2018-05-15 21:11:38 上 传 者:红黑二叉树 说明:  现在要设计 ...

  2. Java面试,如何设计一个秒杀系统

    Java面试,如何设计一个秒杀系统说起秒杀,我想你肯定不陌生,从双十一购物到春节抢红包,再到逢年过节抢⻋票,"秒杀"的场景在我们的生活中处处可⻅.简单来说,秒杀就是在同一个时刻有大 ...

  3. 设计一个简易的引导任务框架(2) | 4.23粉丝赠书

    今天是4.23世界读书日,公众号向支持的小伙伴们送出下面3本技术图书(三选一)! 参与方式: 本文点赞留言,必须超过20字,以及你想要的图书名字参与活动 积赞最多的前3名读者,将会获得赠书,三选一 活 ...

  4. 图文分析:如何利用Google的protobuf,来思考、设计、实现自己的RPC框架

    [CSDN 编者按]本文主要分析 Google 的 protobuf 序列化工具的基本原理和使用.利用 protobuf 序列化功能, libevent 网络通信功能,来设计.实现自己的 RPC 远程 ...

  5. 手动实现一个基于netty的RPC框架(模拟dubble)

    轻量级RPC框架开发 内容安排: 1.掌握RPC原理 2.掌握nio操作 3.掌握netty简单的api 4.掌握自定义RPC框架 RPC原理学习 什么是RPC RPC(Remote Procedur ...

  6. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    优知学院 2019-01-22 18:43:51 之前持续分享的几十期阿里Java面试题中,几乎每次必问Dubbo,比如:"如何从0到1设计一个Dubbo的RPC框架",其实主要考 ...

  7. 【面试】如何设计一个高并发系统

    一.为什么需要秒杀系统? 电商平台本质是在线上撮合买卖双方的购销需求,达成交易.虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动.当供求平衡时,买方和卖方处于对等关系,双方相对稳 ...

  8. 美团面试:如何设计一个注册中心?

    ‍ ‍今天,给大家分享如何设计一个注册中心. 不管是出于面试,还是深入学习注册中心,关于如何设计一个注册中心都是一个很好的话题. 假设现在我们系统有两个小系统: 订单系统 商品系统 单个系统分别部署在 ...

  9. 系统设计面试:如何设计一个 Pastebin

    今天分享一下如何设计一个类 Pastebin 的 web 服务,用户可以存储纯文本,然后获得一个随机生成的 URL,其他人可以通过这个 URL 来访问文本内容,这很像一个在线共享粘贴板的服务,如果你还 ...

最新文章

  1. Linux系统卡慢之调优方法
  2. ASP.NET Page执行顺序如:OnPreInit()、OnInit()
  3. php socketconnect连接失败_PHP设计模式之模板方法模式
  4. Qt5:渐变效果的实现
  5. 作者:李廉(1951-),男,合肥工业大学计算机与信息学院教授
  6. Golang笔记——tcp 编程
  7. 网络编程基础_5.3聊天室-多人聊天室
  8. 在学习时,遇到in module ssbuild. File is included in 4 contexts
  9. 免费注册的域名.tk
  10. 加减乘除等符号大全中英对照,在英语中的用法
  11. java快速开发项目_GitHub - Johnnyzhoutq/X-SpringBoot: X-SpringBoot是一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】...
  12. 三款新品重磅齐发!汉高亮相2021中国国际纺织面料及辅料(秋冬)博览会
  13. python爬淘宝商品销量信息_python爬取淘宝商品销量信息
  14. PXC 安装 (yum操作)
  15. There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox.错误
  16. 忘记svn密码怎么办
  17. HTML hr 标签定义和用法
  18. html5爱心鱼游戏教程,HTML5小游戏---爱心鱼(上)
  19. elementui 限制输入字数
  20. C语言.csv编程应用

热门文章

  1. 深入理解JavaScript系列:《你真懂JavaScript吗?》答案详解
  2. 二级域名和二级目录的联系与区别
  3. Python——pip安装报错:is not a supported wheel on this platform
  4. 【AI视野·今日NLP 自然语言处理论文速览 第十九期】Mon, 5 Jul 2021
  5. 【NIPS2020】 Workshop List
  6. 【Python AsciiArt】利用命令行打印出字符图案
  7. 【今日CV 视觉论文速览】22 Nov 2018
  8. Kubernetes-服务连接和暴露(endpoints)(二十)
  9. openwrt 编译时提示缺少libstdc++,libpthread.so.0文件
  10. 对象 对象 java 1615134277