微服务Dubbo
文章目录
- 一、微服务相关
- 1、能说下 http 和rpc 的区别?
- 2、说说有哪些负载均衡算法?
- 3、如何知道线上的 QPS?
- 4、 Sentinel 限流熔断降级核心源码剖析
- 5、分布式事务 (seata)
- 6.序列化与反序列化
- 二、Dubbo 底层原理与源码
- 1、 为什么不注入实现类而是接口?通过按口怎么找到具体的提供者实现方法?
- 2、注册中心为什么是一个单独的服务?
- 3、rpc 和 grpc有什么区别?
- 4、http 和 http2 有什么区别?
- 5、 tcp 为什么可以多路复用?
一、微服务相关
1、能说下 http 和rpc 的区别?
可以说 rPC包含 http
http:种应用层协议,主要强调网络通信
rpc:远程调用过程,是一种分布式系統之间的通信协议,强调的是服务与服务间的远程调用。一些PC 框架,如 gIRC, 底层用的就是 http2
2、说说有哪些负载均衡算法?
轮询、加权、随机、加权、最少链接、哈希(取模)
3、如何知道线上的 QPS?
微服务自动化监控 Prometheus&Grafana,每秒 3000 算是比较高的
4、 Sentinel 限流熔断降级核心源码剖析
核心:滑动时间窗口计数实现(每个时问段内统计事件数量,以滑动的方式将时间向后推进行统计)
5、分布式事务 (seata)
AT模式(默认)
前提:基于支持本地 ACID 事务的关系型数据库+java应用:通过jdbc 访问数据库
整体机制:两阶段提交协议的演变
一阶段:业务数据和回滚日志,记录在同一个事务中提交,释放锁和资源
二阶段:回漆通过一阶段的回滚日志进行反向补偿 (比如如果是新增了,就删除)
6.序列化与反序列化
serializable 是一个标记接口,实现该接口的类在 jvm 检查时进行标记该类可序列化,然后将该类转换为字节流。保证了对象在不同机
器、进程间的通信(因为转化为字节流不会乱码)推荐手动加一个序列化 id 可以提高安全性(避免黑容算改字节流),也能避免不同编泽器
jdk版本不同出现反序列化不兼容问题
二、Dubbo 底层原理与源码
1、 为什么不注入实现类而是接口?通过按口怎么找到具体的提供者实现方法?
实现类太稱合,里面代码太多,可能涉及数据库链接等问题。
通过本地注册表(map)将接口,版本号 (@Service (version=" 1.0“)),实现类等进行存储,如果多个类实现一个接口,通过版本号来进行区分(如果不传版本号直接报错)
2、注册中心为什么是一个单独的服务?
因为要保证服务提供者和消费者部分数据的共享,注册中心将服务提供者的IP暴露到注册中心(如果是集群 List,具体选择哪个提供者,就用到了负载均衡)。注意:服务消费者会有本地缓存,从注册中心获取的 IP 会缓存一份到本地
3、rpc 和 grpc有什么区别?
grpc是基于 http2协议的高性能远程过程调用框架,比rpc具备更高效的序列化机制和网络传输速度,像K8s就是使用的 grpc (如 API Server、 Controller Manager 等之间就是使用的 grpc通信)
4、http 和 http2 有什么区别?
http2是http 协议的一个较新版本,与http 相比有显著的区别,并不是简单的 http 改进。
1) 多路复用:http2引入了多路复用机制,允许在同一个tpc链接上同时请求和接收多个响应,减少了因建立多个链接引起的延迟和资源占用,提供了效率。
2)二进制协议:http 使用的是文本传输,http2使用了更高效的二进制格式来传输数据。
3)服务器推送:http2允许服务器主动向容户端推送资源,减少了客户端端的额外请求。
4) 头部压缩:http2 使用了头部压缩算法,减少了头部信息,有利于降低延迟。
5、 tcp 为什么可以多路复用?
头部信息和数据的分段机制。使用 tcp传输数据时,tcp会将数据分成小块,并且在小块头部加入一些信息 (源端口、目标端口等)。这些信息告诉接收方怎么将小块组装成完整数据,这样 tcp 就可以在一个’通道’上传输多个独立的数据流,实现了多路复用。