扫码关注公众号
采用微服务架构后,当分布式系统到达一定量级时,每个环境都可能出错,因此在系统设计时应该考虑如何减轻故障的影响?
采用微服务架构后,当分布式系统到达一定量级时,每个环境都可能出错,因此在系统设计时应该考虑如何减轻故障的影响,如何从故障中快速恢复。一般从以下两点来考察系统的稳定性:高可用:当前服务依赖的下游服务性能降低或者失败时,该服务怎么相应,是快速失败还是重试?大促时如何应对瞬间涌入的流量?高并发:底层服务如何保证服务的吞吐量?如何提高消费者的处理速度?高可用:1.限流:限流算法:计数器法、漏桶算法、令牌桶算法2.断路器Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性、容错性与局部应用的弹性,是一个实现了超时机制和断路器模式的工具类库。Hystrix主要提供4个功能:断路器、隔离机制、请求聚合和请求缓存。3.超时与重试在微服务系统中,如果上游应用没有设置合理的超时和重试机制,则会造成请求响应变慢,慢请求会积压并耗尽系统资源。超时机制应该和限流、断路器配合使用,最终实现微服务系统的稳定性。高并发:几种常见的高并发策略如下:1.异步:提高业务过程中可异步部分的占比,提高异步部分的执行效率2.缓存:将频繁访问的数据存储在离业务处理逻辑更近的地方3.池化:对于创建起来比较消耗资源的对象进行缓存
如何保障微服务的稳定性?
当一个单体应用改造成多个微服务之后,在请求调用过程中往往会出现更多的问题,通信过程中的每一个环节都可能出现问题。而在出现问题之后,如果不加处理,还会出现链式反应导致服务雪崩。服务治理功能就是用来处理此类问题的。从微服务的三个角色:注册中心、服务消费者、服务提供者进行考虑:1、注册中心如何保障稳定性注册中心主要是负责节点状态的维护,以及相应的变更探测与通知操作。一方面,注册中心自身的稳定性是十分重要的。另一方面,我们也不能完全依赖注册中心,需要时常进行类似注册中心完全宕机后微服务如何正常运行的故障演练。2、服务消费者如何保障稳定性一个请求失败了,最直接影响到的是服务消费者,那么在服务消费者这边,有什么可以做的呢?(1)超时:如果调用一个接口,但迟迟没有返回响应的时候,我们往往需要设置一个超时时间,以防自己被远程调用拖死。超时时间的设置也是有讲究的,设置的太长起的作用就小,自己被拖垮的风险就大,设置的太短又有可能误判一些正常请求,大幅提升错误率。(2)容错机制:请求调用永远不能保证成功,那么当请求失败时候,服务消费者可以如何进行容错呢?通常容错机制分为以下这些:FailTry(失败重试)、FailOver(失败切换)、FailFast(快速失败)。另外,还有很多形形色色的容错机制,大多是基于自己的业务特性定制的,主要是在重试上做文章,例如每次重试等待时间都呈指数增长等。3、服务提供者如何保障稳定性限流:限流就是限制服务请求流量,服务提供者可以根据自身情况(容量)给请求设置一个阈值,当超过这个阈值后就丢弃请求,这样就保证了自身服务的正常运行。限流更多的起到一种保障的作用,但如果服务提供者已经出现问题了,这时候该怎么办呢?这时候就会出现两种状况。一是本身代码有bug,这时候一方面需要服务消费者做好熔断降级等操作,一方面服务提供者这边结合DevOps需要有快速回滚到上一个正确版本的能力。更多的时候,我们可能仅仅碰到了与代码无强关联的单机故障,一个简单粗暴的办法就是自动重启。例如观察到某个接口的平均耗时超出了正常范围一定程度,就将该实例进行自动重启。当然自动重启需要有很多注意事项,例如重启时间是否放在晚上,以及自动重启引起的与上述节点摘除一样的问题,都需要考虑和处理。
Spring Cloud 中 Hystrix 是什么()
正确答案是CHystrix是SpringCloud中的断路器模式实现,用于处理微服务之间的故障和延迟。
在 Spring Cloud 中,用于实现服务网关的组件是()
正确答案是BZuul是SpringCloud中用于实现服务网关的组件,它可以作为服务消费者的入口,提供路由、负载均衡和过滤等功能。