在日常的软件开发当中,我们一般都是采用了分层的方式来架构系统,但是为什么我们需要分层进行架构呢?在此之前,我觉得需要
搞明白两个概念,什么是软件的伸缩性,什么是性能。
首先,什么是软件的伸缩性(Scalability)?我们都知道设计良好的系统可以应对不断增加的系统访问量,但是我们如何能在系统用户增多的时候,来提高系统的吞吐量呢?这就是伸缩性之魅力所在。
伸缩性可以有两个方面,垂直伸缩性和水平伸缩性,垂直伸缩性是通过在同一个业务单元中增加资源来提高系统的吞吐量,比如增加服务器cpu的数量,增加服务器的内存等。水平伸缩性是通过增加多个业务单元资源,使得所有的业务单元逻辑上就像是一个单元一样。比如ejb分布式组件模型,集群配置等都属于此种方式。
下面我说一下,我对性能的理解,我们在日常的开发当中,当说到性能的时候,一般都会首先想到系统有多“快”,我想说的就是性能还涉及到另一个方面,那就是系统有“多少”,也就是说系统的吞吐量。我们在考虑性能的时候,一般都会考虑到这两方面。
理解了伸缩性和性能这两个概念以后,我们来看看系统为什么需要分层架构。
首先采用分层架构的好处,我想大家肯定都会普遍接受的是,系统分层有利于系统的维护,系统的扩展。这其实就是系统的可维护性和可扩展性。
其次,我围绕伸缩性以及性能来说一下,为什么需要分层架构。比如在目前的J2EE系统开发当中,我们普遍采用了分层构架的方式,一般分为表现层,业务层和持久层,当然了我们还可以对各层进行进一步的划分,但是层次划分也不能太细,具体项目要具体对待,原因下面讨论。我们想想,采用分层以后会带来什么不好的地方?想这个问题,我们可以先反过来想一下,不采用分层有什么好处,这当然是每个业务处理速度会更快,因为层与层之间通信会引来额外的开销,所以采用分层后,给我们软件系统带来的就是每个业务处理开销会变大。
好了,既然采用分层会带来额外的开销,那么我们为什么还要进行分层呢?这就涉及到了伸缩性和性能的问题。如果不采用分层的话系统的扩展和伸缩也主要靠垂直伸缩,但是垂直伸缩是有限度的,随着系统规模的扩大,垂直伸缩带来的代价也将变得非常昂贵。当采用了分层以后,虽然带来了层与层之间的通信开销(这得益于计算机硬件的飞快发展,如果计算机硬件的发展水平不足以抵消分层以后带来的额外的开销,那么分层架构也会有一个巨大的问号,所以从某种程度上来说,分层架构也利用了一点垂直伸缩性),但是它有利于层的水平伸缩性,并且各个层都可以进行独立的伸缩而不会影响到其它的层,比如EJB分布式组件模型以及目前采用的分成架构的方式就有利于水平伸缩性.
对于性能方面,我上面也说了,性能存在两个方面,一是“快”,二是“多少”,采用分层架构,当然会影响到性能快的方面,因为层次之间通信会带来额外的开销,但是采用了分层架构后,我们的软件系统可以更容易变大(“多少”的问题),也就是说当系统要应对更大的访问量的时候,我们可以通过增加多个业务单元资源(此时的多个业务单元逻辑上看起来就像一个逻辑单元,这对外界是透明的)来增加系统吞吐量。所以对于那些实时性比较高的系统,层的划分不应该太细,太细必然带来实时性的减低,而对于实时性不高,而需要高度的伸缩性的系统,我们可以通过引入不同的层来达到系统水平伸缩的目的。
以上是有关伸缩性和性能,以及它们与分层架构之间的联系,下面我再说一下另外一个问题,这就是Amdahl law(阿姆达尔定律),这个定理主要说明了系统中串行部分对系统速度提升的影响,假设程序中串行部分占a%的比例,那么程序最多提升1/a%的速度。我从这个定律也看出了,软件垂直伸缩的局限性,因为无论增加多少个cpu,如果程序中有串行化的部分,那么程序的速度的提升是有一个极限的,是不能靠增加硬件来无限度的增强系统性能的。所以对于我们软件工程师来说,我们更加需要关注系统的水平伸缩性。
<!--EndFragment-->
分享到:
相关推荐
C语言分层设计管理系统源码C语言分层设计管理系统源码C语言分层设计管理系统源码C语言分层设计管理系统源码C语言分层设计管理系统源码C语言分层设计管理系统源码C语言分层设计管理系统源码C语言分层设计管理系统源码...
1、平台架构图,分层展示架构图:从访问层、前端UI、web层、业务层、数据存储等层次展示系统架构,设置权限控制与日志记录; 2、提供pdf版本和可线上编辑文件,若需要编辑,可根据readme操作,操作简单 3、压缩包中...
小组成员经过详细的讨论和调研决定采取面向对象的分多层架构进行系统开发,采取SQl Server2008设计和管理数据库资源,采取VS实现分层架构和网络功能模块,开发小组面临的第一项任务就是要架构分层系统框架。...
系统开发的架构与分层一些知识点,基于Java的一个架构设计!
pdf格式论文 论文题目软件系统的分层设计
深入.net平台的软件系统分层,了解项目开发中使用的基本3大框架(表示层,业务逻辑层,数据访问层)
这个是用分层思想写的,大家可以借鉴下,有问题可以留言
嵌入式是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式操作系统分为4层,即硬件层、驱动层、操作系统层和应用层。下面粤嵌...
4)提高数据管理安全性,网络存储服务器上的数据可以是加密的,访问这些数据要通过存储管理软件,通过授权用户进行访问进行可以登记谁访问,什么文件到日志。5)删除重复数据,重复数据在服务器上只保存一个备分。 ...
安检分层管理系统安检分层管理系统
北大青鸟ACCP6.0 深入.NET平台的软件系统分层开发4 课件代码答案
健雄职业技术学院在开发毕业设计管理系统过程中,项目组首先要完成的任务是设计系统的开发方案和系统功能,第一章采取的是分层技术架构系统框架,分层架构系统在.NET中开发方案需要我们进一步确定和明确,根据调研要...
计算机监控系统系统功能和分层.pdf
北大青鸟ACCP6.0深入.NET平台的软件系统分层开发2 课件代码答案
深入.NET平台的软件系统分层开发7 酒店管理系统、附带数据库
北大青鸟ACCP6.0深入.NET平台的软件系统分层开发6 第六章课件代码答案
中高考改革背景下 分层走班选排课解决方案 ,本套选排课平台产品是一款针对中高考改革背景下的全方位智慧教务软件,主要包含选课指导、在线选课、排课、调课、考勤、评价、成绩分析等系统。不仅能够满足绝大部分中...
SOP-私域流量沙盘盈利系统(2产品分层表单).xlsx
北大青鸟ACCP6.0 深入.NET平台的软件系统分层开发1 课件代码 答案
针对油田偏心注水工艺过程繁琐、复杂的问题,提出了一种基于PIC16F877A的分层注水流量智能测调系统的设计方案,介绍了系统的工作原理及软、硬件设计。该系统采用模糊控制方法对注水流量进行智能调节和控制,通过串行...