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

相关推荐
anyup1 小时前
uni-app 没有根组件?仅需几行代码实现全局 Toast 和 Modal
前端·架构·uni-app
会博通·代码搬运工1 小时前
会博通API对接实战:工程企业文档分布式采集系统的技术实现与Python SDK详解
开发语言·分布式·python·线性代数·矩阵·架构·电子档案合规
浑手营销2 小时前
百度竞价优化服务商推荐
百度·dubbo
2601_954706492 小时前
云端算力重构移动生态:云手机技术架构解析与 Python 自动化实战
智能手机·重构·架构
人间凡尔赛3 小时前
2026 云原生后端架构演进:事件驱动、虚拟线程与 AI Agent 内嵌,三驾马车如何重塑技术栈
后端·云原生·架构
豆瓣鸡3 小时前
Sa-Token 核心原理与实战:从登录会话到微服务权限鉴权
网关·微服务·架构·认证鉴权
Wang's Blog12 小时前
Go-Zero 项目开发47:自研微服务框架的必要性与核心结构设计
开发语言·微服务·golang
小罗水17 小时前
附录A 各微服务完整 application.yml 配置汇总
数据库·elasticsearch·微服务
前端开发江鸟17 小时前
Agent 卡在人工确认时,重启后怎么继续?我用检查点和 LangGraph 看懂状态恢复
架构
heimeiyingwang17 小时前
【架构实战】Kubernetes调度器深度剖析:从Pod调度到自定义调度器
java·架构·kubernetes