一个网站的页面能完整呈现在最终用户面前,需要经过很多个环节,任何一个环节出了问题,都有可能导致网站页面不可访问,DNS会被劫持,CDN服务可能会挂掉,王炸服务及可能会宕机,网络交换机可能会失效,硬盘会损坏,网卡会松掉,甚至机房会停电,空调会失灵,程序会有BUG,黑客会攻击,促销会引来大量访问,第三方合作伙伴的服务会不可用……要保证一个网站永远完全可用几乎是一件不可能完成的使命。
网站不可用也被称作网络故障,业界通常用多少个9来衡量网站的可用性,即9的数量越高,代表网站的可能性越高,每年发生的不可用时间也就越少。一个软件工程师应当尽可能开发出可用性高的网站,可用性指标是网站架构设计的重要指标,对外是服务承诺,对内是考核指标。从管理层面,可用性指标是网站或者产品的整体考核指标,具体到每个工程师的考核,更多的是使用故障分。
通常,企业级的停用系统为提高系统可用性,会采用较昂贵的软硬件设备,如IBM的小型机乃至中型机大型机及专有操作系统、Oracle数据库、EMC存储设备等。而互联网公司更多的采用PC级服务器,开源的数据库和操作系统,这些廉价的设备在节约成本的同时也降低乐可用性,特别是服务器硬件设备,低价的商业级服务器一年宕机一次是一个大概率事件,而那些高强度频繁读写的普通硬盘,损坏的概率会更高一些。因此,给网站设计高可用架构的主要目的就是保证服务器硬件故障时服务器仍然可用、数据仍然保存并能够被访问。
信息需求填报系统中,采用了应用层服务层数据层三层分层模式,各层之间相对独立性,应用层层负责具体业务逻辑处理,服务层负责提供可复用的服务,数据层负责数据的存储和访问。在应用层,主要存放界面jsp设计,在服务层,则包含了用户账户服务,Session服务,登录服务等等。数据层存储在数据库中后,可以考虑使用从数据库备份数据,以防数据丢失。当然,控制网站的可用性,管理制度也要相应改变。工程师做到对网站的实时监控,对日志的收集管理,这样才出现问题的时候能够迅速解决。
一个知名度高的网站,势必会经受高峰值的用户访问,此时,仅仅通过硬件性能的提高完全无法解决大数据对网站的冲击,因此,通过提高网站的伸缩性是重中之重。
网站的伸缩性设计可分为两类,一类根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。一个具有良好伸缩性架构设计的网站,其设计总是走在业务发展的前面,就已经做好充足准备,当也无需要时,只需要购买或者和租用服务器鸡蛋不熟实施就可以了,技术团队亦可高枕无忧。
有的网站一道发布日就如临大敌,真个技术部加班通宵达旦;而有的网站可以随时发布,新功能可以随时快速上线。这些都有赖于网站的扩展性架构设计,即使对现有系统影响最小的情况下,系统功能可持续扩展提升的能力。
例如信息需求填报系统,对需求管理方面,完全可以临时增加需求统计功能,那么网站能否很快完成功能拓展?
开发 低耦合系统是软件设计的终极目标之一,这一目标驱动着软件开发技术的创新和发展,从软件与硬件的第一次分离到操作系统的诞生,从各种软件工具集到各种开发框架;无不体现着降低系统耦合性这一终极目标。可以说,度量一个开发框架,设计模式,编程语言优劣的重要尺度就是衡量他是不是让软件开发过程和软件产品更加低耦合。