首页 > 精品范文库 > 12号文库
软件架构设计方法理论
编辑:烟雨迷离 识别码:21-1129320 12号文库 发布时间: 2024-09-06 22:11:50 来源:网络

第一篇:软件架构设计方法理论

1.软件架构概述

1.1 什么是软件架构

◎ 软件架构的概念很混乱。如果你问五个不同的人,可能会得到五种不同的答案。◎ 软件架构概念主要分为两大流派:

组成派:软件架构 = 组件 + 交互。

决策派:软件架构 = 重要决策集。◎ 组成派和决策派的概念相辅相成。

1.2 软件架构和子系统、框架之间的关系 ◎ 复杂性是层次化的。

◎ 好的架构设计必须把变化点错落有致地封装到软件系统的不同部分(即关注点分离)。

通过关注点分离,达到“系统中的一部分发生了变化,不会影响其他部分”的目标。◎ 软件单元的粒度:

* 粒度最小的单元通常是“类”。* 几个类紧密协作形成“模块”。

* 完成相对独立的功能的多个模块构成了“子系统”。

* 多个子系统相互配合才能满足一个完整应用的需求,从而构成了软件“系统”。* 一个大型企业往往使用多套系统,多套系统通过互操作形成“集成系统”。

◎ 软件单元的粒度是相对的。同一个软件单元,在不同场景下我们会以不同的粒度看待它。◎ 架构(Architecture)不等于框架(Framework)。

框架只是一种特殊的软件,框架也有架构。

◎ 可以通过架构框架化达到“架构重用”的目的,如很多人都在用 Spring 框架提供的控制反转和依赖注入来构建自己的架构。

1.3 软件架构的作用

◎ 如果一个项目的系统架构(包括理论基础)尚未确定,就不应该进行此系统的全面开发。--Barry Boehm,《Engineering Context》

◎ 一个缺陷充斥的系统,将始终是一个缺陷充斥的系统。--Timothy C.Lethbridge,《面向对象软件工程》 ◎ 软件架构设计为什么这么难?

因为它是跨越现实世界与计算机世界之间鸿沟的一座桥。

软件架构设计要完成从面向业务到面向技术的转换,在鸿沟上架起一座桥梁。

需求-> 架构设计-> 软件架构-> 系统开发-> 软件系统 ~~~~~~~~ ~~~~~~~~ ◎ 软件架构对新产品开发的作用: * 上承业务目标。* 下接技术决策。* 控制复杂性。

先进行架构设计,后进行详细设计和编码实现,符合“基于问题深度分而治之”的理念。* 组织开发。

1/8 软件架构方案在小组中间扮演了“桥梁”和“合作契约”的作用。* 利于迭代开发和增量交付。

以架构为中心进行开发,为增量交付提供了良好的基础。在架构经过验证之后,可以

专注于功能的增量提交。* 提高质量。

◎ 软件架构对软件产品线开发的作用: * 固化核心知识; * 提供可重用资产; * 缩短推出产品的周期; * 降低开发和维护成本; * 提高产品质量; * 支持批量定制。

◎ 软件产品线:指具有一组可管理的、公共特性的、软件密集性系统的集合,这些系统满足特定的市场需求或任务需求,并且按照预定义方式从一个公共的核心资产集开发得到。软件产品线架构:针对一个公司或组织内的一系列产品而设计的通用架构。

2.软件架构设计方法

2.1 软件架构为谁而设计

◎ 架构师应当为项目相关的不同角色而设计:

* 架构师要为客户负责,满足他们的业务目标和约束条件。

* 架构师要为用户负责,满足他们关心的功能需求和运行期质量属性。* 架构师必须顾及处于协作分工“下游”的开发人员。

* 架构师必须考虑“周边”的管理人员,为他们进行分工管理、协调控制和评估监控等工作提供清晰的基础。

2.2 五视图法

◎ 什么是软件架构视图?

软件架构视图是对于从某一视角看到的系统所作的简化描述,描述中涵盖了系统的某一

特定方面,而省略了与此无关的其他方面。

◎ 软件架构要涵盖的内容和决策太多了,超过了人脑“一蹴而就”的能力范围,因此宜采

用“分而治之”的办法。即通过不同的视图来描述架构。◎ 软件架构的五视图法: * 逻辑架构

逻辑架构关注功能。其设计着重考虑功能需求。* 开发架构

开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性和易测试性等。* 运行架构

运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。

其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可用性和安全性等。* 物理架构

2/8 物理架构关注软件系统最终如何安装或部署到物理机器。其设计着重考虑“安装和

部署需求”。* 数据架构

数据架构关注持久化数据的存储方案。其设计着重考虑“数据需求”。

2.3 从概念性架构到实际架构

◎ 少就是多(Less is more.)。--密斯·凡德罗 ◎ 概念性架构是对系统设计的最初构想。

◎ 一般来说,实际的软件架构设计过程是,先进行概念性架构的设计,把最关键的设计

要素和交互机制确定下来,然后再考虑具体技术的运用,设计出实际架构。

2.4 架构设计中的关键要素及解决策略 ◎ 策略是制胜的关键。

--张明正,《挡不住的趋势》

◎ 最好的软件开发人员都知道一个秘密:美的东西比丑的东西创建起来更廉价,也更快捷。--Robert C.Martin, 《软件之美》 ◎ 时间就是系统架构的生命。--Philippe Kruchten ◎ 方法产生于恐惧。

