代码改变世界

阅读《大型网站技术架构》,并结合"重大需求征集系统"有感

2018-03-23 11:49  ovols  阅读(196)  评论(0编辑  收藏  举报

  今天阅读了《大型网站技术架构:核心原理与案例分析》的第五、六、七章。这三张主要是讲述了一个系统的可用性、伸缩性和可扩展性。而根据文中所讲述的,一个系统的可用性主要是体现在这个系统的系统服务不中断运行时间占实际运行时间的比例,系统的伸缩性则是指在不改变系统软硬件设计,仅仅通过新增服务器的情况下,就能提升系统的处理能力,而系统的可扩展性是指该系统适应变化的能力。那么下面我就结合具体的“重大需求征集系统”来谈谈我对这三个性质的了解。

  系统的可用性,即是指系统进行连续的高强度的正常运行的时间占系统实际运行时间的比例。可想而知,如果一个系统根本没有办法保证一个较高的占比,这个系统给用户的体验一定是非常差的:不时的卡顿,经常地刷新甚至于时常报错。这样的系统根本没有办法满足用户的最基本的流畅需求,那么这个系统又有谁去使用呢?再想一想上学期自己做的“重大需求征集系统”,虽然能够完成基本的需求和要求,但是很明显我做的系统的可用性几乎为0.因为我做的系统没有办法保证连续的高强度的运作,甚至有时候还会报出http 500之类的错误。这对于用户来说很明显体验是非常差的。同时界面的风格、用户操作的习惯也没有进行较多的考虑,导致用户体验差。因此还需要向这个方向不停地改善。

  系统的伸缩性,是指通过新增服务器就能提升系统处理能力的性能。系统伸缩性设计可分为2类。一类是根据功能进行物理分离来实现伸缩,一类是按单一功能做集群实现伸缩。(当然很多时候是同时运用这2种方式)系统初期一般是根据功能进行分离,例如最开始整个系统就跑在一台服务器上,随着发展,将数据库分离处理单独运行在服务器上,接着将缓存分离出来单独运行,然后是静态资源分离出来。根据功能分离一般又分为2种情况,纵向分离(例如系统前端、后端、数据库分别部署扩展),  横向分离(例如,登录流程、搜索流程、购物车流程分别部署扩展)。很明显,我做的系统在这一项上的打分为0.因为我在做“重大需求征集系统”的时候根本就没有考虑到在服务器上进行运行,仅仅是通过在个人电脑上最基础的人机交互来完成操作的。因此我的系统根本就没有办法通过新增服务器的方式来对系统进行处理能力的提升。

  系统的可扩展性,是指在系统的某些部分需要修改扩展时,系统对变化的适应的能力。设计良好的代码允许更多的功能在必要时可以被插入到适当的位置中。这样做的目的的是为了应对未来可能需要进行的修改,而造成代码被过度工程化地开发。简单地说,可扩展性就是关于如何处理更大规模的业务。比如,Web应用程序就是允许更多的人使用你的服务。如果你不能弄清楚如何提高性能的同时向外扩展,没关系。只要你能处理更大规模的用户,即使是存在多个单点故障也没有问题。组合的可扩展性要求要满足用户不断发展的要求,还要满足因技术发展需要而实现的扩展和升级的需求。而对于我的系统来说,系统的可扩展性是有的,但是可扩展的部分不多,因此对应的可扩展的能力不强,因此这也是"重大需求征集系统"需要改善的一个方面。