Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
GuangZhan committed Jan 29, 2024
1 parent d2697cc commit 1610b23
Showing 1 changed file with 46 additions and 2 deletions.
48 changes: 46 additions & 2 deletions 架构/架构.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,54 @@
- IP 地址散列

### 服务发现是怎么实现的
### 熔断是怎么实现的 (熔断原理? 令牌桶? 熔断的三个状态关系?)

**为什么要有服务发现**

服务太多,服务自身有动态性,随着服务发布、扩容时,服务对外的域名、IP 会发生变化,服务的访问者需要一种方式避免去感知和处理这个事情。

另外微服务中通常一个服务会有多个副本,需要均衡负载来实现最佳的性能。

**基于注册中心实现**

服务提供者启动时将自己服务的信息注册到服务中心,服务消费者从服务中心获取服务配置调用服务。

注册中心通常是一个高可用的服务,有 Nacos、ETCD、ZooKeeper、Eureka、Consul 等。

### 熔断是怎么实现的 (熔断原理? 熔断的三个状态关系?)

**熔断原理**

当下游服务不可用或部分不可用时,降低对其的请求次数,直接返回给上游错误信息,避免占用服务过多资源,降低对下游服务的压力,避免服务雪崩。

**熔断三个状态**

正常状态

下游出现错误,降低请求次数

错误比例降低,增加请求次数

### 熔断会影响性能吗? 有遇到过线上发生熔断吗? 不加会怎么样?

会,部分请求会直接跳过请求下游服务,直接返回错误。

**不加熔断可能产生的问题**

服务故障会蔓延:下游服务已经部分不可用时,客户端可能会不断的重试,导致下游压力增加,进而导致更高的不可用,最终导致当前服务也挂掉,使得原本正常的功能也无法提供。

### id生成器是怎么实现的, 如何实现全局递增
### 分布式一致性如何博阿正, 存在延迟不一致如何处理, 数据延迟如何处理

**中心服务生成**

中心服务生成可以保证 id 不重复,缺点是性能低,服务挂掉时拿不到 id。

**本地生成**

本地生成需要加锁,或保证生成器生成的 id 是唯一的。

全局递增可以考虑用 redis increase 原子增来实现。

### 分布式一致性如何保证, 存在延迟不一致如何处理, 数据延迟如何处理
### 在面对未知的流量暴增, 可以预先怎么处理
### 如何限流,限流算法,对于ddos攻击怎么处理
### RPC相对于传统的API调用的优点? 如何实现幂等性?
Expand Down

0 comments on commit 1610b23

Please sign in to comment.