◎ 面对时间紧迫的压力,我们有理由质疑那种不顾时间花销、一味追求软件架构高质量的做法。软件架构是软件系统质量的核心,必须足够重视,但在不适当的时候“用时间换

完美”会毁掉整个项目。

◎ 架构设计并非“好的就是成功的”,而是“适合的才是成功的”。◎ 软件架构设计中的关键要素及解决策略:

关键要素 策略

----------------------1.是否遗漏了至关重要的非功能需求? 全面认识需求。2.能否驯服数量巨大且频繁变化的需求? 关键需求决定架构。3.能否从容地设计软件架构的不同方面? 多视图探寻架构。4.是否及早验证架构方案并作出了调整? 及早验证架构。

2.5 软件架构要设计到什么程度

◎ 软件系统的架构涵盖了整个系统,尽管架构的有些部分可能只有“一寸深”。--Ivar Jacobson, 《统一软件开发过程之路》 ◎ 软件架构是团队开发的基础。◎ 软件架构要设计到什么程度?

* 由于项目的不同、开发团队情况的不同,软件架构的设计程度会有不同。* 软件架构应当为开发人员提供足够的指导和限制。◎ 高来高去式架构设计的症状: * 缺失重要架构视图。

遗漏了某些重要视图,从而遗漏了对团队某些角色的指导。* 浅尝辄止、不够深入。

将重大技术风险遗留到后续开发中。* 名不副实的分层架构。

3/8 对各层之间交互接口和交互机制的设计严重不足。

3.软件架构设计过程

3.1 软件架构设计过程总览 ◎ 一般的软件过程:

概念化阶段-> 分析阶段-> 架构设计阶段-> 并行开发与测试阶段-> 验收与交付阶段

──┬── ──┬─ ───┬── ────┬──── ───┬───

↓ ↓ ↓ ↓ ↓

愿景 需求 架构 可执行系统 交付的系统

◎ 软件架构设计过程:

需求分析-> 领域建模-> 确定关键需求-> 概念性架构设计-> 细化架构-> 验证架构

│ │ └──────┬──────┘ └────┬───┘

│ │ 概念性架构 实际架构

└───┬────┘ └───────┬──────┘

分析阶段 架构设计阶段

3.2 需求分析

3.2.1 几个概念

◎ 需求捕获 vs 需求分析 vs 系统分析

* 需求捕获是获取知识的过程,知识从无到有。

* 需求分析是挖掘和整理知识的过程,它在已掌握知识的基础上进行。

* 系统分析?如果说需求分析致力于“做什么”,那么系统分析则涉及“怎么做”。

3.2.2 架构师必须掌握的需求知识

◎ 软件架构师不必是需求捕获专家,也不必是编写《软件需求规格说明书》的专家。

但他一定应在需求分类、需求折衷和需求变更的研究方面是专家,否则他和其他

软件架构师相比,就输在了“起跑线”上。◎ 软件需求的类型

┌ 功能需求 ┌ 运行期质量属性

软件需求 ┤ ┌ 质量属性 ┤

└ 非功能需求 ┤ └ 开发期质量属性

└ 约束

◎ 软件质量属性分类方式

运行期质量属性 * 性能(Performance)* 安全性(Security)* 易用性(Usability)

4/8 * 持续可用性(Availability)* 可伸缩性(Scalability)* 互操作性(Interoperability)* 可靠性(Reliability)* 鲁棒性(Robustness)

开发期质量属性

* 易理解性(Understandability)* 可扩展性(Extensibility)* 可重用性(Reusability)* 可测试行(Testability)* 可维护性(Maintainability)* 可移植性(Portability)

3.3 领域建模

◎ 就像《高效能人士的七个习惯》提到的“有内而外全面造就自己”的观点一样,对待软件开发,要具备“有内而外造就软件”的理念。◎ 想让软件系统随需应变吗?请给软件一个支持变化的“心”。◎ 什么是领域模型?

领域模型是对实际问题领域的抽象表示,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。

◎ 领域建模和需求分析活动是相互伴随、互相支持、交叠演进的。◎ 领域模型对软件架构乃至整个软件系统开发工作的作用: * 探索复杂问题、固化领域知识; * 决定功能范围、影响可扩展性; * 提供交流基础、促进有效沟通。

3.4 确定关键需求

◎ 功能、质量和商业需求的某个集合“塑造”了架构。--Len Bass, 《软件架构实践(第2版)》 ◎ 关键需求决定架构,其余需求验证架构。◎ 什么是对软件架构关键的需求? * 关键的功能需求。* 关键的质量属性需求。* 关键的商业需求。◎ 如何确定关键需求?

┌> 确定关键功能需求 ┐

●-> 全面整理需求-> 分析约束性需求 ┤ ├> ●

└> 确定关键质量属性需求 ┘

3.5 概念性架构设计

◎ 概念性架构设计的步骤(这三个步骤以迭代方式进行):

5/8 1.鲁棒性分析; 2.引入架构模式; 3.质量属性分析。

3.5.1 鲁棒性分析

◎ 所谓鲁棒性分析是这样一种方法:通过分析用例规约中的事件流,识别出实现用例规定的功能所需的主要对象及其职责,形成以职责模型为主的初步设计。

