在日常的软件开发当中,我们一般都是采用了分层的方式来架构系统,但是为什么我们需要分层进行架构呢?在此之前,我觉得需要
搞明白两个概念,什么是软件的伸缩性,什么是性能。
首先,什么是软件的伸缩性(Scalability)?我们都知道设计良好的系统可以应对不断增加的系统访问量,但是我们如何能在系统用户增多的时候,来提高系统的吞吐量呢?这就是伸缩性之魅力所在。
伸缩性可以有两个方面,垂直伸缩性和水平伸缩性,垂直伸缩性是通过在同一个业务单元中增加资源来提高系统的吞吐量,比如增加服务器cpu的数量,增加服务器的内存等。水平伸缩性是通过增加多个业务单元资源,使得所有的业务单元逻辑上就像是一个单元一样。比如ejb分布式组件模型,集群配置等都属于此种方式。
下面我说一下,我对性能的理解,我们在日常的开发当中,当说到性能的时候,一般都会首先想到系统有多“快”,我想说的就是性能还涉及到另一个方面,那就是系统有“多少”,也就是说系统的吞吐量。我们在考虑性能的时候,一般都会考虑到这两方面。
理解了伸缩性和性能这两个概念以后,我们来看看系统为什么需要分层架构。
首先采用分层架构的好处,我想大家肯定都会普遍接受的是,系统分层有利于系统的维护,系统的扩展。这其实就是系统的可维护性和可扩展性。
其次,我围绕伸缩性以及性能来说一下,为什么需要分层架构。比如在目前的J2EE系统开发当中,我们普遍采用了分层构架的方式,一般分为表现层,业务层和持久层,当然了我们还可以对各层进行进一步的划分,但是层次划分也不能太细,具体项目要具体对待,原因下面讨论。我们想想,采用分层以后会带来什么不好的地方?想这个问题,我们可以先反过来想一下,不采用分层有什么好处,这当然是每个业务处理速度会更快,因为层与层之间通信会引来额外的开销,所以采用分层后,给我们软件系统带来的就是每个业务处理开销会变大。
好了,既然采用分层会带来额外的开销,那么我们为什么还要进行分层呢?这就涉及到了伸缩性和性能的问题。如果不采用分层的话系统的扩展和伸缩也主要靠垂直伸缩,但是垂直伸缩是有限度的,随着系统规模的扩大,垂直伸缩带来的代价也将变得非常昂贵。当采用了分层以后,虽然带来了层与层之间的通信开销(这得益于计算机硬件的飞快发展,如果计算机硬件的发展水平不足以抵消分层以后带来的额外的开销,那么分层架构也会有一个巨大的问号,所以从某种程度上来说,分层架构也利用了一点垂直伸缩性),但是它有利于层的水平伸缩性,并且各个层都可以进行独立的伸缩而不会影响到其它的层,比如EJB分布式组件模型以及目前采用的分成架构的方式就有利于水平伸缩性.
对于性能方面,我上面也说了,性能存在两个方面,一是“快”,二是“多少”,采用分层架构,当然会影响到性能快的方面,因为层次之间通信会带来额外的开销,但是采用了分层架构后,我们的软件系统可以更容易变大(“多少”的问题),也就是说当系统要应对更大的访问量的时候,我们可以通过增加多个业务单元资源(此时的多个业务单元逻辑上看起来就像一个逻辑单元,这对外界是透明的)来增加系统吞吐量。所以对于那些实时性比较高的系统,层的划分不应该太细,太细必然带来实时性的减低,而对于实时性不高,而需要高度的伸缩性的系统,我们可以通过引入不同的层来达到系统水平伸缩的目的。
以上是有关伸缩性和性能,以及它们与分层架构之间的联系,下面我再说一下另外一个问题,这就是Amdahl law(阿姆达尔定律),这个定理主要说明了系统中串行部分对系统速度提升的影响,假设程序中串行部分占a%的比例,那么程序最多提升1/a%的速度。我从这个定律也看出了,软件垂直伸缩的局限性,因为无论增加多少个cpu,如果程序中有串行化的部分,那么程序的速度的提升是有一个极限的,是不能靠增加硬件来无限度的增强系统性能的。所以对于我们软件工程师来说,我们更加需要关注系统的水平伸缩性。
<!--EndFragment-->
分享到:
相关推荐
首先,我们要理解什么是系统分层。在软件设计中,分层架构是一种常见的设计模式,它将复杂的系统分解为多个相互独立但又有一定依赖关系的层次。这样的设计有助于提高代码的模块化,使得每个层都可以专注于其特定的...
1、平台架构图,分层展示架构图:从访问层、前端UI、web层、业务层、数据存储等层次展示系统架构,设置权限控制与日志记录; 2、提供pdf版本和可线上编辑文件,若需要编辑,可根据readme操作,操作简单 3、压缩包中...
分层是架构设计中的一种常见策略,它将系统逻辑上划分为多个层,如用户层、业务逻辑层和数据层。每层负责特定职责,限制了层之间的依赖关系,增强了系统的可维护性。例如,通常采用的三层服务模式包括用户界面层、...
本项目以"学生管理系统(分层开发)"为主题,旨在探讨如何利用分层架构来设计和实现一个高效、可维护的学生管理软件。下面,我们将深入解析这一系统的各个层面及其核心知识点。 1. **分层架构介绍** 分层架构是...
小组成员经过详细的讨论和调研决定采取面向对象的分多层架构进行系统开发,采取SQl Server2008设计和管理数据库资源,采取VS实现分层架构和网络功能模块,开发小组面临的第一项任务就是要架构分层系统框架。...
pdf格式论文 论文题目软件系统的分层设计
《S2-分层结构-酒店管理系统》是一个全面的教程,涵盖了从设计到实现酒店管理系统的各个关键步骤。系统基于C#编程语言,利用分层架构来组织代码,确保了良好的可读性、可维护性和模块化。在这个系统中,我们主要关注...
当我们谈论"02-架构分层:我们为什么一定要这么做?"时,这个问题的核心在于理解分层架构的重要性和实施方法。 首先,分层架构是指将一个整体系统划分为若干个独立的层次,每个层次都有特定的职责,通过相互协作来...
分层分布式结构的应用是指计算机监控系统采用分层式和分布式的设计理念,即系统的架构和功能被划分为不同的层次,每一层执行特定的功能,并通过分布式的方式协同工作,保证监控系统的可靠性与扩展性。分层分布式结构...
软件架构是软件工程中的一个核心概念,它涉及软件系统的结构设计和组织方法。...在设计分层分布式系统架构时,应当充分考虑系统的可扩展性、可用性和维护性,以实现对大型、复杂软件系统的有效管理。
嵌入式是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式操作系统分为4层,即硬件层、驱动层、操作系统层和应用层。下面粤嵌...
下层决策者为各用户控制系统,以用户收益最大化为目标,对设备的运行方式和工作状况进行控制,以达到用户购能费用最小的自趋优控制效果。上层决策者为园区控制系统,正常运行时以设备经济运行为目标进行优化控制。当...
1. **分层架构**:软件系统分层是一种常见的设计模式,它将复杂的应用程序拆分为独立的功能模块,每个模块负责特定的职责。通常包括表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)以及实体层(Entities)。...
密钥配置模块是该系统的核心之一,它通过将用户分层,并为不同层级的用户分配不同的私钥生成器,实现了一种分层的密钥管理机制。这种机制不仅可以降低私钥生成器的负荷,还增强了系统的层次性和安全性。文件加解密...
《C#图书管理系统基于WCF的分层设计详解》 在软件开发中,分层架构是一种常见的设计模式,它将复杂的应用程序分解为多个独立的层次,每个层次负责不同的功能,以此提高代码的可维护性和可扩展性。在这个C#图书管理...
安检分层管理系统的总体技术要求包括项目 X 围与其它系统界面,工程 X 围本系统的工程 X 围仅指要求投标人为安检分层管理系统主要工作。投标人必须按照本技术规 X 的要求在规定的工程进度计划期限内完成以下主要的...
分层思想是软件设计中的另一个关键概念,它将复杂系统拆分为多个独立的层次,每个层次负责不同的功能。常见的分层结构包括表现层(用户界面)、业务逻辑层(处理业务规则)、数据访问层(与数据库或XML文件交互)等...
4)提高数据管理安全性,网络存储服务器上的数据可以是加密的,访问这些数据要通过存储管理软件,通过授权用户进行访问进行可以登记谁访问,什么文件到日志。5)删除重复数据,重复数据在服务器上只保存一个备分。 ...
《ACCP7.0S2深入.NET平台的软件系统分层开发》是针对.NET平台的一本专业教程,旨在帮助读者掌握在.NET环境下进行软件系统分层开发的核心技术和实践方法。ACCP(Accelerated Career Certification Program)是一种...
在深入.NET平台的软件系统分层开发中,我们主要探讨的是如何构建高效、可扩展且易于维护的应用程序。北大青鸟ACCP6.0课程旨在为学员提供这方面的专业培训,帮助他们掌握.NET框架下的软件工程实践。在这个部分,我们...