七、软件成为水和电后产生的非功能需求

全世界用户每天都在使用互联网软件,开发者也不再是把软件塞入盒子交给用户就了事了。他们必须7天×24小时不间断地为用户提供服务。互联网软件的运行往往依赖成千上万台机房里工作的服务器群,这些服务器就如同发电厂的发电机或者自来水厂的水泵一样,要求有高度的可用性管理。面对随时变化的使用量,服务器集群要能随时接受海量用户的冲击。这些都要求开发者将运维管理和监控的需求放到非常重要的地位。如果这些服务器的管理需求和功能需求混合到一起,却没有好的软件技术支持,那么开发将是一场噩梦。在我们为软件添加各种各样功能的同时,我们往往会忽略那些对应的性能需求以及管理需求。这种不完善的功能一旦上线,经常会导致服务器集群的大量故障,从而出现严重的运营事故,这种事故会造成大量的用户价值的损失。这对提供服务的公司来说,是非常致命的。

大家一定感受过在大年三十的晚上成功发送短信的概率比平时低,因为那天发短信的用户要比平时多很多。而在“9·11”当天,很多新闻网站也被潮水般的网络访问者冲垮,原因也是用户访问量是平时的10多倍,从而导致网站服务器发生雪崩式的故障:过多同时涌入的访问者堵死了新闻数据库,然后导致了那些依赖数据的“缓冲数据”服务器的故障,最后那些提供页面显示的服务器被迫滞留大量网络连接,网站最终陷入整体瘫痪。

一个良好的互联网软件,现在普遍需要满足高可用、低延迟、容灾热备、负载均衡等互联网特性。而要满足这些特性,就需要额外地增加导航目录服务、接入服务、状态监控和自动切换服务等。这些服务都隐藏在用户单击链接之后,默默无闻地提供高稳定性的软件运行。像提供服务器集群管理的LVS、作为高速Web缓冲的反向代理软件Squid还有用来提高数据库性能的SQL proxy等著名软件,可能每个上网者都用到过,但是知道的却不多。

这些复杂而精巧的软件,都是互联网软件特定的需求。