◎ 鲁棒性分析是从功能需求向设计方案过度的第一步,所获得的初步设计是一种理想化的职责模型,它的重点是识别组成软件系统的高级职责块、规划它们之间的关系。◎ 鲁棒性分析填补了分析和设计之间的鸿沟。

◎ 鲁棒图包含三种元素:边界对象、控制对象和实体对象。(见书P196)

3.5.2 引入架构模式

◎ 较为经典的几种架构模式:

分层、MVC、微内核、基于元模型的架构、管道-过滤器。◎ 关于架构模式的几点说明: * 分层

避免名不副实的分层架构,即对各层之间交互接口和交互机制的设计严重不足。* 微内核

缺点:设计和实现的复杂性;性能较低。

优点:扩展性强,可移植性强,软件系统的生命周期长。

3.5.3 质量属性分析

◎ “属性-场景-决策”表方法。举例如下:

┌────┬─────────┬─────────────────────┐

│属性 │场景 │决策 │

├────┼─────────┼─────────────────────┤

│可扩展性│数据库类型可替换 │建立数据库存取层 │

├────┼─────────┼─────────────────────┤

│ │允许加载第三方模块│采用插件机制 │

├────┼─────────┼─────────────────────┤

│...│...│...│

└────┴─────────┴─────────────────────┘

3.6 细化架构设计

◎ 架构细化工作主要体现在基于五视图方法进行架构细化:

约束

┌───────┐

领域模型-> │基于五视图方法│

关键需求-> │ │-> 架构方案

6/8 概念架构-> │ 进行架构细化 │

└───────┘

经验

◎ 架构细化设计的工作内容:

┌───────┬──────────────────────────┐

│ 架构设计视图 │ 设计任务 │

├───────┼──────────────────────────┤

│ 逻辑架构 │ 细化功能单元; │

│ │ 发现通用机制; │

│ │ 细化领域模型; │

│ │ 确定子系统接口和交互机制。│

├───────┼──────────────────────────┤

│ 开发架构 │ 确定要开发或直接利用的程序包之间的依赖关系; │

│ │ 确定采用的技术; │

│ │ 确定采用的框架等。│

├───────┼──────────────────────────┤

│ 数据架构 │ 持久化数据存储方案; │

│ │ 数据传递、数据复制、数据同步等策略(可选)。│

├───────┼──────────────────────────┤

│ 运行架构 │ 确定引入哪些进程与线程; │

│ │ 确定主动对象、被动对象,以及控制关系; │

│ │ 处理进程线程的创建、销毁、通信机制、资源争用等; │

│ │ 协议设计。│

├───────┼──────────────────────────┤

│ 物理架构 │ 确定物理配置方案; │

│ │ 确定如何将目标程序映射到物理节点。│

└───────┴──────────────────────────┘

◎ 逻辑架构设计中,“发现通用机制”是应被特别强调的。

机制(Mechanism)是模式的实例。机制是特定上下文中重复出现的问题的特定解决方案。

具有良好架构的系统具备概念完整性。它通过对系统架构建立一种清晰的认识来发现通用的抽象和机制。利用这种共性使最终产生的系统结构更为简单。

3.7 实现并验证软件架构

◎ 好的策略必须是一再求证、测试、发现瑕疵漏洞,另想途径或方法来弥补策略不足,有时

甚至得全盘放弃,重新策划。--张明正,《挡不住的趋势》

◎ 架构原型对功能性需求的实现非常有限,那么“架构验证”要验证什么?

答案是要验证架构对质量属性需求的支持程度,包括运行期质量属性和开发期质量属性。

7/8 ◎ 验证架构的两种方法: * 原型法。

对于项目型开发,常采用“原型法”。即对一组架构设计决策在非功能需求方面的满足

程度进行验证。该原型往往是演进型,而非抛弃型。* 框架法。

对于产品型开发,采用“框架法”有更多优点。该方法将架构设计方案用框架的形式实现,并在此基础上进行评估验证。在框架实现后,在框架基础上实现部分应用的功能,即实现

一个小的垂直原型,从而进行实际非功能测试和开发期质量属性评价。

8/8

第二篇:高可用性软件架构设计和实现论文

摘要:硬件冗余可以极大地提高计算机应用系统的可用性,然而,一旦关键硬件出现故障或数据库宕机,正在进行中的业务流程通常会中断。探讨了一种如何实现应用系统高可用性的软件架构的设计方案,以弥补纯硬件冗余应用系统的不足。

关键词:高可用性;软件容错;分布式数据库

在业内,计算机应用系统的可用性定义为计算机应用系统保持正常运行时间的百分比,通常用表1所示的“9”的个数来划分可用性的类型。

通常,硬件冗余(容错计算机、双机或多机集群、磁盘阵列、SAN等)、数据复制、合理的灾难备份和恢复策略都可以极大地提高计算机应用系统的可用性。正因为如此,当前,对于计算机应用系统的高可用性、业务的可持续性要求,业内通常以硬件系统的高可用性来应对或代替。常见的解决方案是双机(或多机)集群方案或直接采用容错计算机来保障系统的高可用性,应用软件的设计和开发往往仅注重业务流程的分析和过程控制。在这种完全依赖硬件来保障整个系统的可用性的系统里,一旦关键硬件出现故障或数据库宕机,正在进行中的业务流程(如需较长执行时间的事务处理、后台批处理过程等)必然会中断,这是因为双机切换也需要时间。对此,应用软件本身并无多少作为,该类业务必须等待系统重新恢复后全部或部分重做。

