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

相关推荐
小小工匠23 分钟前
架构思维: 高并发场景下的系统限流实战
架构·限流算法·限流实战
阿里云云原生3 小时前
HiMarket 正式开源,为企业落地开箱即用的 AI 开放平台
微服务
流影ng3 小时前
【HarmonyOS】MVVM与三层架构
华为·架构·harmonyos
虫小宝4 小时前
返利app的消息队列架构:基于RabbitMQ的异步通信与解耦实践
分布式·架构·rabbitmq
梦中的天之酒壶5 小时前
多级缓存架构
缓存·架构
眠りたいです6 小时前
基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作
c++·qt·ui·微服务·云原生·架构·媒体
虫小宝8 小时前
返利软件的分布式缓存架构:Redis集群在高并发场景下的优化策略
分布式·缓存·架构
一水鉴天8 小时前
整体设计 之 绪 思维导图引擎 之 引 认知系统 之 引 认知系统 之 序 认知元架构 之6 拼句 之1 (豆包助手 之8)
架构·认知科学
纪元A梦9 小时前
Redis最佳实践——安全与稳定性保障之高可用架构详解
redis·安全·架构
Dontla9 小时前
流行的前端架构与后端架构介绍(Architecture)
前端·架构