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

ops/2024/9/23 4:31:18/

目录

一、面试官心理分析

二、面试题剖析


一、面试官心理分析

        说实话,就这问题,其实就跟问你如何自己设计一个 MQ 是一样的道理,就考察两个:
        · 你有没有对某个 rpc 框架原理有非常深入的理解。
        · 你能不能从整体上来思考一下,如何设计一个rpc框架,考考你的系统设计能力。

二、面试题剖析

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

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

( ps:一个点赞一份爱,点个关注不迷路!)


http://www.ppmy.cn/ops/32735.html

相关文章

Three.js——基础材质、深度材质、法向材质、面材质、朗伯材质、Phong材质、着色器材质、直线和虚线、联合材质

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

pytorch 线性代数基本操作

pytorch是非常好的人工智能训练和推理框架,我们来通过李沐老师的《动手学深度学习》来简单学习一下。 首先,安装pytorch,请参考pytorch官网:PyTorch 也可以到kaggle、colab、启智社区等使用配置好的pytorch环境,更简单…

vue路由懒加载是什么

Vue路由懒加载是一种优化技术,旨在减少应用程序的初始加载时间并提高性能。具体来说,它允许我们在用户实际需要访问某个路由时,才加载对应的组件代码,而不是在应用程序启动时一次性加载所有组件。 举个例子来说明Vue路由懒加载的…

基于51单片机的智能台灯proteus仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

基于51单片机的红外光敏检测智能台灯控制系统仿真( proteus仿真程序原理图报告讲解视频) 1.主要功能: 基于51单片机的红外检测光照检测智能台灯仿真设计 1、检测光照强度并显示在数码管上。 2、具备红外检测人体功能。 3、灯光控制模式分为自动模式…

C++Linux系统编程——Linux基本命令(究极全)

1.Linux常见目录介绍 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始&#xff0…

插入排序 - C++ / Python

插入排序 基本步骤:复杂度分析:C++实现代码:Python:----插入排序----插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到( O ( 1 )…

RTMP 直播推流 Demo(二)—— 音频推流与视频推流

音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…

OpenCV(六) —— Android 下的人脸识别

本篇我们来介绍在 Android 下如何实现人脸识别。 上一篇我们介绍了如何在 Windows 下通过 OpenCV 实现人脸识别,实际上,在 Android 下的实现的核心原理是非常相似的,因为 OpenCV 部分的代码改动不大,绝大部分代码可以直接移植到 …