springcloud知识点笔记

Easter79
• 阅读 632

Eureka的自我保护机制:默认情况下EurekaClient定时向EurekaServer端发送心跳包,如果EurekaServer在一定时间内没有收到EurekaClient发送的心跳包,便会直接从服务注册列表中剔除该服务(默认90S),但是在短时间丢失大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务。

Ribbon本地负载均衡算法实现方式:总请求数%服务器数量得到实际下标服务器位置。

服务雪崩解决方法:服务降级、服务熔断、服务隔离

服务降级分为:超时降级、失败次数降级、故障降级、限流降级。

超时降级:也就是大部分人网上说的,再高并发情况下,防止用户一直等待,直接返回一个友好提示给客户端。

失败次数降级: 主要是一些不稳定的API,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况 。

故障降级: 如要调用的远程服务挂掉了(网络故障、DNS故障、HTTP服务返回错误的状态码和RPC服务抛出异常),则可以直接降级 。降级后的处理方案有:默认值(比如库存服务挂了,返回默认现货)、兜底数据(比如广告挂了,返回提前准备好的一些静态页面)、缓存(之前暂存的一些缓存数据)。

限流降级: 当触发了限流超额时,可以使用暂时屏蔽的方式来进行短暂的屏蔽。当我们去秒杀或者抢购一些限购商品时,此时可能会因为访问量太大而导致系统崩溃,此时开发者会使用限流来进行限制访问量,当达到限流阀值,后续请求会被降级;降级后的处理方案可以是:排队页面(将用户导流到排队页面等一会重试)、无货(直接告知用户没货了)、错误页(如活动太火爆了,稍后重试)。

吐槽:咦,最开始学习服务降级的时候,网上写的都是这模样还都是千篇一律,乱七八糟的,最后还是专门去纯洁微笑大佬博客去找,才找个能说服我的,现在在搜索网上的博客开始向纯洁介绍的靠拢了,不再是单独一种降级手段。网上说的降级一种是就是12306说的限流降级,另一种说的就是淘宝双11时候关闭评论功能达到降级。然后就蒙蔽了。。。

我觉得应该再加一个资源降级:就是关闭非核心功能,节省资源(服务器器、流量、数据库,嗯,,不过我觉得在微服务下这些都是隔离的,可以直接开新机器就可以了)来保证核心功能的稳定,我觉得也算一种降级方案。

设计一套接口:

接口权限(开放接口还是内部接口),考虑幂等性、安全性(https),使用网关拦截接口实现黑名单和白名单、接口使用http协议+json格式restfull方便跨平台。考虑高并发 对接口服务实现服务保护、服务降级、熔断、隔离之类、最后使用API统一管理平台 api swagger.

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Spring Cloud Eureka源代码解析(2) EurekaServer 重要缓存解析
我们从EurekaServer的缓存说起,因为缓存是EurekaServer的一切存储形式,并且我们通过对缓存的分析可以搞清楚一些对于EurekaServer的误解。服务实例向EurekaServer注册,注册信息是放在缓存中。从EurekaServer中获取服务实例列表的时候,也是从缓存获取;但是这个缓存结构比较复杂,并且还有很多定时刷新和定时失效的机
Easter79 Easter79
3年前
SpringCloud常用组件
springcloud中有五大核心组件Eureka、Ribbon、Feign、Hystrix、Zuul,简单记录如下。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。EurekaClient组件专门负责将服务的信息注册到EurekaServer中,而EurekaServer是一个注册中心,里面有一个注册表,保存了各服务所在
Stella981 Stella981
3年前
Spring Cloud Eureka 服务关闭但是未从注册中心删除 自我保护机制
自我保护背景首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念,即使N1个节点挂掉也不会影响其他节点的正常运行。默认情况下,如果EurekaServer在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,EurekaServer将会移除该实例。但是当网络分区故障发生时,微服务与EurekaSer
Stella981 Stella981
3年前
Spring Cloud 学习笔记
Eureka客户端的服务注册       Eureka客户端在运行时会向Eureka服务端发送周期性的心跳,Eureka服务端利用客户端周期性的心跳续约请求来保证注册表的实时性。其中客户端会向服务端提供一个如果多久没有向服务端发送心跳请求,就不再维护这个客户端的时间阈值。!eureka.instance.leaserenew
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Netty 如何实现心跳机制与断线重连?
作者:sprinkle\_lizwww.jianshu.com/p/1a28e48edd92心跳机制何为心跳所谓心跳,即在 TCP 长连接中,客户端和服务器之间定期发送的一种特殊的数据包,通知对方自己还在线,以确保 TCP 连接的有效性.注:心跳包还有另一个作用,经常被忽略,即:一个连接如果长时间不用,防
Stella981 Stella981
3年前
Netty 4.0 实现心跳检测和断线重连
一实现心跳检测原理:当服务端每隔一段时间就会向客户端发送心跳包,客户端收到心跳包后同样也会回一个心跳包给服务端一般情况下,客户端与服务端在指定时间内没有任何读写请求,就会认为连接是idle(空闲的)的。此时,客户端需要向服务端发送心跳消息,来维持服务端与客户端的链接。那么怎么判断客户端在指定时间里没有任何读写请求呢?netty中为我们提供一
融云IM干货丨IM服务消息推送,客户端更新后,如何验证消息是否被成功接收?
客户端更新后,验证消息是否被成功接收可以采取以下几种方法:确认机制(ACK):客户端在成功接收并处理消息后,向服务端发送确认信号(ACK)。如果服务端在一定时间内没有收到ACK,可以认为消息未被成功接收,服务端可以进行重试发送。心跳机制:客户端和服务端定期
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k