鲁棒性
鲁棒是 Robust 的音译,也就是健壮和强壮的意思。它也是在异常和危险情况下系统生存的能力。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。
稳定系统
当一个实际的系统处于一个平衡的状态时(就相当于小球在木块上放置的状态一样)如果受到外来作用的影响时(相当于上例中对小球施加的力),系统经过一个过渡过程仍然能够回到原来的平衡状态,我们称这个系统就是稳定的,否则称系统不稳定。一个控制系统要想能够实现所要求的控制功能就必须是稳定系统。
根据以往业务的流量,估算出未来(通常是即将来临的大促,节假日)的流量。以整体流量为基础,估算出每个子系统需要满足的容量大小。然后根据子系统的容量来计算出需要的资源数量,对系统进行适当的扩容。计算方式可以简单的表示为如下公式:
机器数量 = 预估容量 / 单机能力 + Buffer(一定数量的冗余)
压测是为了把系统的瓶颈压出来,而不是把系统压出问题来。 知道了系统的瓶颈之后,就可以针对业务场景进行容量规划, 即压测的目的是为了能检验服务能力是否支持可水平扩展,即加机器就可以抵抗洪峰。
目的是为了建立业务的可用性。
对服务进行全方面的监控,实时掌控系统的状态,对系统中出现的问题及时预警,做到早发现,早治理。
对系统可能面临的问题要进行全面的预演,结合断网,断电等等灾难模拟的手段来检验系统在灾难面前的表现。
就是对故障发生及处理过程重新过一遍。对这个过程的进行和思考进行回顾,反思和探究,实现稳定性及能力的提升。具体步骤:(回顾),Analyze(分析),Summary(总结),Action(行动)
一旦系统发生灾难性故障,需要将流量切换到容灾机房,避免对大量用户造成损失。
规范的工作流程,可以避免大部分的认为失误。最好的就是将运维日常工作平台化,以平台为流程导向。
第一点是防止系统高负荷运行,第二点是有效利用服务器资源。 常见限流的算法包括漏桶算法和令牌桶算法。
第一个是保障服务器基本可用,第二个是保障服务的核心服务可用。 以社区案例为例,即便是 My SQL 挂掉,也要能够保证社区为用户提供基本的可读服务。 一般降级的每个策略都是针对一个场景,预想特定场景下需要要解决什么问题;然后再梳理在这个场景下需要保留哪些核心基本服务;最后才选定技术方案,系统化的进行实现
隔离目的非常简单,要限制住不稳定因素导致的风险,停止传播。 如秒杀场景一个高并发的场景,可能带来的问题也比较多,在高并发场景下秒杀的时候,需要和一些正常的业务区分开来。 慢 SQL 隔离,一个资源隔离。一条慢 SQL 会导致整个服务不稳定。每请求一次线程,慢 SQL 会一直耗着当前线程,所以资源占用非常大。
合理的设置业务的超时时间,可有效避免因第三方原因导致的接口等待时间过久。 设置超时时间的大体思路:第一步,识别业务需要的服务响应时间。比如,需要 100 毫秒去响应数据,之后统计业务里面可能需要调多少服务。第二步,统计服务日常的响应时间。第三步,分清主次,即分出哪些是核心服务。因为核心服务一旦失败,整个链路便不可用,所以可以对核心服务的时间设置的宽松一些。 设置完超时之后需要验证。
集群的目的是为了解决单点的问题。集群的形式主要有主备,即同时只有一台机器提供整个服务,可以有一台或者多台提供备份,备份不仅要包含代码层面,整个服务运行所依赖的资源都要有备份。另外一个形式是主从。主是提供一个完整的服务,从是提供部分的服务。还有一种是多主,多主指的是每一台机器的决策是对等的,都会对外提供一些服务。