九 软件架构设计7

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战java

七 软件产品线

7.1 概念

软件产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能知足特定领域的特定需求。软件产品线是-个十分适合专业的开发组织的软件开发方法,能有效的提升软件生产率和质量,缩短开发时间,下降总开发成本。程序员

核心资源:包括全部产品所共用的软件架构,通用的构件、文档等。算法

产品集合:产品线中的各类产品。数据库

软件复用是将己有软件的各类有关知识用于创建新的软件,以缩减软件开发和维护的花费。软件 复用是提升软件生产力和质量的- -种重要技术。早起的软件复用主要是代码级复用,被复用的知识专 指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一 切有关方面。编程

7.2 过程模型

7.2.1 双生命周期模型

领域工程:领域分析-一领域设计一 一领域实现 (相似于DSSA)。
应用工程:需求分析(划分出领域公共的需求和独特的需求)--系统设计--系统实现(用领 域可复用构件实现公共需求,用定制开发服务实现独特需求)。浏览器

应用工程会将系统独特的需求反馈给领域工程,由领域工程来肯定该需求是不是大部分产品共有 的需求,创建成可复用的构件,归于核心资源中,领域工程和应用工程间是一个循环的过程,不分先 后。缓存

image.png

7.2.2 三生命周期模型

除了已有的领域工程、应用工程外,还添加了企业工程(针对企业资源的生命线)和资源管理(双向交互,便于管理核心资源),另外,还对领域工程和应用工程的实现步骤都增长了第一步(与市场相关)。安全

image.png

7.3 创建方式

企业要创建软件产品线,要创建两个小组,第一-组是 核心资源小组,第二组是产品应用小组。建 立产品线有两个依据,便是基于现有产品仍是全新产品( 企业进入到一个全新的领域),采用演化方 式仍是革命方式(按部就班仍是直接所有完成),能够分为四种创建方式:服务器

image.png
将现有产品演化为产品线:慢慢演化,总周期和总投资大。
用软件产品线替代现有产品集:基于现有产品,革命方式,即基于现有需求直接开发出软件产品线,投资少,可是当需求发生变化时,会形成无用功。markdown

  全新软件产品线的演化:企业进入到一个全新的领域,已有产品线资源会影响新需求,使投资增大。

  全新软件产品线的开发:首先开发人员要获得全部且准确的需求,才能所有开发完,一旦完成产品线的开发,新产品的开发就至关快,下降投资,缺点就是当新产品需求改变大时,核心资源库不够,就十分麻烦。

综上:革命方式比演化方式更节省投资,更省时间,但只适用于需求明确且变更不大,否则风险 很大。

7.3.1 成功因素

下列四个方面决定企业创建产品线是否成功:
对该领域具有长期和深厚的经验; -一个用于构件产品的好的核心资源库;好的产品线架构;好的 管理(软件资源、人员组织、过程)支持。

八 中间件技术

中间件是一种独立的系统软件或服务程序,能够帮助分布式应用软件在不一样的技术之间共享资源。

image.png

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基础设施定义了四种构件标准。

  1. 实体(Entity) 构件须要长期持久化并主要用于事务性行为,由容器管理其持久化。
  2. 加工(Process) 构件一样须要容器管理其持久化,但没有客户端可访问的键。
  3. 会话(Session)构件不须要容器管理其持久化,其状态信息必须由构件自已管理。
  4. 服务(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服务器;

  • 企业信息系统层对应数据存储服务器。

image.png

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类绑定在一块儿的。

image.png

表示层由Structs实现,管理用户请求;业务层由Spring实现,处理业务逻辑中的业务处理状况,提供一个控制器的代码;数据库层由Hibernate实现,经过面向对象的查询语言HQL来实现数据的增删改查。这样组合能够搭建一个轻量级的J2EE架构。

8.3.3 重量级与轻量级之争

  重量级框架占用资源过多,在开发的过程当中效率很低;大部分时间花在配置、运行的过程上,修改复杂;单元测试也比较麻烦。但在大量运行过程当中会表现出优异的效果,也即开发麻烦,运行性能高。

  轻量级框架提升了开发的速度;当即能够看到结果;作单元测试很是简单;大量线程可供参考的开源代码。开发简单,但运行性能低。

8.4 典型的应用架构-.NET

.NET框架处于操做系统和.NET应用语言之间,只适用于微软系统,而J2EE支持跨平台,任何安装了JVM的平台。

image.png

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服务器分离

image.png

9.1.3 应用服务器集群

系统演变到这里,将会出现问题:
用户的请求由谁来转发到具体的应用服务器;
用户若是每次访问到的服务器不-同样,那么如何维护session的一致性。

9.2 负载均衡技术

相关文章
相关标签/搜索