这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战
七 软件产品线
7.1 概念
软件产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足特定领域的特定需求。软件产品线是-个十分适合专业的开发组织的软件开发方法,能有效的提高软件生产率和质量,缩短开发时间,降低总开发成本。
核心资源:包括所有产品所共用的软件架构,通用的构件、文档等。
产品集合:产品线中的各种产品。
软件复用是将己有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件 复用是提高软件生产力和质量的- -种重要技术。早起的软件复用主要是代码级复用,被复用的知识专 指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一 切有关方面。
7.2 过程模型
7.2.1 双生命周期模型
领域工程:领域分析-一领域设计一 一领域实现 (类似于DSSA)。
应用工程:需求分析(划分出领域公共的需求和独特的需求)--系统设计--系统实现(用领
域可复用构件实现公共需求,用定制开发服务实现独特需求)。
应用工程会将系统独特的需求反馈给领域工程,由领域工程来确定该需求是否是大部分产品共有 的需求,建立成可复用的构件,归于核心资源中,领域工程和应用工程间是一个循环的过程,不分先 后。
7.2.2 三生命周期模型
除了已有的领域工程、应用工程外,还添加了企业工程(针对企业资源的生命线)和资源管理(双向交互,便于管理核心资源),另外,还对领域工程和应用工程的实现步骤都增加了第一步(与市场相关)。
7.3 建立方式
企业要建立软件产品线,要建立两个小组,第一-组是 核心资源小组,第二组是产品应用小组。建 立产品线有两个依据,即是基于现有产品还是全新产品( 企业进入到一个全新的领域),采用演化方 式还是革命方式(循序渐进还是直接全部完成),可以分为四种建立方式:
将现有产品演化为产品线:慢慢演化,总周期和总投资大。
用软件产品线替代现有产品集:基于现有产品,革命方式,即基于现有需求直接开发出软件产品线,投资少,但是当需求发生变化时,会造成无用功。
全新软件产品线的演化:企业进入到一个全新的领域,已有产品线资源会影响新需求,使投资增大。
全新软件产品线的开发:首先开发人员要得到所有且准确的需求,才能全部开发完,一旦完成产品线的开发,新产品的开发就相当快,降低投资,缺点就是当新产品需求改变大时,核心资源库不够,就十分麻烦。
综上:革命方式比演化方式更节省投资,更省时间,但只适用于需求明确且变动不大,不然风险 很大。
7.3.1 成功因素
下列四个方面决定企业建立产品线是否成功:
对该领域具备长期和深厚的经验; -一个用于构件产品的好的核心资源库;好的产品线架构;好的
管理(软件资源、人员组织、过程)支持。
八 中间件技术
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。
8.1 中间件特点
- 负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。
- 提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。
- 提供多层架构的应用开发和运行的平台,以及应用开发框架,支持模块化的应用开发。
- 屏蔽硬件、操作系统、网络和数据库的差异。
- 提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一-致性。
- 提供--组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作。
8.2 中间件技术
8.2.1 主要的中间件有五类:
-
远程过程调用: RPC, 分布式应用程序处理方法,客户进程向服务器进程提出调用请求,客户端和服务器都有存根,客户端和服务器直接通信,是同步的。
-
对象请求代理: ORB, 两个对象之间的通信是通过代理总线来进行的,对象A先将消息发送到ORB,对象B再从ORB中取到数据,所以是个代理模式,是异步的,这种模式下客户和服务器之间互不相关,都是通过ORB来通信。
-
远程方法调用: RMI, 也有服务器和客户端,服务器创建一系列远程对象的方法,由客户端来远.程调用这些方法。
-
面向消息的中间件: MON,利用消息通信来完成与应用无关的操作,用于扩展通信手段,消息传递与排队算法。
-
事务处理监控器:TPM,也称为交易中间件,应用广泛,能支持数以万计的客户端对服务器的访问,高效率,高可靠性,支持负载均衡等;介于客户端与服务器之间,处理失败返回、负载均衡等中间操作的中间件。
8.2.2 CORBA (公共对象请求代理体系结构)
OMG组织制订了0MA(Object Management Architecture,对象管理体系结构)参考模型,该模型描述了OMG规范所遵循的概念化的基础结构。OMA由对象请求代理ORB、对象服务、公共设施、域接 口和应用接口这几个部分组成,其核心部分是对象请求代理ORB (Object Request Broker)。
对象管理组织(OMG)基于CORBA基础设施定义了四种构件标准。
- 实体(Entity) 构件需要长期持久化并主要用于事务性行为,由容器管理其持久化。
- 加工(Process) 构件同样需要容器管理其持久化,但没有客户端可访问的键。
- 会话(Session)构件不需要容器管理其持久化,其状态信息必须由构件自已管理。
- 服务(Service) 构件是无状态的。
CORBA对象可看作是一个具有对象标识、对象接口及对象实现的抽象实体。之所以称为抽象的,是因为并没有硬性规定CORBA对象的实现机制一一个CORBA对象的引用又称可互操作的对象引用(Interoperable Object Reference)。从客户程序的角度看,IOR 中包含了对象的标识、接口类型及其他.信息以查找对象实现。
对象标识(ObjectID)是-一个用于在POA中标识一个CORBA对象的字符串。它既可由程序员指派,也可由对象适配器自动分配,这两种方式都要求对象标识在创建它的对象适配器中必须具有唯一性。
POA (便携式对象适配器)是对象实现与ORB其它组件之间的中介,支持由Object ld标识的对象的名称空间,它将客户请求传送到伺服对象,按需创建子POA,提供管理伺服对象的策略。
伺服对象(servant) 是指具体程序设计语言的对象或实体,通常存在于- -个服务程序进程之中。客户程序通过对象引用发出的请求经过ORB担当中介角色,转换为对特定的伺服对象的调用。在一个CORBA对象的生命期中,它可能与多个伺服对象相关联,因而对该对象的请求可能被发送到不同的伺服对象。
8.3 典型的应用架构-J2EE
8.3.1 分布式多层应用程序
-
客户层(客户应用或WEB浏览器动态网页)对应客户机;
-
WEB层(可省略,是WEB浏览器)和业务层(业务处理逻辑,包括会话Bean,实体Bean和消息驱动Bean)对应J2EE服务器;
-
企业信息系统层对应数据存储服务器。
8.3.2 JAVA企业应用框架
-
Structs框架:是一个基于J2EE平台的MVC (模型、视图、控制器)框架,采用Servelet 和JSP技术实现。M由实现业务逻辑的javaBean构成,C由ActionServlet和Action来实现,V由一组JSP文件构成。 -
Spring框架:通过RMI或Web Servic远程访问业务逻辑,允许自由选择和组装各部分功能,还提供和其他软件集成的接口。Spring 本身是个容器,管理构件的生命周期、构件的组态、依赖注入等,并可以控制构件在创建时是以原型或单例模式来创建。 -
Hibernate框架:是- - 个对象关系映射框架,提供了java 对象到数据库表之间的直接映射,它对JDBC进行了非常轻量级的对象封装,使得java 程序员可以使用对象编程思维来操作数据库。在Hibernate中,ORM机制的核心是一个XML文件,该文件描述了数据库模式是怎么与一组java类绑定在一起的。
表示层由Structs实现,管理用户请求;业务层由Spring实现,处理业务逻辑中的业务处理情况,提供一个控制器的代码;数据库层由Hibernate实现,通过面向对象的查询语言HQL来实现数据的增删改查。这样组合可以搭建一个轻量级的J2EE架构。
8.3.3 重量级与轻量级之争
重量级框架占用资源过多,在开发的过程中效率很低;大部分时间花在配置、运行的过程上,修改复杂;单元测试也比较麻烦。但在大量运行过程中会表现出优异的效果,也即开发麻烦,运行性能高。
轻量级框架提高了开发的速度;立即可以看到结果;做单元测试非常简单;大量线程可供参考的开源代码。开发简单,但运行性能低。
8.4 典型的应用架构-.NET
.NET框架处于操作系统和.NET应用语言之间,只适用于微软系统,而J2EE支持跨平台,任何安装了JVM的平台。
8.4.1 .NET和J2EE之争
JVM (将所有JAVA代码都编译为字节码,由JVM解释执行)和CLR (.NET核心技术,类似于JVM,生成中间代码CLR,编译执行)。
对多层分布式应用的支持,二者都支持多层分布式应用程序的开发:在表示层的平台支持上,J2EE客户端支持多个平台,.NET 只能在微软系统上运行,也正是因此,.NET 会对微软系统上的应用进行优化;在业务层,J2EE 占优势,因为有许多开源的项目和代码供参考,开发就变得简单;在数据层,二者都支持多种数据库,都非常优秀。
-
安全性,由于JAVA在.NET之后出来,借鉴了.NET优点,JAVA在运行时动态验证,.NET 是静态全面验证,二者都非常优秀,不分上下。
-
应用程序的部署,J2EE的部署相对来说较复杂,针对不同的系统要特别布置。
-
可移植性,显然J2EE占优势,一次开发, 到处运行。
-
外部支持: J2EE 占优势,得到了很多厂家的支持,.NET 只是微软一家。
九 Web架构设计
9.1 Web技术与演变
9.1.1 Web应用技术分类
-
从架构来看: MVC, MVP, MVVM, REST, Webservice,微服务。
-
从缓存来看: MemCache, Redis, Squid.
-
从并发分流来看:集群(负载均衡)、CDN。
-
从数据库来看:主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图。
-
从持久化来看: Hibernate, Mybatis。
-
从分布存储来看: Hadoop, FastDFS,区块链。
-
从数据编码看: XML,JSON。
-
从Web应用服务器来看: Apache, WebSphere, Weblogic, Tomcat, JBOSS, IIS。
-
其它:静态化,有状态与无状态,响应式Web设计。
9.1.2 单台机器到数据库与Web服务器分离
9.1.3 应用服务器集群
系统演变到这里,将会出现问题:
用户的请求由谁来转发到具体的应用服务器;
用户如果每次访问到的服务器不-一样,那么如何维护session的一致性。