Java手写RPC框架-01-开篇

项目背景

随着业务不断升级,系统规模不断扩大, 单体架构会产生越来越多的问题,需要引入微服务将原先架构解耦为一个个模块。每个服务模块放在不同的服务器上,能够保证系统在高并发环境下的正常运转。

各个服务模块之间如何相互调用,就使用到了RPC协议的思想(远程调用)。

RPC介绍

概念

1.RPC(Remote Procedure Call Protocol) 远程过程调用协议。
2.RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
3.RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。

常用RPC技术或框架

应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。

远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。

通信框架:MINA 和 Netty

为什么要有RPC?

服务化:微服务化,跨平台的服务之间远程调用;
分布式系统架构:分布式服务跨机器进行远程调用;
服务可重用:开发一个公共能力服务,供多个服务远程调用。
系统间交互调用:两台服务器A、B,服务器A上的应用a需要调用服务器B上的应用b提供的方法,而应用a和应用b不在一个内存空间,不能直接调用,此时,需要通过网络传输来表达需要调用的语义及传输调用的数据。

项目目的

仿照市场主流的RPC框架的设计思想,使用java语言手动实现一个高性能,高可用性的RPC框架

技术栈

fastjson和protobuf等主流数据序列化方式
高性能网络框架netty
分布式协调应用zookeeper
负载均衡算法实现
限流算法实现
重试任务和定时任务在项目场景下的运用

项目架构和流程图

在这里插入图片描述

项目常见问题

网络传输层面

1.netty传输位于网络结构模型中的哪一层?

2.netty的常见八股

3.讲一讲netty在你项目中的作用和执行流程?

4.为什么会出现沾包问题?如何解决的?

5.你觉得哪种数据序列化方式最好?

注册中心层面

1.zookeeper在项目中的角色?你为什么使用zookeeper

2.注册中心的意义?

3.zookeeper的常见八股

算法层面

1.四种负载均衡算法的比较?

2.讲一讲一致性哈希算法?

3.限流算法有哪些?

4.令牌桶算法如何实现的?

各种场景题

1.本地缓存怎么做的?能保证缓存和服务的一致性吗?

2.某个服务多个节点承压能力不一,怎么办?

3.每个服务都进行重试吗?

4.网络抖动导致某个节点被下线了,过一会网络好了,考虑过这个问题吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值