本文以基于大型数据库的应用系统为例,从“软件容错”设计的概念出发,参考“分布式”数据库结构设计,以“系统服务总线”为核心,给出了一种可行的高可用性软件架构的设计方案,可以极大地提高应用软件的可用性和业务系统的可持续性。无论是传统的C/S架构,还是近年来流行的B/S架构,本文中给出的设计方案都有一定的参考意义。

1软件结构模型

任何基于大型数据库的应用系统,都可以抽象为对数据的“读”和“写”操作。至于客户端如何展现“读”到的数据,以及“客户端”与“服务端”基于何种通信协议通信,不在本文讨论之列。

软件结构的设计其实就是针对“读”和“写”的一系列流程的设计。如何最大限度地保证系统中的所有“硬件”和“软件”协同工作,正确完成每一次“读”和“写”的操作,也就是对系统“高可靠性”和“高可用性”的要求。

图1是基于“软件容错”和“分布式数据库系统”的原理,并参照了计算机“总线”的工作原理给出的一种基于分布式数据库或文件系统的高可用性的软件架构设计方案。系统采用3层架构:客户端、中间应用层和数据库层。

2系统设计

2.1数据库配置为了更清楚地阐述本文的设计方案,先对数据库的配置及其功能进行描述。本系统中,数据库按角色可划分为如下三类数据库:控制数据库(COTROLL DB)、日志数据库(LOG DB)、业务数据库(BUS DB_N)。

2.1.1控制数据库

控制数据库也可以是一个或多个系统控制(参数)文件。它存放要访问的目标数据库的节点(N)、端口、用户、文件头、表、视图等信息;存放对节点、业务数据库、表或视图的授权或访问控制信息;目标数据库(或文件)的当前状态(联机/脱机、忙/空闲等);目标数据库中的表或视图的当前状态(联机/脱机、忙/空闲、加锁/解锁等)。

2.1.2日志数据库

日志数据库独立于业务数据库之外,用于记录客户端节点信息、请求时刻和发来的所有请求的原始内容,但不做业务流程相关的处理、运算等。记录每次数据操作分配的唯一的“事件号”(EVENT_ID)。对每一次客户端的“请求”,“系统服务总线”(SYSSRV)会分配唯一的标识符号,可以定义为有一定意义的字符串,比如,“当前时刻+流水号”。以上信息可以被压缩、打包、加密后存放,以记录格式保存于数据库的表或文件中。它可以设计为数据库中的一个或多个表,也可以是文件格式。

2.1.3业务数据库

业务数据库记录所有业务相关的数据信息。所有业务数据库的相关业务逻辑的数据结构相同,即,N个节点的业务数据库中与业务模式相关的表、视图、过程或其他程序设置相同。

需要特别指出的是:

(1)控制数据库、日志数据库和业务数据库可以是不同数据库厂家或品牌的产品。比如,日志数据库可以采用低端的数据库产品或开源数据库系统,业务数据库可以采用高端的大型数据库产品。

(2)控制数据库、日志数据库和业务数据库在物理上和逻辑上是可以相互隔离的,这可以极大地提高系统的整体安全性。目标数据库和要访问的表或视图对客户端来说是“不可见”的,由控制数据库动态定义和控制。

(3)所有类别的数据库在物理上位于一个或多个节点上,即节点N>=1;任意一个节点N上建有一个或多个业务数据库(逻辑数据库>=1);任意一个节点是一个完整的、可独立工作的计算机。根据性能要求,可以是高性能PC机、PC服务器、小型机、集群或超级计算机,或是它们的“混合体”;任意一个节点是指定网络中的一个指定节点。

2.2应用层设计

中间应用层由5个后台进程构成:(1)系统服务总线(SYSSRV);(2)数据库写进程(DBWRT_N);(3)数据库读进程(DBRED_N);(4)数据库在线恢复进程(DBRCY);(5)日志检查进程(LOGCHK)。

2.2.1系统服务总线

这是一个后台监听、分发、调度总进程。设计目标具有一定的“自我修复”和“自我复制”动能。它可以根据负载情况,自我复制或开启子进程响应新的负载;可以动态配置可服务的节点或客户端;可以为特定节点或客户端指定专用进程;它通过“DBWRT”和“DBRED”“读/写”日志数据库或日志文件。

2.2.2写进程

写进程负责向所有节点写数据。它可以配置成多进程/单进程模式;多进程模式,指对应每个业务数据库N都有独立的“写”进程;单进程模式,指对应多个业务数据库只有一个主进程,主进程开启多个线程提供“写”服务。

2.2.3读进程

读进程负责向所有节点读数据,它可以配置成多进程/单进程模式。多进程模式指对应每个业务数据库N都有独立的“读”进程,单进程模式指对应多个业务数据库只有一个主进程,主进程开启多个线程提供“读”服务。

