当前位置: 首页 > Linux

如何提高阿里云应用的可用性(二)

时间:2023-04-07 00:57:57 Linux

这是阿里云如何提高应用可用性系列文章的第二篇,第一篇传送门。在单体应用时代,最大的问题是如何解决数据库瓶颈。微服务下,一个大型应用被拆分成几十个甚至上百个微服务,数据访问的压力传递给服务间的网络,随之而来的是服务强度依赖、服务雪崩等问题,那么如何保证服务的可用性以及整个应用程序的健壮性?常见的做法包括:加班的程序员和闺蜜在楼下等她的时候通常会约定“等你30分钟”。这是一种加班协议。要是等了半个小时女朋友还没下来怎么办?一般有服务治理意识的程序员都会选择超时,及时止损(不知道这是不是程序员没有女朋友的原因之一)。在应用设计中,为了避免集群雪崩或者资源耗尽,所有的调用都应该设置Timeout,包括RPC/DB/cache,servertimeout是一个强制配置。在实际电商场景中,一般服务级别的超时时间通常设置在100ms到300ms之间。超时的设置需要注意的一个问题就是超时下发的问题。假设服务A调用服务B,A的超时设置是100ms,B是300ms,那么这个设置就有问题了,因为一旦B的调用时间超过100ms,A无论如何都会超时,B的继续调用就会成为一种资源浪费,在特别复杂的服务依赖中,超时设置必须考虑投递问题,重试。表白被拒怎么办?一般来说,你可以先说一句很痛苦的话,然后说“你要不要再考虑一下?”自动重新发起呼叫请求。可以看出,当服务器偶尔出现抖动或网络抖动时,这种方法可以更好地提高服务调用的成功率,但同时,如果服务器处于故障边缘。它可能成为压垮骆驼的最后一根稻草,因此在生产环境中必须谨慎使用。家庭使用的保险丝是典型的保险丝。一旦电流过大,它就会断开,以保护整个电路。在程序设计中,一旦服务端的调用异常或错误率超过一定的阈值,就会停止对该服务的调用。此时,它处于关闭状态。经过一段时间的fuseperiod后,会再次尝试发起调用。此时处于close-open状态,如果调用成功,则松开调用切换到open状态,否则继续返回close状态隔离远洋船内部。内部会设计多个水密隔间,这样一旦船体在事故中受损,冲击也可以控制在水密隔间的层面,而不是让整艘船保持静默,这是一种隔离策略。在程序设计中,为了实现资源隔离和故障隔离,通常有两种方法。一种是通过线程池进行隔离,针对不同类型的资源创建不同的资源。线程池,然后设置线程池的大小和超时时间,达到隔离资源使用的效果,但是这种方式需要新建线程池,资源开销比较大。另一种方法是观察线程的信号量。是同一类型资源的线程数,当超过相应的阈值时,新的资源请求会被快速拒绝。限流和流量控制这两种方式本质上都是对超过服务能力的请求进行限制。不同的是,如果限流,会立即拒绝,而流量控制是对请求进行排队。顾有比较好的效果。以上能力一般都集成在微服务框架中,比如阿里的Dubbo,SpringCloud的Hystrix。通过在需要增强的地方引入jar包并添加相应的高可用代码,需要在应用系统设计之初就充分考虑到,需要在业务增加或维护时及时维护后期改了。接下来的问题是如何测试和验证这些高可用措施是否有效?阈值设置是否合理?常用的方法有两种:压力测试在云端模拟大量用户请求,测试应用系统面对突发流量的能力,进行容量规划。这里介绍一款阿里云PTS产品,可以在云端模拟百万级并发请求,从而检测每条链路是否有限流降级措施,是否设置了合理的Portalgate。FaultDrillFaultDrill是一种比较新的高可用性测试方法。它在软件层面模拟各种可能出现的故障,观察应用系统隔离和降级故障的能力。这个专业领域称为混沌工程。在阿里内部,通过故障演练平台,每天都在进行各种类型的故障演练。这些故障包括操作系统层面的故障,如进程异常退出、CPU内存过高等,还包括网络层面的故障,如网络延迟、丢包、DNS解析错误,以及应用服务层面的故障,如service接口延迟和异常返回。这样可以更有效地验证应用的高可用能力,发现潜在的风险问题。当然,对于因为各种原因没有集成高可用框架,没有自己搭建故障演练平台的同学,阿里云推出了应用高可用服务,业界首款可以快速提升应用的SaaS产品高可用性能力。稳定性保障的体验具有无需修改代码、全界面运行、性能稳定等特点。下面的例子展示了如何给云端的应用添加限流和降级能力(传送门:如何接入应用的高可用服务)是关键接口的限流和非关键业务的降级。云服务器99元团购!报名还可赢取现金红包!300万等你来分享!马上开团一键赢红包:http://click.aliyun.com/m/100...本文作者:中间件哥阅读原文本文为云栖社区原创内容,并且未经许可不得转载。