大家好,又见面了,我是你们的朋友全栈君。
如何提高系统可用性
一. 时刻考虑应对故障
1.设计
通过使用一些设计模式,例如捕获底层异常、重试逻辑和断路器,可以帮助你捕获错误并尽可能避免影响其他功能。这样,你就能够限制问题的影响范围,即使应用程序的某些部分出现问题,依然能够提供其他一些有用的功能。
2.依赖
断路器模式在处理依赖故障时非常有用,因为它们可以降低依赖故障对你的系统的影响。如果没有断路器,你可能会因为依赖故障而降低系统的性能(例如,需要一个很长的超时机制来检测故障)。而使用了断路器,你可以“放弃”并停止使用某个依赖,直到你确认它已经恢复了正常工作。
3.用户
有些时候,拒绝式服务可能来自于“友方”。
二.时刻考虑如何伸缩
当你构建系统时,不要只考虑当前的流量,要考虑未来的流量。
具体一点,这可能意味着:
设计出能够增加数据库数量和容量的架构。
考虑限制你的数据伸缩的原因。当数据库达到容量极限的时候会发生什么?你需要确认这些限制因素并在到达极限之前解决它们。
你应当能够很容易地添加额外的应用程序服务器。这通常需要仔细考虑在何处和如何来维护状态,以及流量是如何路由的。注意将静态流量导向离线提供方。这样你的系统只需要处理必要的动态流量。使用外部的内容分发网络(CDN)不仅可以降低网络需要处理的流量,也能够利用CDN 的伸缩效率将静态内容更快地分发给用户。
考虑是否可以静态生成一些动态资源。通常来说,看上去动态显示的内容实际上大多数是静态的,并且生成静态内容可以让你的应用程序提高可伸缩性。这种“应该静态的动态资源”有些时候隐藏在你想象不到的地方。
三.缓和风险
保持系统高可用需要消除系统中的风险。当系统发生故障时,通常我们已经在这之前将故障原因确定为了风险。因此,确定风险是提高可用性的一个重要方法。
所有的系统中都存在以下这些风险:
* 存在系统崩溃的风险
* 存在数据库崩溃的风险
* 存在返回结果不正确的风险
* 存在网络连接失败的风险
* 存在新部署的软件功能出现故障的风险
保持系统高可用需要消除风险。但是当系统变得越来越复杂时,消除所有风险也变得越来越不可能实现。保持一个大型系统高可用,更多的是来管理系统的风险,知道这些风险是什么,哪些风险是可接受的,以及你能够做什么来缓和风险。
我们称之为风险管理,它是构建高可用系统的核心内容。
风险管理中的一个部分是风险缓和。风险缓和指的是当问题发生时,我们知道如何去尽可能降低问题所带来的影响。缓和意味着即使当服务和资源不可用时,依然尽可能确保你的系统以最好的、最完整的状态工作。风险缓和需要考虑哪些事情可能会出错,并且立即制订相应的计划,以便当问题发生时能够提供相应的解决方案。
四.监控可用性
除非你看到问题发生,否则你不会知道应用程序中存在着问题。你应当确保对应用程序进行了适当的监控,以便可以从外部和内部两个视角来观察应用程序的运行状况。
监控的程度取决于应用程序的特点和要求,但是通常必须具备以下这些监控。
-
服务器监控
监控服务器的健康状况,并且确保它们始终在有效运行。 -
配置变化监控
监控系统配置的变化,以便确定它们对应用程序的影响。 -
应用程序性能监控
深入了解你的应用程序和服务,确保它们按照预期运行。 -
人为测试
从用户的角度来实时检测应用程序的运行情况,以便在用户真正发现问题之前发现它们。 -
报警
当问题发生时通知相关人员,以便使问题可以得到快速有效的解决,将对用户的影响降低到最小。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158107.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...