项目背景
随着业务不断升级,系统规模不断扩大, 单体架构会产生越来越多的问题,需要引入微服务将原先架构解耦为一个个模块。每个服务模块放在不同的服务器上,能够保证系统在高并发环境下的正常运转。
各个服务模块之间如何相互调用,就使用到了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.网络抖动导致某个节点被下线了,过一会网络好了,考虑过这个问题吗?