美文网首页
面向失败进行设计(一)

面向失败进行设计(一)

作者: 皮皮鸡很皮 | 来源:发表于2021-02-23 23:09 被阅读0次

故障必然发生

2019年3月3号阿里云宕机持续3个多小时,华北地区很多公司的网站,APP, 内部系统纷纷瘫痪。消息立马上了社交的头条,大家都调侃“一年一挂,今年比往年早一些”。
阿里这样的大公司,技术实力是毋庸置疑的,也不可避免的出现大大小小的各种故障。我想在互联网行业的打工人都感同身受吧,生产环境的故障就没断过,总会在某些特殊的时刻出现,给你一个大大的“惊喜”。无论是传统的软件时代,还是现在的互联网,云时代,随着时间的推移,软件硬件的持续运行, 终究会在某个时间点被终结,走向失败。
那么,我们要做什么呢?面对不同的级别的故障或者问题,我们要用合理的成本,有效的方法保障业务的连续性,持续性。这个过程中,面向失败的设计特别的重要,业务的持续性,取决于我们对异常场景的投入了多少精力。

失败场景

这里例举我遇到的一些常见的失败场景

硬件问题

硬件有固有的生命周期,它随着时间推移一定会老化,而且会在某个不确定的时间点损坏。还有可能受到外力的因素导致损坏,譬如火灾,地震等等。
我自己每天巡检系统,有时候就会遇到某一个节点的异常(尽量排除了系统异常软件异常的情况下),采取换机器的方式来解决。

代码bug

这个就更常见了, 即使是非常优秀的程序员写出来的代码,经过严格的测试,上线后依然可能存在bug。我不优秀,所以我每天背着沉重的电脑来回跑,深怕突如其来的bug,哈哈。

配置变更错误

现在都流行分布式的统一配置中心进行灵活的配置系统的一些变量,方便是挺方便的。但人为的配置难免会出现疏忽大意,考虑不周(这个也是血淋淋的教训,线上出现过几次因为统一配置错误出现故障)。另外由于所有的项目都依赖于统一配置系统,如果统一配置系统出现故障,也会导致大量的系统异常。

洪峰流量

对于突发流量导致系统异常也是屡见不鲜,譬如某巨星发布了离婚的消息,如果不提前告诉新浪微博,那么微博随时可能会宕机啦。

依赖服务问题

依赖的服务肯定不会100%可用,它们随时会超时,会失败。当依赖的服务超时了,你没有很好的处理,那么可能会导致你自己的系统不可用。在分布式的情况下,可能会将异常辐射出去,最终导致大量的系统不可用。

依赖库问题

我们系统依赖的各种库,用到的各种组件,封装好的工具,使用的时候很爽,功能完成的很快。但它们对我们来说是黑盒,你不了解它们,会存在哪些风险,存在哪些漏洞 (譬如fastjson暴露出来的漏洞好几个),即使是公司内部的组件也一样可能存在bug,一句话,就是不能完全信任它们,尤其是非常重要的业务功能,更要当心。

系统的恶化

春节前,我还跟同事开玩笑,要在封网前把各个系统都重启一下,防止出纰漏。为啥呢?随着时间推移原本工作的很好的程序可能不能再正常工作。譬如:缓存的数据逐渐增大空间不足了,代码哪里写的有问题内存泄露了等等。

后续再介绍避免单点故障,异地多活架构,依赖调用的自我保护,精细化监控体系,故障与攻防演练等等。

相关文章

  • 面向失败进行设计(一)

    故障必然发生 2019年3月3号阿里云宕机持续3个多小时,华北地区很多公司的网站,APP, 内部系统纷纷瘫痪。消息...

  • 面向对象语言基础

    面向对象语言的特性 面向对象的语言的特性:封装、继承、多态。 面向对象语言的设计原则 面向对象的语言在进行程序设计...

  • 面向对象设计

    极客时间《设计模式之美》学习 如何进行面向对象设计? 在面向对象设计阶段,我们将需求描述转化为具体的类。可以包含以...

  • java学习——面向对象程序设计

    一、面向对象的概念(以设计首饰盒为例) 面向对象:师傅针对用户提出的要求进行分析,并将分析的结果设计成一张完整的图...

  • 面向对象的设计

    1. 面向对象设计的概念 面向对象的设计,要对软件的需求进行抽象和封装,进而实现一个软件的构造。 抽象一般是过程抽...

  • 封装 继承 多态(补) 20

    java面向高级(封装,继承,多态,接口):目标:a.理解相关概念 b.进行面向对象的设计 c.更好读懂代码 一...

  • 面向对象设计原则

    第二章 面向对象的设计原则 在面向对象中,类是基本单位,各种设计都是围绕着类来进行的。类与类之间的关系,构成了设计...

  • Android AOP面向切片

    一. AOP 面向切面架构设计 - 动态代理切面需求 需求:在数据操作前进行备份操作,进行横向切片 DBOpera...

  • 架构设计误区

    几种常见的架构设计误区 (1)设计最优秀的方案。不要面向“kpi”进行架构设计,而是要根据“合适”、“简单”、“演...

  • 面向对象设计原则

    面向对象设计原则 面向对象设计原则是设计模式的基础,每个设计模式都符合一一种或多种面向对象的设计原则。 常用的面向...

网友评论

      本文标题:面向失败进行设计(一)

      本文链接:https://www.haomeiwen.com/subject/ovbdfltx.html