根据需要,读进程可以配置成:向所有在线节点并发读数据,返回最快的结果集,抛弃其他的结果集,并中断其他读进程;也可以配置成:随机读某个节点的数据,如果失败或超时,则再随机读余下的在线节点,直到“读”成功或失败;还可以配置成向所有节点顺序读数据,过程类似上面“随机读”。

以上“读写”业务数据库的进程,设计上支持多种数据库访问接口,针对“表”或“视图”提供统一格式的、标准的、动态的SQL数据操作接口和方法,完成对数据库中表或视图的增、删、改、查和批处理操作。它们可以设计为数据库中的存储过程,也可以是C++,Java程序的API或混合体。

2.2.4数据库在线恢复进程

该进程负责检查全部或部分节点数据库(包括所有授权控制数据库、业务数据库和日志数据库)或文件的工作状态;检查数据库或文件表中数据的一致性;将以上检查结果写入日志数据库(或日志文件)。

当某个业务数据库中的表写入失败时,它负责从“日志数据库”的表或日志文件中读出原始数据,接着写入出现问题的业务数据库的表中,并检查结果。或从其他节点的数据库中读相关数据并写入到出现问题的业务数据库的表中。

接收外部命令,根据“时间点”或“事件号”从特定时刻、特定数据库(包括日志数据库)、特定表恢复数据到特定目标数据库的表或文件。

2.2.5日志检查进程

该进程负责读、写日志文件,检查数据操作结果的一致性。如果不一致,则报告给“系统服务总线”,将问题数据库或数据库中的表、视图设置为“离线”状态。

3系统实现

3.1系统初始化启动配置好的后台进程即完成系统初始化过程。

3.2数据“写”流程

数据“写”流程的主要步骤如下:(1)客户端通过给定协议(或混合多种通信协议)向后台“系统服务总线”发送“写”请求。

(2)激活“数据库写进程”,将客户端的“请求”写入“日志数据库”(或日志文件),并分配一个唯一的“事件号”。

(3)“系统服务总线”查询“授权/控制数据库”(或/配置文件)得到客户端请求访问的数据存放的目标数据库(或文件)节点N(或文件存放的节点N)、端口、用户、表、文件头等信息。节点N可以是多个,即节点N>=1。

(4)“系统服务总线”向N个“数据库写进程”发送数据“写”访问请求,并得到各节点的返回结果集。

(5)只要有1个节点写入成功,“系统服务总线”就将写入成功的标志发回客户端;“数据库写进程”将各节点的返回结果状态写入“日志数据库”(或日志文件)中。

(6)“日志监控”查询“日志数据库”(或日志文件),比较N个节点的写入状态。如发现写错误、失败、超时等状态,则将该“业务数据库”(或文件、表、视图)标志为“非正常联机数据库”(或文件、表、视图不可用)。

(7)激活“数据在线恢复进程”,进程为“非正常联机数据库”,则执行数据库数据“同步”。在线同步恢复如失败,则将该“数据库”标志为“需要DBA维护”的类别,留待DBA或软件维护工程师处理。

3.3数据“读”流程

数据“读”流程的主要步骤如下:(1)客户端通过给定协议(或混合多种通信协议)向后台“系统服务总线”发送“读”请求。

(2)激活“写进程”,将客户端的“请求”写入“日志数据库”(或日志文件),并分配一个唯一的“事件号”。

(3)“系统服务总线”查询“授权/控制数据库”(或/配置文件)得到客户端请求访问的数据存放的目标数据库节点N(或文件存放的节点N)、端口、用户、表等信息。

节点N可以是多点,即节点N>=1。

(4)“系统服务总线”查询“授权/控制数据库”(或/配置文件)得到可用的、空闲的目标数据库节点N(或文件存放的节点N)。

(5)激活“读进程”(或随机、或顺序)向N个节点的“业务数据库”(或文件)发送数据“读”访问请求,并得到各节点的返回结果集。

(6)“系统服务总线”将最快返回的结果集发回客户端;抛弃其他结果集,中断其他读进程。

在本系统的设计和实现中,由于采用了“分布式”数据库或文件系统部署,只要N个节点中至少有一个节点的“业务数据库”正常工作,因为一个或几个“业务数据库”系统(或节点硬件)故障所引起的业务系统的不可持续性理论上将可以完全避免,因而提高了系统的“容错”性。

由于N个数据库同时在线,且节点是否可用、空闲等状态可实时监控,这为特定业务快速访问和独享访问提供了先决条件。如可以指定某特定“业务数据库”仅为某个或几个特定客户端服务提供“读”访问。

因为设计了统一、标准的增、删、改、查的过程方法或API,前端开发人员甚至不必写任何SQL语句就可以完成对数据库中表或视图的操作,可以大大地缩短编程和调试时间。

需要指出的是,虽然“系统服务总线”具有“自我修复”和“自我复制”的特点,但因为“节点”硬件故障或“授权/控制数据库”(或/配置文件)或“日志数据库”故障而引起的全系统不可用依然存在,因此,建议该节点采用性能好、可靠性高的中、高端服务器。

第三篇:软件架构设计师岗位职责

1.负责公司产品平台、数据库、接口和应用架构设计,理解和分析客户的业务需求,保证系统设计合理,满足业务发展的需求。

2.负责将业务需求规范转换为详细的方案设计和实现设计。

3.领导和培训软件工程师按照架构设计和技术规范展开设计、开发和测试工作。

