面试笔记9.22 面试官:聊聊你对RPC的理解

面试笔记9.22

RPC
	说明:单体架构到分布式架构的演进,必不可少的会使用到rps,rpc是远程调用协议,随着系统体谅主键增大,各个系统部署在不同的机器上,
	致使服务间的调用需要依赖到网络通信,使用rpc服务,消费方每次调用远程服务,客户端不用关心底层网络的交互问题,
	大大提高了系统的可靠性。
	rpc的架构包含四个核心组件
		1、客户端(Client):服务调用方(服务消费者)
		2、客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端
		3、服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
		4、服务端(Server):服务的真正提供者
	rpc调用过程
		1、服务消费者(client客户端)通过本地调用的方式调用服务
		2、客户端存根(client stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体
		3、客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端
		4、服务端存根(server stub)收到消息后进行解码(反序列化操作)
		5、服务端存根(server stub)根据解码结果调用本地的服务进行相关处理
		6、本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub)
		7、服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方
		8、客户端存根(client stub)接收到消息,并进行解码(反序列化)
		9、服务消费方得到最终结果
	rpc用到的关键技术点
		动态代理
			通过rpc调用服务,如果要实现类似于调本地service的效果,需要基于接口获取动态代理,就是在接口的本地存在这个代理,
			代理会找到服务对应机器地址,高并发还需要考虑负载均衡问题
				均衡的策略
					随机
					权重
					一致性哈希
					轮询
		序列化,反序列化
		NIO通信
		服务注册中心
	如何设计一个RPC框架
		rpc交互协议
			请求头header
			请求体body
	服务注册与发现的流程
		1:服务提供方绑定指定端口并启动服务,连接服务注册中心,将本机ip,端口,应用信息发送到过去并保存,
		状态变更时会推送到注册中心,再由注册中心推送给消费者
		2:消费者连接注册中心,发送应用信息请求服务信息到注册中心,注册中心根据消息内容匹配相应的服务列表发送到消费者应用缓存,
		消费者基于列表选择并发起调用
微服务带来哪些问题
	客户端的调用会受到网络问题的影响
	注册中心网络异常需要服务治理
Redis
	为什么Redis单线程模型效率却很高
		基于纯内存的操作
		非阻塞的IO多路复用机制
		避免多线程频繁切换上下文的额外消耗
	Redis线程模型
		IO 多路复用程序
		文件事件处理器
		文件事件分派器
		多个 Socket
	缓存与数据库一致性问题
		幻读:写入没成功,但被其他线程读到
		高并发读,并有少量更新
		解决办法
			1:先读缓存,不存在则请求数据库,取出后存入缓存,并响应数据
			2:更新时,先删除缓存,在更新数据库
			3:高并发时使用异步串行化方案,通过队列实现
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值