From 8bd71be8def6d427e0852dd14be046720491a59c Mon Sep 17 00:00:00 2001 From: rayc Date: Tue, 2 Apr 2024 17:22:56 +0800 Subject: [PATCH] 20240402 --- .obsidian/workspace.json | 30 ++++++-- 后端/极客时间Java实战/Dubbo.md | 2 + .../Dubbo提供的各种服务引用机制.md | 15 ++++ .../Dubbo服务端与客户端通信原理.md | 11 +++ 后端/极客时间Java实战/Zookeeper.md | 72 +++++++++++++++++++ 后端/极客时间Java实战/分布式服务容错.md | 59 +++++++++++++++ 未分类日志.md | 14 ++++ 7 files changed, 197 insertions(+), 6 deletions(-) create mode 100644 后端/极客时间Java实战/Dubbo.md create mode 100644 后端/极客时间Java实战/Dubbo提供的各种服务引用机制.md create mode 100644 后端/极客时间Java实战/Dubbo服务端与客户端通信原理.md create mode 100644 后端/极客时间Java实战/Zookeeper.md create mode 100644 后端/极客时间Java实战/分布式服务容错.md create mode 100644 未分类日志.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 6575036..3fd7bf0 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -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", diff --git a/后端/极客时间Java实战/Dubbo.md b/后端/极客时间Java实战/Dubbo.md new file mode 100644 index 0000000..cc842f1 --- /dev/null +++ b/后端/极客时间Java实战/Dubbo.md @@ -0,0 +1,2 @@ +高性能和透明化的RPC实现方案 +SOA 服务治理 方案 diff --git a/后端/极客时间Java实战/Dubbo提供的各种服务引用机制.md b/后端/极客时间Java实战/Dubbo提供的各种服务引用机制.md new file mode 100644 index 0000000..754362c --- /dev/null +++ b/后端/极客时间Java实战/Dubbo提供的各种服务引用机制.md @@ -0,0 +1,15 @@ +### Dubbo服务引用流程 + +### 本地接口 -> 远程调用 +1. 导入服务提供者接口API和服务信息 +2. 生成远程服务的本地动态代理对象 (这里的代理细节是什么) +5. 本地API调用转换成远程服务调用,返回调用结果 + +### Dubbo远程调用全流程 + +### 服务调用核心技术 +- 回声测试 +- 异步调用 -- 基于NIO +- 泛化调用(任意的制定方法,参数;不推荐) + +### diff --git a/后端/极客时间Java实战/Dubbo服务端与客户端通信原理.md b/后端/极客时间Java实战/Dubbo服务端与客户端通信原理.md new file mode 100644 index 0000000..b701f75 --- /dev/null +++ b/后端/极客时间Java实战/Dubbo服务端与客户端通信原理.md @@ -0,0 +1,11 @@ +## Dubbo网络通信组件整体架构 + +### Remoting +- Exchange 信息交换层,用于封装请求-响应模式 +- Transport 网络传输层,抽象Netty等框架作为统一的接口 +- Serialize 序列化层,主要完成数据的序列化和反序列化 + +## Dubbo服务端通信机制解析 +服务端通信的目的就是集成并绑定 `Netty` 服务从而启动服务监听,典型的多层架构 + +## Dubbo客户端通信机制解析 \ No newline at end of file diff --git a/后端/极客时间Java实战/Zookeeper.md b/后端/极客时间Java实战/Zookeeper.md new file mode 100644 index 0000000..d789c63 --- /dev/null +++ b/后端/极客时间Java实战/Zookeeper.md @@ -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作为注册中心的底层实现原理 diff --git a/后端/极客时间Java实战/分布式服务容错.md b/后端/极客时间Java实战/分布式服务容错.md new file mode 100644 index 0000000..16ca860 --- /dev/null +++ b/后端/极客时间Java实战/分布式服务容错.md @@ -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类在服务提供者端配置 + diff --git a/未分类日志.md b/未分类日志.md new file mode 100644 index 0000000..1eae67c --- /dev/null +++ b/未分类日志.md @@ -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,这种方法只能临时使用,后面需要进行修改**