4.负责解决开发部员工的疑难问题。

5.负责领导开发人员进行底层设计。

第四篇:游戏架构设计

浅谈游戏策划的前期工作

班级:09数字媒体技术姓名:廖伟民学号:090804006

摘要:游戏制作所涉及的知识领域极其广泛,其中就单其游戏策划这一块就涉及到三大内容:前期的准备工作、中期的制作工作、后期的宣传工作。因此作为个人没时间也不可能对每一区域都了解。在这篇文章当中我将针对游戏策划当中的前期准备进行说明,并发表自己的看法。

关键字:可行性、调研、工作计划、草案

引言:不少人认为游戏策划就是写个精彩的故事出几个好点子,如果事情如此简单那不是每个人都可以做策划?由于国内的游戏制作业刚刚起步,既缺乏系统的专业理论指导,又缺乏实战经验,以至大多数玩家甚至一些游戏制作公司在对待策划这个问题上都明显存在不少误区[1]。其实每一个游戏的策划都要经历很多步骤和过程,就游戏策划的前期准备工作当中就包含了对技术、经济、人力资源这三点的可行性分析,市场调研,确定工作计划以及撰写策划草案这四个步骤,下面我将对其一一经行分析。

一、可行性分析

一个游戏从一个想法到成为产品需要经历太多的磨难,合格的策划应该在一开始就知道这个想法能否行的通,在经过了严格的论证并初步产生了产品的轮廓后,才能把自己的想法提出来。这也是一个游戏能否可行的一个自我论证过程,这其中包括以下几个部分:

1、技术可行性分析:

从技术上来考虑,你的想法是否能够实现呢?一个想法产生后,你就要知道你要把它做成什么样的游戏,大概需要哪些技术支持。这一般都会受项目组或者游戏开发公司自身的技术实力的影响,因为一个新的创意往往会牵扯到大量的技术性创新,如果你的想法按照现有的技术能力根本就无法达到或者会超出项目预算,那肯定会被枪毙的。只有那些在现有技术基础上进行升级和发展,或者在现有条件下能够进行技术突破而达到要求的创意才是符合要求的。比如,做一个网络游戏,你要让200个人能够在一个屏幕内同时PK就算是程序上能够实现,现有的网络条件也不支持,所以这种想法就属于技术上不可行的[2]。因为策划受到技术本身的影响,所以要求游戏策划对游戏中可能使用到的技术有个大致的了解。策划必须及时和主程序沟通,并多接触一些前沿的技术,这样才可以跟上时代的潮流,并不断提出符合拮术要求的创意来!

2、经济可行性分析:

一个游戏的实现,如果不考虑到要花多少费用,多少时间和多少人,不计算能够回收多少资金就不是一个好的项目负责人。一个新想法如果不经过项目负责人的决策是不可能立项的。所以,在进行游戏设计的过程中,一定要把项目的规模和市场效果考虑进去,否则也是会很容易被枪毙的。游戏再好,不适合市场的需要也是白搭,而且公司也有自己的市场战略,所以大多数的策划被枪毙都是这些原因所造成的。

什么样的游戏可以引起玩家的兴趣,哪些游戏可以挣到钱,这是所有的游戏制作者都在努力寻找的。也只有市场才可以决定那些游戏是成功的,对于策划人

员来讲,经常注意游戏市场的动向和海内外游戏的发展趋势才是正确的道路[3]。如何选择一个适合潮流的游戏点来展开想象是获得一个有价值创意的关键[4]!

3、人力资源分析:

在进行了技术和经济上的考虑后,还要看你自己周围的人力情况是否允许你这样设计。因为资源并不是你想获得就可以得到的,而资源中最重要的就是人。有经验的开发者本身就是一笔巨大的财富,如果你有一些很棒的同志一起来做开发,那么你的设计就可以很快被别人所接受,他们也可以给你很多建议来完善你的想法。甚至于你在产生了这个想法之后,马上就要考虑谁可以完成这个工作,你有多少人可以完成这个工作。如果只有几个刚毕业的有志青年,希望你开始不要去设计那些过于复杂的东西,就算你设计的再完善,最后因为人的原因而做不出来也是不管用的。

上面的三种情况是最容易被忽视的因素,还不是要考虑的全部。其实一个有经验的策划在刚开始有想法的时候就应该把大部分可能发生的问题都预测到,这样才可以保证这个项目有存在下去的必要和价值。而一个刚入门或者准备入门的新手,也最容易忽略上面三个因素。可能由于自身条件的限制,你对技术并不是很熟悉甚至是门外汉,那么你就一定要找一个做程序或者有经验的策划询问一下你的想法是否可行。如果有了一个念头就一头扎进去,最后的结果很可能是浪费了精力和时间,却一无所获。

你可以把自己的可行性分析过程记录并整理出来,这就是你的可行性设计文档,也是整个策划中一个很重要步骤。有了这份文档,程序就知道这个东西要实现什么,自己要做什么样的技术准备;部门负责人就可以估算大概需要多少费用来开发,开发周期大概有多长;人事部门就知道还要招聘什么样的人才能满足项目的需要。如果这些文档根本经不起推敲或者你自己都认为不可行,那就最好换个想法或者继续修改。越早发现问题就能够避免更大的损失,想成为一个策划就要从全局的角度来看问题。如果只是想做一个执行策划或者脚本设计就可以忽略这部分,因为你要干的事情就只是听从主策划的任务分配并按时完成工作就可以了。而你想成为一名合格的主策划或者项目管理者,那么可行性分析就是你要掌握的第一个重要步骤。

