隆尧网站,做网站月入5万,凌风 wordpress 大学,泉州市建设局网站在日常的软件开发当中#xff0c;我们一般都是采用了分层的方式来架构系统#xff0c;但是为什么我们需要分层进行架构呢#xff1f;在此之前#xff0c;我觉得需要 搞明白两个概念#xff0c;什么是软件的伸缩性#xff0c;什么是性能。首先#xff0c;什么是软件的伸缩… 在日常的软件开发当中我们一般都是采用了分层的方式来架构系统但是为什么我们需要分层进行架构呢在此之前我觉得需要 搞明白两个概念什么是软件的伸缩性什么是性能。 首先什么是软件的伸缩性Scalability我们都知道设计良好的系统可以应对不断增加的系统访问量但是我们如何能在系统用户增多的时候来提高系统的吞吐量呢这就是伸缩性之魅力所在。 伸缩性可以有两个方面垂直伸缩性和水平伸缩性垂直伸缩性是通过在同一个业务单元中增加资源来提高系统的吞吐量比如增加服务器cpu的数量增加服务器的内存等。水平伸缩性是通过增加多个业务单元资源使得所有的业务单元逻辑上就像是一个单元一样。比如ejb分布式组件模型集群配置等都属于此种方式。 下面我说一下我对性能的理解我们在日常的开发当中当说到性能的时候一般都会首先想到系统有多“快”我想说的就是性能还涉及到另一个方面那就是系统有“多少”也就是说系统的吞吐量。我们在考虑性能的时候一般都会考虑到这两方面。 理解了伸缩性和性能这两个概念以后我们来看看系统为什么需要分层架构。 首先采用分层架构的好处我想大家肯定都会普遍接受的是系统分层有利于系统的维护系统的扩展。这其实就是系统的可维护性和可扩展性。 其次我围绕伸缩性以及性能来说一下为什么需要分层架构。比如在目前的J2EE系统开发当中我们普遍采用了分层构架的方式一般分为表现层业务层和持久层当然了我们还可以对各层进行进一步的划分但是层次划分也不能太细具体项目要具体对待原因下面讨论。我们想想采用分层以后会带来什么不好的地方想这个问题我们可以先反过来想一下不采用分层有什么好处这当然是每个业务处理速度会更快因为层与层之间通信会引来额外的开销所以采用分层后给我们软件系统带来的就是每个业务处理开销会变大。 好了既然采用分层会带来额外的开销那么我们为什么还要进行分层呢这就涉及到了伸缩性和性能的问题。如果不采用分层的话系统的扩展和伸缩也主要靠垂直伸缩但是垂直伸缩是有限度的随着系统规模的扩大垂直伸缩带来的代价也将变得非常昂贵。当采用了分层以后虽然带来了层与层之间的通信开销这得益于计算机硬件的飞快发展如果计算机硬件的发展水平不足以抵消分层以后带来的额外的开销那么分层架构也会有一个巨大的问号所以从某种程度上来说分层架构也利用了一点垂直伸缩性但是它有利于层的水平伸缩性并且各个层都可以进行独立的伸缩而不会影响到其它的层比如EJB分布式组件模型以及目前采用的分成架构的方式就有利于水平伸缩性. 对于性能方面我上面也说了性能存在两个方面一是“快”二是“多少”采用分层架构当然会影响到性能快的方面因为层次之间通信会带来额外的开销但是采用了分层架构后我们的软件系统可以更容易变大(“多少”的问题)也就是说当系统要应对更大的访问量的时候我们可以通过增加多个业务单元资源此时的多个业务单元逻辑上看起来就像一个逻辑单元这对外界是透明的来增加系统吞吐量。所以对于那些实时性比较高的系统层的划分不应该太细太细必然带来实时性的减低而对于实时性不高而需要高度的伸缩性的系统我们可以通过引入不同的层来达到系统水平伸缩的目的。 以上是有关伸缩性和性能以及它们与分层架构之间的联系下面我再说一下另外一个问题这就是Amdahl law(阿姆达尔定律),这个定理主要说明了系统中串行部分对系统速度提升的影响假设程序中串行部分占a%的比例那么程序最多提升1/a%的速度。我从这个定律也看出了软件垂直伸缩的局限性因为无论增加多少个cpu如果程序中有串行化的部分那么程序的速度的提升是有一个极限的是不能靠增加硬件来无限度的增强系统性能的。所以对于我们软件工程师来说我们更加需要关注系统的水平伸缩性。 !--EndFragment-- 转载于:https://blog.51cto.com/yuquan/360750