Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?
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 框架?相关推荐
- php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...
C++大富翁代码 所属分类:Windows编程 开发工具:C/C++ 文件大小:349KB 下载次数:6 上传日期:2018-05-15 21:11:38 上 传 者:红黑二叉树 说明: 现在要设计 ...
- Java面试,如何设计一个秒杀系统
Java面试,如何设计一个秒杀系统说起秒杀,我想你肯定不陌生,从双十一购物到春节抢红包,再到逢年过节抢⻋票,"秒杀"的场景在我们的生活中处处可⻅.简单来说,秒杀就是在同一个时刻有大 ...
- 设计一个简易的引导任务框架(2) | 4.23粉丝赠书
今天是4.23世界读书日,公众号向支持的小伙伴们送出下面3本技术图书(三选一)! 参与方式: 本文点赞留言,必须超过20字,以及你想要的图书名字参与活动 积赞最多的前3名读者,将会获得赠书,三选一 活 ...
- 图文分析:如何利用Google的protobuf,来思考、设计、实现自己的RPC框架
[CSDN 编者按]本文主要分析 Google 的 protobuf 序列化工具的基本原理和使用.利用 protobuf 序列化功能, libevent 网络通信功能,来设计.实现自己的 RPC 远程 ...
- 手动实现一个基于netty的RPC框架(模拟dubble)
轻量级RPC框架开发 内容安排: 1.掌握RPC原理 2.掌握nio操作 3.掌握netty简单的api 4.掌握自定义RPC框架 RPC原理学习 什么是RPC RPC(Remote Procedur ...
- 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
优知学院 2019-01-22 18:43:51 之前持续分享的几十期阿里Java面试题中,几乎每次必问Dubbo,比如:"如何从0到1设计一个Dubbo的RPC框架",其实主要考 ...
- 【面试】如何设计一个高并发系统
一.为什么需要秒杀系统? 电商平台本质是在线上撮合买卖双方的购销需求,达成交易.虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动.当供求平衡时,买方和卖方处于对等关系,双方相对稳 ...
- 美团面试:如何设计一个注册中心?
今天,给大家分享如何设计一个注册中心. 不管是出于面试,还是深入学习注册中心,关于如何设计一个注册中心都是一个很好的话题. 假设现在我们系统有两个小系统: 订单系统 商品系统 单个系统分别部署在 ...
- 系统设计面试:如何设计一个 Pastebin
今天分享一下如何设计一个类 Pastebin 的 web 服务,用户可以存储纯文本,然后获得一个随机生成的 URL,其他人可以通过这个 URL 来访问文本内容,这很像一个在线共享粘贴板的服务,如果你还 ...
最新文章
- Linux系统卡慢之调优方法
- ASP.NET Page执行顺序如:OnPreInit()、OnInit()
- php socketconnect连接失败_PHP设计模式之模板方法模式
- Qt5:渐变效果的实现
- 作者:李廉(1951-),男,合肥工业大学计算机与信息学院教授
- Golang笔记——tcp 编程
- 网络编程基础_5.3聊天室-多人聊天室
- 在学习时,遇到in module ssbuild. File is included in 4 contexts
- 免费注册的域名.tk
- 加减乘除等符号大全中英对照,在英语中的用法
- java快速开发项目_GitHub - Johnnyzhoutq/X-SpringBoot: X-SpringBoot是一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】...
- 三款新品重磅齐发!汉高亮相2021中国国际纺织面料及辅料(秋冬)博览会
- python爬淘宝商品销量信息_python爬取淘宝商品销量信息
- PXC 安装 (yum操作)
- There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox.错误
- 忘记svn密码怎么办
- HTML hr 标签定义和用法
- html5爱心鱼游戏教程,HTML5小游戏---爱心鱼(上)
- elementui 限制输入字数
- C语言.csv编程应用
热门文章
- 深入理解JavaScript系列:《你真懂JavaScript吗?》答案详解
- 二级域名和二级目录的联系与区别
- Python——pip安装报错:is not a supported wheel on this platform
- 【AI视野·今日NLP 自然语言处理论文速览 第十九期】Mon, 5 Jul 2021
- 【NIPS2020】 Workshop List
- 【Python AsciiArt】利用命令行打印出字符图案
- 【今日CV 视觉论文速览】22 Nov 2018
- Kubernetes-服务连接和暴露(endpoints)(二十)
- openwrt 编译时提示缺少libstdc++,libpthread.so.0文件
- 对象 对象 java 1615134277