微服务&Dubbo

文章目录

      • 一、微服务相关
        • [1、能说下 http 和rpc 的区别?](#1、能说下 http 和rpc 的区别?)
        • 2、说说有哪些负载均衡算法?
        • [3、如何知道线上的 QPS?](#3、如何知道线上的 QPS?)
        • [4、 Sentinel 限流熔断降级核心源码剖析](#4、 Sentinel 限流熔断降级核心源码剖析)
        • [5、分布式事务 (seata)](#5、分布式事务 (seata))
        • 6.序列化与反序列化
      • [二、Dubbo 底层原理与源码](#二、Dubbo 底层原理与源码)
        • [1、 为什么不注入实现类而是接口?通过按口怎么找到具体的提供者实现方法?](#1、 为什么不注入实现类而是接口?通过按口怎么找到具体的提供者实现方法?)
        • 2、注册中心为什么是一个单独的服务?
        • [3、rpc 和 grpc有什么区别?](#3、rpc 和 grpc有什么区别?)
        • [4、http 和 http2 有什么区别?](#4、http 和 http2 有什么区别?)
        • [5、 tcp 为什么可以多路复用?](#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 就可以在一个'通道'上传输多个独立的数据流,实现了多路复用。

相关推荐
javaDocker1 小时前
业务架构、数据架构、应用架构和技术架构
架构
JosieBook3 小时前
【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
架构
.生产的驴3 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
喵叔哟3 小时前
16. 【.NET 8 实战--孢子记账--从单体到微服务】--汇率获取定时器
微服务·oracle·.net
Smile丶凉轩4 小时前
微服务即时通讯系统的实现(服务端)----(1)
c++·git·微服务·github
丁总学Java4 小时前
ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)
arm开发·架构
运维&陈同学5 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
ZOMI酱6 小时前
【AI系统】GPU 架构与 CUDA 关系
人工智能·架构
猿java7 小时前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试