二、市场调研

如果将市场调研细分的话可以大致分为三个部分:

1对现有游戏作品的调研

2对用户需求的调研

3对游戏产品时效性的调研

1、对现有游戏作品的调研

对现有作品的调研可避免新策划的作品有”跟风”之嫌,特别是国内的游戏产业,由于技术水准和国外相比还有比较大的差距,如果一味地跟着别人跑,没有什么新的突破,那么这种作品想获得玩家的认可是相当困难的,2、对用户需求的调研

对游戏玩家的需求以及其游戏心理的分析使策划人员可以了解当前游戏作品的流行趋势,游戏玩家的兴趣指向和游戏动机以避免策划的盲目性.3、游戏产品时效性的调研

有一个很重要但又容易被忽视的问题,这就是游戏产品的时效性。一个游戏作品的制作周期比较长,短则一年半载,长则一年两年。但一个游戏的销售期却

非常短,特别是在国内,国内一个游戏作品的销售时间通常只有两个月时间,很难突破三个月。也就是说,在这两个多月的时间里你就可以得知你的人力、时间和资金的投入是否得到了回报。

所以,在开发一个新产品进行市场调研时一定要考虑一个提前量。首先确定自己的产品上市时间,然后根据调查研究的结果判断自己的产品上市时是否会受到其它作品的冲击,用户群是否会因为技术的更新、新作品的上市而转移,等等。

三、确定工作计划

在看完上面的市场调研报告后,估计对游戏策划有兴趣的朋友对市场调研所要做的工作和涉及内容应该有一定了解和认识。

策划人员通过市场调研对当前游戏市场有一个充分认识后就要开始确定工作计划的安排。工作计划中的主要内容是人员配备和工作日程表[5]。

根据游戏容量的大小确定参与制作的人员结构,既要在预计的时间内完成任务,又要在整个制作过程中没有人员闲置,安排是否得当取决于策划的经验和预测。

在不同的游戏种类中,制作组的各部门人员比例是不一样的。如RPG游戏,美工工作量较大,文字工作量较大,那么就应该在美术方面多加人手,可以专门安排一个人做文字方面的工作;战略类游戏美术工作量相对较小,但数据量大,结构复杂,调整困难,靠策划一个人难以胜任,那么就应该安排人员协助策划做数据设定方面的工作。

由于在游戏制作的后期就要开始做宣传、销售方面的工作,所以工作日日程表一定要比较准确,误差不能太大。日程安排过松,会导致工作效率降低,从而增加开发成本;日程安排过紧,在预定的时间内不能完成制作,将使宣传和销售处于非常不利的境地,直接影响回报率。

工作计划中至少应包括以下几个部分:

1游戏的主要指标;

2各部门工作量预算;

3制作时间预算;

4资金预算;

5进度表。

在进行充分的市场调研后并确定了工作计划的同时策划人员就可以开始撰写策划草案。

四、撰写策划草案

策划草案相当于工程师的蓝图,实际上就是策划将大脑中的游戏雏形用文字表达出来,以书面形式转告制作组的其它部门,作为其它部门在制作过程中的指导书。

策划草案不要求很详细,基本上不考虑细节方面的东西,但要求它很稳定,一旦生成不得随意修改,所以撰写策划书时一定要和其它部门沟通,以确保策划案草案切实可行。特别是关于技术方面的,不能脱离技术人员的能力范围之外,如果到时候技术方面不能达到策划草案中的要求,后果很可能是整个制作组的人员在某一段时间内的工作都白干了。

不同的游戏种类的策划草案的撰写会有一些差异,但下列项目是每一份策划

草案中都必须明确规定的:

1、类型(结构);

2、解析度;

3、操作系统;

4、故事背景;

5,容量(关数);

6、游戏进程

7、预定发行的时间

8、适合什么样的年龄层

9、游戏主要构成画面草图.当然,随着技术的发展,游戏的容量越来越大,内涵越来越多,以至某些游戏己经很难用某一种类型来定义它。如有些战略游戏,却包含有许多角色扮演的成分;许多角色扮演类游戏,却又包含有养成的成分,等等.在这种情况下,要给一个尚未诞生的游戏确定一种现成的类型是比较困难的。通常我们可以提出一个大致方案,然后在这个方案之上构思新的创意,最后形成一种新的模式,这种模式和现有的作品相比应该有所突破。所谓的游戏类型,可以看作是诸多模式的组合。

五、结束语

总之,游戏制作所涉及的知识领域极其广泛,其中就单其游戏策划这一块就涉及到三大内容:前期的准备工作、中期的制作工作、后期的宣传工作。因此,游戏策划并不是不少人认为的写个精彩的故事出几个好点子如此简单,一个游戏从一个想法到成为产品需要经历太多的磨难,合格的策划应该在一开始就知道这个想法能否行的通,在经过了严格的论证并初步产生了产品的轮廓后,才能把自己的想法提出来。所以,游戏策划的前期准备工作对于一个好的游戏来说是相当重要的。

参考文献

[l]《游戏的剧情系统》作者:李兰云西山居游戏工作室

