diff --git "a/\346\236\266\346\236\204/\346\236\266\346\236\204.md" "b/\346\236\266\346\236\204/\346\236\266\346\236\204.md" index a872fba..aabb6f7 100644 --- "a/\346\236\266\346\236\204/\346\236\266\346\236\204.md" +++ "b/\346\236\266\346\236\204/\346\236\266\346\236\204.md" @@ -31,10 +31,54 @@ - IP 地址散列 ### 服务发现是怎么实现的 -### 熔断是怎么实现的 (熔断原理? 令牌桶? 熔断的三个状态关系?) + +**为什么要有服务发现** + +服务太多,服务自身有动态性,随着服务发布、扩容时,服务对外的域名、IP 会发生变化,服务的访问者需要一种方式避免去感知和处理这个事情。 + +另外微服务中通常一个服务会有多个副本,需要均衡负载来实现最佳的性能。 + +**基于注册中心实现** + +服务提供者启动时将自己服务的信息注册到服务中心,服务消费者从服务中心获取服务配置调用服务。 + +注册中心通常是一个高可用的服务,有 Nacos、ETCD、ZooKeeper、Eureka、Consul 等。 + +### 熔断是怎么实现的 (熔断原理? 熔断的三个状态关系?) + +**熔断原理** + +当下游服务不可用或部分不可用时,降低对其的请求次数,直接返回给上游错误信息,避免占用服务过多资源,降低对下游服务的压力,避免服务雪崩。 + +**熔断三个状态** + +正常状态 + +下游出现错误,降低请求次数 + +错误比例降低,增加请求次数 + ### 熔断会影响性能吗? 有遇到过线上发生熔断吗? 不加会怎么样? + +会,部分请求会直接跳过请求下游服务,直接返回错误。 + +**不加熔断可能产生的问题** + +服务故障会蔓延:下游服务已经部分不可用时,客户端可能会不断的重试,导致下游压力增加,进而导致更高的不可用,最终导致当前服务也挂掉,使得原本正常的功能也无法提供。 + ### id生成器是怎么实现的, 如何实现全局递增 -### 分布式一致性如何博阿正, 存在延迟不一致如何处理, 数据延迟如何处理 + +**中心服务生成** + +中心服务生成可以保证 id 不重复,缺点是性能低,服务挂掉时拿不到 id。 + +**本地生成** + +本地生成需要加锁,或保证生成器生成的 id 是唯一的。 + +全局递增可以考虑用 redis increase 原子增来实现。 + +### 分布式一致性如何保证, 存在延迟不一致如何处理, 数据延迟如何处理 ### 在面对未知的流量暴增, 可以预先怎么处理 ### 如何限流,限流算法,对于ddos攻击怎么处理 ### RPC相对于传统的API调用的优点? 如何实现幂等性?