设计一个高可用性的互联网软件系统,需考虑哪些因素?
技术的作用从短期来看往往都被高估,但是从长期来看又往往被低估。
导语:IT领域的5个9是啥?
写下这个题目时感觉是给自己挖了一个大坑,就像是在尝试回答前段时间在知乎上很火的一个讨论“为什么很多看起来不是很复杂的网站,比如Facebook需要大量顶尖高手来开发?”。人们可能已经习惯于生活中的很多事情,比如你随手拿起手机就可以打一个电话出去,打开一个APP就可以买一件心仪的商品,但是你可曾想过这背后对应的电信领域/IT领域的5个9的要求?那么问题来了什么是5个9?通俗的讲就是一年中有99.999%的时间服务都是必须可用的,也就是意味这一年中只允许最多只有5.26分钟服务是不可用的,这中间还包括系统升级的时间。在飞机系统领域这个要求则达到了9个9,这也是为什么飞机依然是世界上最安全的交通工具。
1、软件系统的非功能性需求
那么设计一个这样高可靠高可用的互联网软件系统到底需要哪些因素呢?本文不会讨论互联网世界纷繁复杂的功能性需求比如电商的购物车如何设计,P2P行业的买卖标如何实现;而是试图探讨在这些看起来完全不同的系统背后所需要的通用的需求,IT领域有个专有的名词来概括这些需求叫做非功能性需求:Non-functional Requirements. 什么是非功能性需求呢,维基上的定义如下是指依一些条件判断系统运作情形或其特性,而不是针对系统特定行为的需求。非功能性需求是一个系统能够达到的高质量,高稳定,高可靠,高性能,高可用的程度。
非功能性需求相对于功能性需求不为大多数人知道,但是并不代表不重要。按笔者理解它也属于用户体验的一部分;试想你打开一个电商网站,数据加载花了1分钟你还有兴趣在这家网站买东西么?那么衡量这个非功能性需求的指标就是系统响应时间-Reponse Time 。再或者一个在线旅游网站连续几个小时网站打不开,损失的不只是几个小时的订单,还有用户的信任度和对品牌的负面影响,衡量这个非功能性需求的指标就是系统的高可用性-High Availability。
非功能性需求听起来是几个简单的指标和衡量标准,可是为了达到一定的性能指标后面所涉及到的技术和系统规模都是常人无法想像的,后面凝聚着无数工程师团队的智慧和劳动。下面的章节笔者会简单介绍一下这几个非功能性需求指标和它们背后对应的一些可能的技术方案。
2、非功能性需求的几个重要指标
2.1高可用性-High Availability
高可用性是一个系统的重要特征,是指一个系统可以连续服务的时间,就是本文开篇提到的5个9,对于5个9的系统来说一年宕机时间不能超过5.26分钟。也许您可能不觉得这个时间算什么,但是如果你知道这里的需求是针对任何可抗和不可抗的情况下都需要满足的需求时就不一样了。不可抗是指发生火灾,地震时你的系统依然能够正常服务。这就意味着你可能不只是需要在上海的机房拥有你的系统还要在北京也拥有一套同样的系统,而且两个系统的数据还必须时同步的,这样才能保证作为一个用户当你使用网上系统时丝毫感受不了任何问题的影响而且连数据都是准确无误的!为了这5.26分钟,攻城狮们需要搭建高可靠的系统,不能有单点故障,建立本地冗余,异活,错误检测和无缝切换,考虑各种极端的情况下如何做数据同步,系统升级时如何做到服务不间断。
2.2性能和可扩展性-Performance and Scalability
性能是指整个软件系统在访问高峰时段能够支持的高峰并发会话数,而可扩展性是指基于单台服务器可支持的会话数基础上是否只是单纯增加服务器数量就能支持成倍增长的会话数。这两年互联网行业蓬勃发展,每天会冒出无数的APP,最初一些小的APP因为客户群体比较小同时在线也不多对系统性能要求和可扩展性也不高,但是如果突然某天APP火起来,用户量激增,那么系统能够快速扩容就是挑战一款应用成败的关键了。因此在设计的初期就把单台服务器的性能调优考虑进去,并且考虑系统是否可以近似线性的扩容是应对这个问题的关键。提高了性能和可扩展性是隐性的节约成本,节省的不仅仅是服务器/IDC和运营成本,还有最重要的是时间成本。
2.3系统的特性-Characteristic
顾名思义,系统的特性是指作为一个独立的系统需要支持的独特特殊非功能性需求。不同的软件系统所需要支持的特性是不同的,比如视频网站需要的低延时,保证视频能够被流畅的播放;P2P网站要求的是数据精准,以保证任何时候用户投资收益是正确的。而无论是视频网站还是P2P系统又都要求系统的响应时间尽量的短,以保证良好的用户体验。因此针对不同的互联网系统,我们需要制定不同的系统特性参数以提高用户的满意度。
2.4系统的可维护性-Maintainability
系统的可维护性在互联网产品初期阶段可能并不能引起很高的重视,因为初期阶段最重要的痛点是快速占领市场。但是等到产品发展到一定阶段,一个系统的可维护性又会成为继续发展壮大的瓶颈。可维护性主要考虑下面几个因素:
3、结束语
软件系统的非功能性需求是一个很大的题目,如果要展开说可能不是这样的篇幅能够涵盖的。在所有的非功能性需求中用户体验是已经被广大互联网用户所了解的,而文中所提到的几个非功能性需求背后对应的都是一个庞大的解决方案需要无数的软硬件系统协作来完成。
套用Fenng所说的:技术的作用从短期来看往往都被高估,但是从长期来看又往往被低估。
本文作者: 陈琨(点融黑帮),现任点融网资深软件开发工程师,曾就职于爱立信,华为,关注于高并发高可用的互联网软件系统设计和开发。
关键字:设计, 功能性
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!