【弹力设计篇】弹力设计总结

前面主要聊了多个弹力设计,遮盖力主要做一个汇总

弹力设计总图

集群:服务不能是单点的,所以我们的架构需要冗余设计,设计成集群服务,也就是多个副本机制。需要具体的技术

  • 负载均衡+服务健康检查,使用像Nginx或者HAProxy 等SLB技术。 如果是对外系统的话,那么需要使用SLB进行负载均衡。
  • 服务发现+动态路由+服务健康检查,Consul 或Zookeeper。这种方式主要是内部服务的调用,比如订单调用支付,支付有三个服务,应该调用那个服务,那么就需要使用注册中心+RPC的方式进行内部服务调用。
  • 自动化运维,因为传统的人工运维是很浪费时间的。所以需要K8s服务调度、伸缩和故障迁移。

服务隔离
为保证服务之间不会出现多米诺骨牌效应,那么应该对服务进行解耦和拆分。

  • bulkheads模式:业务分片、用户分片、数据库拆分。
  • 自包含系统:所以自包含的系统是从单体到微服务的中间状态,把密切相关的微服务拆分出来,做到没有外部依赖。
  • 异步通讯 :服务发现、事件驱动、消息队列、业务工作流。
  • 自动化运维 服务调用链和性能监控的监控系统。

容错失败设计
一个分布式系统是不能避免出现失败异常的场景,所以我们需要design for 失败。也就是容错设计。

  • 错误方面 :重试、熔断、幂等设计
  • 一致性方面 :强一致性使用两阶段提交,最终一致性使用异步通讯方式。
  • 流控方面 :限流+降级技术
  • 自动化运维方面 :网关流量调度,服务监控。

【弹力设计篇】弹力设计总结_第1张图片

所以主要就是三块东西,服务冗余、服务解耦、服务容错
对于服务容错来说,有重试势必就要有幂等设计。而限流、降级、排队、熔断是保证系统的稳定性,在可用性和一致性之间作出的妥协。
除了上述这三点,还要考虑自动化运维,要不然人肉运维的话,故障出现的时候不能及时解决。

弹力开发与运维

【弹力设计篇】弹力设计总结_第2张图片【弹力设计篇】弹力设计总结_第3张图片

Kubernetes 不是针对语言的,而是针对容器的,所以,它是以通用的方式为所有语言解决分布式计算问题。

Spring Cloud 有一套丰富且集成良好的 Java 库,作为应用栈的一部分解决所有运行时问题

二者可以互补。

小结

这里贴以下弹力设计的文章,感兴趣的可以看以下。
聊聊故障和高可用架构设计
幂等设计
重试设计
降级设计
熔断设计
限流设计
异步通讯设计
隔离设计
容灾 异地多活设计

你可能感兴趣的:(#,高可用架构,分布式)