File tree Expand file tree Collapse file tree 6 files changed +67
-4
lines changed Expand file tree Collapse file tree 6 files changed +67
-4
lines changed Original file line number Diff line number Diff line change 1+ ## 服务降级
2+ 服务降级类似女生旅行:在用户访问量高峰期,整体资源面临不足的时候,将一些重要优先程度相对较低的服务先关掉,等到过了高峰期再恢复。比如京东商城在双十一期间,可能会对评论服务进行服务降级。
3+
4+ 回到微服务系统,服务A调用服务B,当我们对服务B进行降级后,服务A将直接调用预定义的降级逻辑(即方法调用代替跨服务请求),从而快速获取返回结果,而降级方法逻辑的返回结果与真实服务B的返回结果的区别 就好比 残次品与良品的区别,此时我们认为服务B所提供的服务质量降低了,即我所说的降级。
5+
6+ ``` java
7+ // 主逻辑
8+ @FeignClient (value = " mst-goods-service" , fallback = GoodClientFallback . class)
9+ public interface GoodsClient {
10+ @RequestMapping (method = RequestMethod . GET , path = " /api/goods/{goods_id}" )
11+ GoodsDTO getOne (@PathVariable (" goods_id" ) Long goodsId );
12+ }
13+
14+ // 降级逻辑
15+ @Component
16+ public class GoodClientFallback implements GoodsClient {
17+ @Override
18+ public GoodsDTO getOne (Long goodsId ) {
19+ return new GoodsDTO (1l , 12.3 , 2l , " name" );
20+ }
21+ }
22+ ```
23+
24+ ## 服务熔断
25+ 在分布式架构中,断路器模式的作用也是类似的,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不再调用目标服务,直接返回结果,快速释放资源,避免最终因为服务不可用蔓延导致系统雪崩灾难。
26+
27+ ### 断路器什么时候会打开
28+ 这里涉及到断路器的三个重要参数:
29+
30+ 1 . 快照时间窗:断路器确定是否需要统计一些请求和错误数据,而统计的时间范围就是快照时间窗,默认10秒
31+ 2 . 请求总数下限:在快照时间窗内,必须满足请求总数下限才会启用熔断。默认20,意味着在10秒内,如果调用不足20次,即便所有的请求都失败,断路器都不会打开
32+ 3 . 错误百分比下限:当请求总数在快照时间内超过了下限,比如发生了30次调用,如果在这 30次调用中,有16次发生了超时异常,也就是超过50%的错误百分比,在默认设定50%下限的情况下,断路器就会打开
33+
34+ ### 断路器打开之后发生什么
35+ 熔断打开之后,再有请求调用的时候,将不会调用主逻辑,而是直接调用降级逻辑,这个时候就会快速返回,而不是等待5秒后才返回fallback。通过断路器实现了自动发现错误并将降级逻辑切换为主逻辑,减少响应延迟的效果
36+
37+ ### 主逻辑如何恢复
38+ Hystrix会启动一个休眠时间窗,在这个时间窗内,降级逻辑是临时的成为主逻辑,当休眠时间窗到期,断路器就进入半开状态,释放一次请求到原来的主逻辑上。如果此次请求正常返回,那么断路器将会关闭,主逻辑恢复正常。否则,断路器继续保持打开状态,而休眠时间窗会重新计时
39+
40+ https://sjyuan.cc/service-fault-tolerant-protected-with-hytrix/
Original file line number Diff line number Diff line change 1+ ## 定义
2+ 在微服务应用中,运行的服务实例集会动态更改。实例能动态分配网络位置。所以为了使客户端向服务端发送请求它必须使用服务发现机制。
3+
4+ 客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表。
5+
6+ ## 原理
7+ ![ ] ( https://github.com/xbox1994/2018-Java-Interview/raw/master/images/consul.jpg )
8+
9+ 1 . 当User Service启动的时候,会向Consul发送一个POST请求,告诉Consul自己的IP和Port
10+ 2 . Consul 接收到User Service的注册后,每隔10s(默认)会向User Service发送一个健康检查的请求,检验User Service是否健康(Consul其实支持其他健康检查机制)
11+ 3 . 当Order Service发送 GET 方式请求/api/addresses到User Service时,会先从Consul中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到User Service的IP和Port后再发送GET方式请求/api/addresses
12+ 4 . 该临时表每隔10s会更新,只包含有通过了健康检查的Service
13+
14+ 上面注册、查询的逻辑不是Consul提供的,一般是你使用的微服务框架中已经封装好的服务注册发现功能,如果没有特殊的需求是不会修改这部分逻辑的
15+
16+ https://sjyuan.cc/service-registration-and-discovery/
Original file line number Diff line number Diff line change 1+ 我们的每个服务的配置文件都是在自身代码库中,当服务数量达到一定数量后,管理这些分散的配置文件会成为一个痛点。这节课我么就来解决配置文件管理的痛点
2+
3+ ![ ] ( https://github.com/xbox1994/2018-Java-Interview/raw/master/images/config.jpg )
4+
5+ Spring Cloud Config的目标是将各个微服务的配置文件集中存储一个文件仓库中(比如系统目录,Git仓库等等),然后通过Config Server从文件仓库中去读取配置文件,而各个微服务作为Config Client通过给Config Server发送请求指令来获取特定的Profile的配置文件,从而为自身的应用提供配置信息。同时还提供配置文件自动刷新功能。
6+
7+ https://sjyuan.cc/service-config-server/
Original file line number Diff line number Diff line change @@ -31,10 +31,10 @@ PS:除开知识点,一定要准备好以下套路:
3131* [ 一致性hash] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/分布式-一致性hash.md )
3232### 微服务
3333* [ 微服务介绍] ( http://www.wangtianyi.top/blog/2017/04/16/microservies-1-introduction-to-microservies/?utm_source=github&utm_medium=github )
34- * [ 服务发现] ( http ://sjyuan.cc/service-registration-and-discovery/ )
35- * [ 网关 ] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/微服务-网关.md )
36- * [ 服务容错保护] ( http ://sjyuan.cc/service-fault-tolerant-protected-with-hytrix/ )
37- * [ 服务配置中心] ( http ://sjyuan.cc/service-config-server/ )
34+ * [ 服务发现] ( https ://github.com/xbox1994/2018-Java-Interview/blob/master/MD/微服务-服务注册与发现.md )
35+ * [ API网关 ] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/微服务-网关.md )
36+ * [ 服务容错保护] ( https ://github.com/xbox1994/2018-Java-Interview/blob/master/MD/微服务-服务容错保护.md )
37+ * [ 服务配置中心] ( https ://github.com/xbox1994/2018-Java-Interview/blob/master/MD/微服务-服务配置中心.md )
3838### 算法(头条必问)
3939* [ 数组-快速排序-第k大个数] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/算法-数组-快速排序-第k大个数.md )
4040* [ 数组-对撞指针-最大蓄水] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/算法-数组-对撞指针-最大蓄水.md )
You can’t perform that action at this time.
0 commit comments