main
rayc 2024-04-02 17:22:56 +08:00
parent 366ac55e94
commit 8bd71be8de
7 changed files with 197 additions and 6 deletions

View File

@ -25,14 +25,26 @@
"state": {
"type": "markdown",
"state": {
"file": "后端/极客时间Java实战/RPC.md",
"file": "日志检索.md",
"mode": "source",
"source": false
}
}
},
{
"id": "fcca90a4313bff23",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "后端/极客时间Java实战/分布式服务容错.md",
"mode": "source",
"source": false
}
}
}
],
"currentTab": 1
"currentTab": 2
}
],
"direction": "vertical"
@ -98,7 +110,7 @@
"state": {
"type": "backlink",
"state": {
"file": "后端/极客时间Java实战/RPC.md",
"file": "后端/极客时间Java实战/分布式服务容错.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
@ -115,7 +127,7 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "后端/极客时间Java实战/RPC.md",
"file": "后端/极客时间Java实战/分布式服务容错.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
@ -138,7 +150,7 @@
"state": {
"type": "outline",
"state": {
"file": "后端/极客时间Java实战/RPC.md"
"file": "后端/极客时间Java实战/分布式服务容错.md"
}
}
}
@ -159,9 +171,15 @@
"command-palette:打开命令面板": false
}
},
"active": "7abb266d201c3bb5",
"active": "fcca90a4313bff23",
"lastOpenFiles": [
"后端/极客时间Java实战/Dubbo服务端与客户端通信原理.md",
"后端/极客时间Java实战/分布式服务容错.md",
"后端/极客时间Java实战/Dubbo提供的各种服务引用机制.md",
"后端/极客时间Java实战/Zookeeper.md",
"未分类日志.md",
"日志检索.md",
"后端/极客时间Java实战/Dubbo.md",
"后端/极客时间Java实战/RPC.md",
"后端/极客时间Java实战",
"VSCode 连接 云服务器.md",

View File

@ -0,0 +1,2 @@
高性能和透明化的RPC实现方案
SOA 服务治理 方案

View File

@ -0,0 +1,15 @@
### Dubbo服务引用流程
### 本地接口 -> 远程调用
1. 导入服务提供者接口API和服务信息
2. 生成远程服务的本地动态代理对象 (这里的代理细节是什么)
5. 本地API调用转换成远程服务调用返回调用结果
### Dubbo远程调用全流程
### 服务调用核心技术
- 回声测试
- 异步调用 -- 基于NIO
- 泛化调用(任意的制定方法,参数;不推荐)
###

View File

@ -0,0 +1,11 @@
## Dubbo网络通信组件整体架构
### Remoting
- Exchange 信息交换层,用于封装请求-响应模式
- Transport 网络传输层抽象Netty等框架作为统一的接口
- Serialize 序列化层,主要完成数据的序列化和反序列化
## Dubbo服务端通信机制解析
服务端通信的目的就是集成并绑定 `Netty` 服务从而启动服务监听,典型的多层架构
## Dubbo客户端通信机制解析

View File

@ -0,0 +1,72 @@
## Dubbo 服务注册中心
### 注册中心基本模型
- 注册中心
- 服务提供者
- 通过注册中心客户端,向注册中心注册服务
- 服务消费者
- 通过注册中心客户端,从注册中心订阅服务
- 接收来自注册中心的变更通知
- 调用订阅的服务
- 本地保留订阅服务缓存,缓存需要和注册中心中的保持一致
### 注册中心核心功能:
- 支持对等集群:本身支持无状态的高可用
- 提供CURD接口 不能理解这个点的curd访问的是什么内容
- 订阅发布机制
- 变更通知机制
### dubbo注册中心功能
- 直连: 不使用注册中心
- 只发布(注册)
- 只订阅
- 支持不同的注册中心,(用得少)
### Dubbo支持的注册中心
- Nacos
- Zookeeper
- Multicast
- Redis
- Consul
- Etcd3
### Dubbo 中的注册中心的定义
通过回调函数实现异步通知
#### 注册中心构造类
- RegistryService
- AbstractRegistryFactory
- MulticastRegistryFactory
- NacosRegistryFactory
- ZookeeperRegistryFactory
#### Zookeeper注册中心结构
- Zookeeper
- Root -- dubbo
- Service -- 具体的服务定义
- Type -- 服务的类型 (消费者/提供者)
- URL -- 提供者(或消费者)的地址
- Provider -- 监听提供者的URL 层次
- Consumer -- 监听提供者的type层和消费者的URL层
- Monitor -- 监听Service层
## Zookeeper 功能特性
核心是一个精简的文件系统,提供基于目录节点(ZNode)树方式的数据存储,以及一些额外的抽象操作,如排序、通知和监控。本质上是一种分布式协调工具
### Zookeeper 访问特性
- 原子性访问
所有请求的处理结果在整个Zookeeper集群中所有机器是一致的
- 顺序访问
从同一个客户端发起的事务请求会按照其发起顺序严格应用到Zookeeper
### Zookeeper操作模型
- Zookeeper 会话
- 操作
- TCP连接
- 发送请求
- 接受Watch事件
- 节点类型
- 临时 -- 建立连接创建,连接断开之后自动消失(会话结束自动删除)
- 持久
- Watch (基于会话,分布式环境下的回调函数)
- ZNode一旦变化变更消息通过会话传回到客户端
- 客户端关注ZNode发生变化当ZNode 的变化发生的时候,回调函数被调用
### Zookeeper 核心API
## 掌握Zookeeper作为注册中心的底层实现原理

View File

@ -0,0 +1,59 @@
## 服务容错的基本概念
### 服务访问失败的原因
- 分布式固有特性 网络问题导致的间歇性的失败
- 服务自身失败 服务bug修改
- 服务依赖失败 (会导致服务链路失败,雪崩效应)
#### 服务雪崩效应
- 服务A
- 服务B
- 服务C
- 服务D
- 服务E
- 上面提到的服务逐层依赖当服务A不可用之后服务B会不断重试会导致自身资源耗尽最后服务B也不可用后面依赖服务B的那些服务也一样这样会导致大量服务不可用即雪崩效应。
- 解决办法,出现问题的服务,直接从集群中踢掉,避免雪崩的出现
#### 服务失败的解决思路
- 超时
- 如果服务未能在这个时间内响应,将回复一个失败消息
- 重试
- 为了降低网络瞬态异常所造成的网络通信问题,可以使用重试机制
#### 容错思想
- 集群容错
- 集群的建立已经满足冗余条件,而围绕如何进行重试就产生了集中常见的集群容错策略
- 集群容错
- 服务降级
- 对服务进行分级管理,必要时,关闭对不重要服务的访问入口,节省资源用于处理重要服务的请求
- 本地伪装和存根
## Dubbo集群容错
### 负载均衡基本概念
- 负载均衡的路由问题
- 分布式服务,在访问一个集群时,具体访问哪一个,的决策 --> 路由
- 负载均衡机制:
- Random随机
- RoundRobin轮询
- LeastActive: 最少活跃调用数
- ConsistentHash: 一致性Hash
### 容错机制
- Failover -- 失败转移;一个服务实例不可用,立即访问另一个服务实例,作为重试,会设置重试次数
- Failfast -- 直接抛异常,结束
- Failsafe -- 记录错误日志,退出,等查看日志,解决问题
- Failback -- 定时重试
- Forking --
- Broascast
### Dubbo容错策略使用方法
- cluster 配置项: 代表集群容错机制,可任选一种
- retries配置项 重试次数,当调用发生失败时重新发起请求的次数
## 服务降级
- 本地伪装
- 当某个服务提供者全部失效后客户端不抛出异常而是通过Mock数据返回失败
- Mock类在服务消费者端配置
- 本地存根
- 服务的提供方也有在本地执行部分逻辑的场景 (例如原先校验参数,从而间接实现服务容错)
- Stub类在服务提供者端配置

14
未分类日志.md Normal file
View File

@ -0,0 +1,14 @@
## tar 解压失败
```
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
```
解决方法:[上链接](https://www.cnblogs.com/xqzt/p/5032865.html)
**注意:一定搞清楚文件的类型**
## 腾讯云访问github
腾讯云默认是访问不了github的应该是因为墙的原因
解决办法:[上链接](https://www.cnblogs.com/redwei/p/16309106.html)
**注意这里使用的方法是修改host这种方法只能临时使用后面需要进行修改**