软件架构的认识
这学期学习学习软件架构,对架构的概念还不是很了解。刚开始以为架构就是项目的框架、结构,这样概括其实是不全面的。架构不仅是结构,架构的产生源于人与人之间的合作交流,每个人的能力、时间和精力都是有限,但是他们要完成的项目却是复杂、精确的,这就要求从架构的角度来提高项目的质量,提高个人的时间效率。因此架构对提高生产力是有帮助的,可以缩短项目的时间,并会提高项目的质量。事实上项目的架构就是在长期进行这些活动后,积累下来的实践。可以说架构是人类发展过程中,由懵懵懂懂的,被动的去认识这个世界,变成主动的去认识,并以更高的效率去改造这个世界的方法。
架构准确的定义就是:根据要解决的问题,对目标系统的边界进行界定。并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。并对这些切分出来的部分,设立沟通机制。使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。
软件架构是架构的一个分支,它有架构的一切的特点。谈软件架构就必须先明白软件的本质和意义:就是通过把人类的日常工作生活虚拟化,减少成本,提升单个人员的生产力,提升人类自己的利益。因此软件架构出现是一开始懵懵懂懂的写软件,后来慢慢的就有意识的去切分,演变成了不同的架构。这个背后的动力也是一样的,就是提升参与的人的利益,降低成本。软件架构有两个要素:1 是一个软件系统从整体到部分的最高层次的划分。2 一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。我们在做架构时一定要明白两个问题,即这是谁的问题?有什么问题?
我们使用软件架构要解决软件的两个问题:1 业务问题。即在具体的现实生活状态下,没有软件的时候,所解决的问题的主体是谁,解决的是什么问题,是如何解决,如何运作的? 2 计算机问题。如何把现实生活用软件来模拟?模拟出来的软件,需要哪些硬件设施才能够满足要求? 并且当访问量越来越大的时候,软件能否支持硬件慢慢长大,性能线性扩展?因为硬件是可能会失效的,软件如何在硬件失效的情况下,仍然能够保证可用性,让用户能够不中断的访问软件提供的服务?怎么收集软件产生的数据,为下一阶段的工作提供依据?当我们完全了解这两个问题时,我们就可以设计出相应的架构。
使用软件架构必须要达到一下目标:1 可靠性。用户对软件系统的依赖是非常高的,因此必须保证软件可靠,稳定。 2 安全性。软件系统的安全至关重要,特别是一些商业系统。3 可伸缩性。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。4 可定制化。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。5 可扩展性。软件系统在一定程度上是开放的,允许导入新技术,从而对现有系统进行功能和性能的扩展 。 6可维护性。系统必须易于修改,更新。维护不必花大量的时间和财力。