做软件,就是找几个程序员的事情么?高可用系统究竟有多难

曾经有个亲戚朋友找到我,说让我帮他开发一款自动识别的停车场系统,系统除了识别车牌 ,计算价格之外,希望能有一个小程序或者APP,可以在上面卖东西之类的,问下需要多少钱。

我说如果要做一款工业级别能使用的,可用性接近4个9的,即便大部分组件都是用开源项目,算下来可能也要百来万吧,当然,如果每个停车场再配个人工的收费这些会便宜点。可用性可以做到低一点。

对方不是很理解,做软件,不是请几个程序员啪啪啪把代码写完么?加上现在开源的组件这么多,就跟组装玩具一样随便组装即可,为什么需要那么多钱。

软件的可用性

软件的可用性,就是将软件不可用的时间统计起来,然后除以一年的总时间。

我们看到,如果要做到3个9的可用性,也就是只有千分之一的时间不可用,一个月也只有44分钟是不可用,一个月44分钟是什么概念,相信程序员或者运维朋友都有这样的例子。一般一个线上问题,从出现到 警、出现投诉,可能已经过了大半个小时,加上问题的定位,修复代码,测试,上线,一般2到3小时处理一个小故障已经是常态。

加上有些故障可能是硬件引起的,例如之前出现的阿里云光纤被挖断,或者现有的机器硬件出故障,那么要耗费的时间就更长。

影响可用性的因素

在生产过程中,出现故障的概率非常大,这里面既有意料到的,也要突发的。既有可能是软件的,例如程序员写了一个bug,测试没有发现,带上了现 ,也有可能是硬件的,例如前不久腾讯云发生的数据丢失问题,就是因为一个硬盘的bug引起的,更有可能是外部原因,例如支付宝的上海数据中心光纤被挖断。

我们一些日常运维,也有可能会造成服务不可用,最典型的莫过于12306每晚的数据维护。经常我们需要迁移机器或者升级某些组件,都需要停机维护,或者有时候需要对数据库的数据进行大型的迁移,为了降低风险,我们也会选择停机,毕竟在现 环境下进行升级好比高速公路上换轮胎,稍有不慎,容易车毁人亡。

如何做到高可用

那么,我们如何做到系统更加高可用呢?无非下面这几点:

  • 数据持久化,用户的数据,只有持久化了,除非硬盘损坏,大部分情况都可以进行恢复。
  • 数据副本,数据持久化还不够,万一硬盘坏了呢,或者硬盘服务器坏了呢?尽管我们可以线下恢复,但是时间肯定非常长,要做到不可用时间更短,我们需要有数据备份。
  • 服务节点有备份,单点模型的可用性绝对大大降低。并且,最好不同的结点能够分布在不同的数据中心,减少外界灾害,例如挖光纤,断电。
  • 更完善的监控与自动化运维。如果一个故障30分钟才能被发现,那么可用性必然大大降低,同理,如果迁移或者扩容机器都要人工处理大半个小时,结果也是不言而喻。
  • 总结

    写代码,很简单,但是写工业级别的代码,却非常难。就好比造高铁、造飞机、造火箭,很多国家没实力造出这些东西么?并不是,做不到的,是工业级别的高铁跟飞机,造出来的东西,要每天载客运行,只要有一点点差错,就可能万劫不复。试想,如果一架飞机一年有几十个小时可能会出故障,你敢坐么,别说几十个小时,就算是1个小时,也是非常可怕的。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年7月17日
    下一篇 2019年7月17日

    相关推荐