[2]《脚本语言浅介》来源:标点工作室http://bj.netease.com.[3]《游戏引擎演化史》来源:http://

[4]《游戏引擎剖析》作者:Jake Simpson译者:向海

[5]《游戏引擎基础原理》作者:Dave Astle译者:sunlxy

第五篇:企业软件架构期末考试重点教案

1.将系统按照层次分解的好处与缺陷?

答:好处:1>在无需过多了解其它层次的基础上,可以将某一层作为一个有机整体来理解。

2>可以替换某层的具体实现,只要前后提供的服务相同即可。3>可以将层次间的依赖性降到最低。4>分层有利于标准化的工作。

5>一旦构建好了某一层次,就可以用它为很多上层服务提供支持。缺陷:1>层次并不能封装所有东西。2>过多的层次会影响性能。2.三个基本层次的职责是什么?

答:表现层:提供服务,显示信息(例如在windows或HTML页面中,处理用户请求(鼠标点击,键盘敲击等),HTTP请求,命令行调用,批处理API)

领域层:逻辑,系统中真正的核心。

数据源层:与数据库,消息系统,事务管理器及其他软件包通信。3.对不同的领域逻辑组织方式,领域逻辑的复杂度与工作量之间的关系示意图。答:

4.单表继承的优点:

1>在数据库中只需要关注一个表。2>获取数据时不必进行连接操作。

3>任何对继承层次的重构(比如将一个域上移至超类或下移至子类)都不需要修改数据库。

5、面向对象的高级准则:

1)、单一职责原则。就一个类而言,应该仅有一个引起它变化的原因;

2)、里氏替换原则。子类必须能够替换掉他们的基类; 3)、依赖倒置原则。要依赖于抽象,不要依赖于具体; 4)、迪米特法则。最少知识原则,一个对象应当对其他对象有尽可能少的了解;

5)、开放封闭原则。软件实体应该对扩展开放,而对修改封闭,是所有面向对象原则的核心; 6)、接口隔离原则。使用多个专门的接口比使用单一的总接口要好。

填空题与判断题

1.关于依赖性的普遍原则:领域层和数据源层绝对不要依赖于表现层。【判断】

2.在领域模型中,不再是由一个过程来控制用户某一动作的逻辑,而是由每一个对象都承担一部分相关逻辑。

3.处理领域逻辑的常见方法是将领域层再细分成两层。服务层独立出来,置于底层的领域模型或表模块之上。通常只有使用领域模型或表模块时才会这样细分,因为仅使用事务脚本的领域层并不复杂,没有必要再单独设服务层。

4.表数据入口与记录集非常匹配,这使得它们成为使用表模块的当然选择。【判断】

5.这里控制器处理请求消息,模型负责领域逻辑,视图基于模型创建应答消息。【填空】

6.事务脚本胜在简单。对于只有少量逻辑的应用程序来说,使用这一模式非常自然,无论在性能上还是理解上都不会带来太大的开销。但是当业务逻辑越来越复杂时,使用这一模式就会越来越难以保持良好的设计。

7.如果你的业务规则复杂多变,涉及校验,计算,衍生,你就应该利用对象模型进行处理。反之,如果你只有一些简单的判空值和少量的求和计算,事务脚本会是一个更佳的选择。8.表模块并没有给你提供完全的面向对象的能力来组织复杂的领域逻辑。

9.通过一个服务层来定义应用程序边界,在服务层中建立一组可用的操作集合,并在每个操作内部协调应用程序的响应。

10.服务层定义了应用的边界和从接口客户层角度所能看到的可用操作集。它封装了应用的业务逻辑,事务控制及其操作实现中的响应协调。

11.通常表数据入口和领域模型很少一起使用,因为数据映射器更好的分离了领域模型和数据库。

12.同行数据入口一样,表数据入口特别适用于事务脚本。【判断】 13.行数据入口和活动记录之间的区别,这个问题的关键要看是否存在任何领域逻辑。如果存在,则是活动记录。行数据入口仅包含数据库访逻辑而没有领域逻辑。

14.使用数据映射器的主要时机是数据库方案和对象模型需要彼此独立演变的时候。最常见的情况是和领域模型一起使用。数据映射器的主要优点是无论是在设计阶段,开发阶段,还是测试阶段,在领域模型上操作时可以不考虑数据库。领域对象对数据库的结构一无所知,因为所有这些对应关系都由数据映射器完成。【理解】

15.为了能正常工作,健值应该是唯一的;为了能很好地工作,健值又应该是恒定不变的。

16.关联表映射的标准情况就是一个多对多关联关系。

17.依赖映射的基本思想是在数据库持久化时,数据库中的某个类(依赖者)依赖于其他类(所有者)。每个依赖者有且只能有一个所有者。18.要使用依赖映射,需要满足一些前置条件: 1>每个依赖者必须恰好有一个所有者。

2>不能有任何除所有者之外的对象拥有对依赖者的引用。19.对于一个类层次,并不是只能使用一个继承映射模式。20.从具体映射器读取数据的时候不需要连接操作。21.我再三强调:“远程外观没有领域逻辑。”【判断】

22.当你需要在一个方法调用中在两个进程之间传输多个数据项时,应使用数据传输对象模式。

软件架构设计方法理论
TOP