微服务&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 就可以在一个'通道'上传输多个独立的数据流,实现了多路复用。

相关推荐
_codemonster2 小时前
30分钟快速搭建 Spring Cloud Alibaba 微服务实战(一)
微服务·架构·毕业设计·课程设计
Cosolar2 小时前
从零写一个 Attention Is All You Need
人工智能·面试·架构
qcx234 小时前
【系统学AI】09 Multi-Agent架构(2026版):从学术理论到工业级实践
java·人工智能·架构·multi-agent·claude agent
wb043072014 小时前
厨房质检员——从阿明的“祖传配方“到标准化质检,看测试金字塔的落地
架构·log4j
Dongwoo Jeong4 小时前
微服务架构(MSA)是如何诞生的?
微服务·云原生·架构
半旧夜夏4 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
张忠琳6 小时前
【kubernetes v1.21】(kubelet 1)Kubelet 核心架构与启动流程
云原生·架构·kubernetes·kubelet
用户987409238876 小时前
超算中心 高性能计算 htc命令module use的作用
架构
AI科技星6 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
__log6 小时前
如何优雅地“借鉴”任何网站的设计系统
人工智能·架构·知识图谱