一、论软件架构风格
素材:
架构设计的一个核心问题是能否达到架构级的软件服用
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效地组织成一个完整的系统。
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
数据流风格:批处理序列、管道-过滤器
调用/返回风格:主程序-子程序、面向对象、层次结构
独立构件风格:进程通信、事件驱动系统(隐式调用)
虚拟机风格:解释器、基于规则的系统
仓库风格:数据库系统、超文本系统、黑板系统
二、论面向服务架构设计及其应用
SAO架构的内容、特点,以及你熟悉的工具和环境对SOA的支持
在应用中重点解决了哪些问题
SOA在企业应用集成中发挥的作用和优势
SOA是一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义的接口进行通信,不设计底层编程接口和通信模型。
在SOA中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。
SOA不仅仅是一种开发方法,还具有管理上的优点,管理员可直接管理开发人员所构建的相同服务。
实施SOA的关键目标是实现企业IT资产重用的最大化,在实施SOA过程中要牢记以下特征:可从企业外部访问、随时可用(服务请求能被及时响应)、粗粒度接口(粗粒度提供一项特定的业务功能,而细粒度服务代表了技术构件方法)、服务分级、松散耦合(服务提供者和服务使用者分离)、可重用的服务及服务接口设计管理、标准化的接口(WSDL、SOAP、XML)、支持各种消息模式、精确定义的服务接口。
从基于对象到基于构件再到基于服务,架构越来越松散耦合,服务粒度越来越粗,接口越来越标准。
基于服务的构件与传统构件的区别有四点:
服务构件粗粒度,传统构件细粒度居多;服务构件的接口是标准的,主要是WSDL接口,而传统构件常以具体API形式出现;服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言;服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制。
SOA的实现方式
WEB Service
服务提供者、服务注册中心(中介,提供交易平台,可有可无)、服务请求者。服务提供者将服务描述发布到服务注册中心,供服务请求者查找,查找到后,服务请求者将绑定查找结果。
1.服务提供者
服务提供者主要完成服务的设计、描述、定义和发布等相关工作。经过对手机、数据卡、CPE、MIFI、无线网关、车载TBOX等无线接入终端特性的汇总研究,根据企业应用集成的要求,对终端基站无线业务流程进行梳理,综合考虑服务粗粒度、松耦合、自包含和模块化等特点进行服务的设计。为了避免服务通信期间,信息量过大,服务之间交互过于频繁,尽量的减少了服务的数量。同时为了保证服务自身功能的完整性,尽可能的减少服务于系统之间的通信,在分布式大容量终端平台设备监控子系统的分析与开发过程中,先行设计,提取处理两个必要急需的服务便于日后集成使用,其中包括设备连接状态和设备网络接入状态监控服务。
在设备网络接入状态服务中主要对接入网络的制式类型、小区、信号强度等进行监控,以判断每个终端的网络状态。由于整个终端平台分布性特点,因此在不同的抽象出共同的服务接口,如接入、重启、灌包等 由于受到的限制,定位信息,服务提供者采用WSDL进行服务描述,而后再利用UDDI技术将这些服务信息发布至服务注册中心,公布查找和定位服务的方法。
由于终端有高通、海思、MTK三大平台,但是平台差异,因此终端里运行的业务APP有armV7 arm64等几种不同种类的ndk APP, 更新终端APP版本服务,
服务接口在ICE的Slice文件里(一种IDL)定义, 服务机Slice2cpp
终端
2.服务请求者和服务注册中心
服务请求者通过ICE框架的RPC技术调用服务。当服务
三、论软件设计模式及其应用
说明常用的软件设计模式有哪几类?阐述每种类型特点及其所包含的设计模式
详细说明所参与的软件系统开发项目中,采用了哪些软件设计模式,具体实施效果如何
设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 项目中合理使用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
模式:在某些场景下,针对某类问题的某种通用的解决方案。
场景:项目所在的环境
问题:约束条件、项目目标等
解决方案:通用、可复用的设计,解决约束达到目标。
创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。
结构型模式:把类或对象组合在一起形成一个更大的结构。
行为型模式:类和对象如何交互,及划分责任和算法。
一般而言,一个设计模式具有模式名称、适应场景、解决方案和效果四个方面的基本元素。设计模式依据其目的可以分为创建型、结构型、行为型三种类型。创建型模式,主要负责对象的创建工作,程序在确定需要创建对象时
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
观察者模式- UE的连接移除事件, 主界面的UeInfo表格控件关注,
抽象工厂方法模式 -
抽象工厂多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。在业务管理过程中,需要在windows、linux的业务机和Android、OpenLinux的终端设备等多种平台架构推送及运行Iperf、Wget、MFTP等业务APP,具有平台不确定性和业务不确定性。为了解决这一问题,我们使用了抽象工厂设计模式。首先定义了一个抽象产品Task类和抽象工厂TaskFactory,TaskFactory接口为productIperf、ProductWget、ProductMftp,Task接口方法为start、stop启动停止任务,然后还定义了IperfTask、WgetTask、MftpTask等具体产品类,winTaskFactory、LinuxFactory、AndroidFactory等具体工厂类。 通过抽象工厂设计模式,可以有效解决客户新增运行平台设备和业务APP的需求变化。设计者无需知道哪个子类被具体实例化,子类会根据具体情况自己决定实例化哪一个类,而且创建具体产品的细节也有着很好的封装,符合高内聚、低耦合的设计和原则。当需要在系统中添加新产品时,无需修改抽象工厂和抽象产品的接口,以及其他具体工厂和具体产品,具有很好的可扩展性。
抽象接口是TaskFactory 负责生成Task抽象任务,包括start、stop等。 winTask、LinuxTaskFactory、AndroidFactory
在平台业务发起模块中,, 业务APP有Iperf、MFTP、WGET等,它们需要运行在windows、linux及终端的安卓系统上启动任务, 提供了统一的start、stop接口
模板方法模式- UE连接处理方法。UE的connected方法包括kill旧业务进程、检测ndk APP版本、推送新版本APP、启动服务进程等几个子方法。 我将推送新版本APP定义为抽象方法,由子类负责重写实现,子类有AndroidUe、OpenLinuxUe等不同类型,它们的APP文件位于本地不同的路径下,且是针对不同架构平台交叉编译的。
工厂方法模式是简单工厂的延伸,它继承了简单工厂的优点,同时还弥补了简单工厂模式的缺陷,在增加新的具体产品对象时不需要对已有的系统做任何修改。
四、论高可靠性系统中软件容错技术的应用
具体论述在设计软件时,如何考虑容错问题,采用了哪几种容错技术和方法
分析所采用的容错方法是否达到系统的可靠性和实时性要求
系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。
系统可用性是指在某个给定时间点上系统能够按照需求执行的概率。
可靠度就是系统在规定的条件下、规定的时间内不发生失效的概率。
失效率又称为风险函数,也可以称为条件失效强度,是指运行至此刻系统未出现失效的情况下,单位时间系统出现失效的概率。
冗余技术
提高系统可靠性的技术可以分为避错(排错)技术和容错技术。避错是通过技术评审、系统测试和正确性证明等技术,在系统正式运行之前避免、发现和改正错误。
容错是指系统在运行过程中发生一定的硬件故障或软件错误时,仍能保持正常工作而不影响正确结果的一种性能或措施。容错技术主要是采用冗余方法来消除故障的影响。
冗余是指在正常系统运行所需的基础上加上一定数量的资源,包括信息、时间、硬件和软件。冗余是容错技术的基础,通过冗余资源的加入,可以使系统的可靠性得到较大的提高。主要的冗余技术有结构冗余(硬件冗余和软件冗余)、信息冗余、时间冗余和冗余附加4种。
软件容错的主要方法是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高系统可靠性,保证整个系统的正常运行。软件容错技术主要有N版本程序设计、恢复块设计和防卫式程序设计等。
N版本程序设计:是一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、程序语言、开发环境和工具来实现,目的是减少N个版本的程序在表决点上相关错误的概率。
恢复块设计(动态冗余):动态冗余又称为主动冗余,它是通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。前者叫热备份系统(双重系统),后者叫冷备份系统(双工系统、双份系统)。
防卫式程序设计:是一种不采用任何传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序中包含错误检查代码和错误恢复代码,使得一旦发生错误,程序就能撤销错误状态,恢复到一个已知的正确状态中去。其实现策略包括错误检测、破坏估计和错误恢复三个方面。
双机容错技术:是一种软硬件结合的容错应用方案。该方案是由两台服务器和一个外接共享磁盘阵列及相应的双机软件组成。
双机容错系统采用“心跳”方法保证主系统与备用系统的联系。所谓心跳,是指主从系统之间相互按照一定的时间间隔发送通信信号,表明各自系统当前的运行状态。一旦心跳信号表明主机系统发生故障,或者备用系统无法收到主系统的心跳信号,则系统的高可用性管理软件认为主系统发生故障,立即将系统资源转移到备用系统上,备用系统替代主系统工作,以保证系统正常运行和网络服务不间断。
工作模式:双机热备份模式、双机互备份模式、双机双工模式。
五、论企业集成平台的技术和应用
企业集成分类:
1.表示集成:即界面集成,是最原始的集成,黑盒集成。将多个信息系统的界面集成在一起,统一入口,为用户提供一个看上去统一,但是由多个系统组成的应用系统的集成,例如桌面。
2.数据集成:白盒集成,把不同来源、格式、特点性质的数据在逻辑上或者物理上有机的集中,从而为企业提供全面的数据共享。如数据仓库。
3.控制集成(功能集成、应用集成):黑盒集成,业务逻辑层次的集成,可以借助于远程过程调用或远程方法调用、面向消息的中间件等技术,将多个应用系统功能进行绑定,使之像一个实时运行的系统一个接受信息输入和产生数据输出,实现多个系统功能的叠加。如钉钉。
4.业务流程集成:即过程集成,最彻底的、综合的集成,这种集成超越了数据和系统,由一系列基于标准的、统一数据格式的工作流组成。当进行业务流程集成时,企业必须对各种业务信息的交换进行定义、授权和管理,以便于改进操作、减少成本、提高响应速度。它包括应用集成、B2B集成、自动化业务流程管理、人工流程管理、企业门户,以及对所有应用系统和流程的管理和监控等。如电子购物网站-第三方支付平台-银行-物流等流程集成。
应用集成数据交换方式
共享数据库:在应用集成时,让多个应用系统通过直接共享数据库的方式,来进行数据交换,实时性强,可以频繁交互,属于同步方式;但是安全性、并发控制、死锁等问题突出。
消息传递:消息是软件对象之间进行交互和通信时所使用的一种数据结构,可以独立于软件平台而存在,适用于数据量小、但要求频繁、立即、可靠、异步地数据交换场合。
文件传输:是指在进行数据交换时,直接将数据文件传送到相应位置,让目标系统直接读取数据,可以一次性传送大量信息,但不适合频繁进行数据传送。适用于数据量大、交换频度小、即时性要求低的情况。
企业集成平台
企业集成平台是支持企业集成的支持环境,包括硬件、软件、软件工具和系统,通过集成各种企业应用软件形成企业集成系统。由于硬件环境和应用软件的多样性,企业信息系统的功能和环境都非常复杂,因此,为了能够较好地满足企业的应用需求,作为企业集成系统支持环境的集成平台,其基本功能主要有:
1.通信服务。 它提供分布环境下透明的同步/异步通信服务功能,使用户和应用程序无需关心具体的操作系统和应用程序所处的网络物理位置,而以透明的函数调用或对象服务方式完成它们所需的通信服务要求。
2.信息集成服务。 它为应用提供透明的信息访问服务,通过实现异种数据库系统之间数据的交换、互操作、分布数据管理和共享信息模型定义(或共享信息数据库的建立),使集成平台上运行的应用、服务或用户端能够以一致的语义和接口实现对数据(数据库、数据文件、应用交互信息)
3.应用集成服务。 它通过高层应用编程接口来实现对相应应用程序的访问,这些高层应用编程接口包含在不同的适配器或代理中,它们被用来连接不同的应用程序。这些接口以函数或对象服务的方式向平台的组件模型提供信息,使用户在无需对原有系统进行修改(不会影响原有系统的功能)的情况下,只要在原有系统的基础上加上相应的访问接口就可以将现有的、用不同的技术实现的系统互联起来,通过为应用提供数据交换和访问操作,使各种不同的系统能够相互协作。
4.二次开发工具。二次开发工具是集成平台提供的一组帮助用户开发特定应用程序(如实现数据转换的适配器或应用封装服务等)的支持工具,其目的是简化用户在企业集成平台实施过程中(特定应用程序接口)的开发工作。
5.平台运行管理工具。它是企业集成平台的运行管理和控制模块,负责企业集成平台系统的静态和动态配置、集成平台应用运行管理和维护、事件管理和出错管理等。通过命名服务、目录服务、平台的动态静态配置,以及其中的关键数据的定期备份等功能来维护整个服务平台的系统配置及稳定运行。
六、论软件多层架构的设计
2.表示层 2.服务层 3.数据层
上层使用下层提供的服务,且仅通过调用层次间的特定接口获取下层服务,下层暴露特定接口为上层提供特定服务,且不依赖于上层,
七、论信息系统的安全性与保密性设计
理论素材:
信息安全技术:对称加密,非对称加密,数字信封,信息摘要,数字签名,数字证书
网络安全技术:防火墙、入侵检测、计算机病毒和木马的防护
八、论软件架构评估
质量属性
1、性能:指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。如响应时间、吞吐量。设计策略:优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度等
2、可靠性:是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。如MTTF、MTBF。设计策略:心跳、Ping/Echo、冗余、选举
3、可用性:是系统能够正常运行的时间比例,经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。如故障间隔时间。设计策略:心跳、Ping/Echo、冗余、选举
4、安全性:是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。如保密性、完整性、不可抵赖性、可控性。设计策略:入侵检测、用户认证、用户授权、追踪审计
5、可修改性:指能够快速的以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量。设计策略:接口-实现分离、抽象、信息隐藏。
6、功能性:是系统的所能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
7、可变性:指体系结构经过扩充或变更而成为新体系结构的能力。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的体系结构。当要将某个体系结构作为一系列相关产品的基础时,可变性时很重要的。
8、互操作性:作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用。为了支持互操作性,软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和其他编程语言编写的软件系统的交互作用就是互操作性的问题,也影响应用的软件体系结构。
敏感点:是指为了实现某种特定的质量属性,一个或多个构件具有的特性
权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点
风险点与非风险点不是标准专业术语形式出现的,只是一个常规概念,即可能引起风险的因素,可称为风险点。某个做法如果有隐患,有可能导致一些问题,则为风险点;而如果某件事是可行的,可接受的,则为非风险点。
架构权衡分析法ATAM
描述ATAM方法、描述业务动机、描述架构、确定架构方法、生成质量属性效用树、分析架构方法、讨论场景和对场景分级、分析架构方法、描述评估结果
评估小组负责人:评估方法
首席设计师:架构
评估小组、设计小组、管理人员和客户代表
项目干系人:投票
评估小组负责人:评估方法
描述和介绍阶段、调查和分析阶段、测试阶段、报告阶段
项目决策者:业务角度 架构设计师 评估小组 架构设计师
九、基于构件的软件开发
素材:
构件是一个独立可交付的功能单元,外界通过接口访问其提供的服务。
构件由一组通常需要同时部署的原子构件组成。一个原子构件是一个模块和一组资源。原子构件是部署、版本控制和替换的基本单元。原子构件通常成组地部署,但是它也能够被单独部署。
构件和原子构件之间的区别在于,大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反,大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族。
一个模块是不带单独资源的原子构件(在这个严格定义下,java包不是模块-在java中部署的原子单元是类文件)。
一个单独的包被编译成多个单独的类文件-每个公共类都有一个
模块是一组类和可能的非面向对象的结构体,比如过程或者函数。
构件和对象
构件的特性是:(1)独立部署单元 (2)作为第三方的组装单元 (3)没有(外部的)可见状态。一个构件可以包含多个类元素,但是一个类元素只能属于一个构件。将一个类拆分进行部署通常没什么意义。
对象的特性是:(1)一个实例单元,具有唯一的标志。(2)可能具有状态,此状态外部可见。(3)封装了自己的状态和行为。
构件接口
接口标准化是对接口中消息的格式、模式和协议的标准化。它不是要将接口格式化为参数化操作的集合,而是关注输入输出的消息的标准化,它强调当机器在网络中互连时,标准的消息模式、格式、协议的重要性。
面向构件的编程(COP)
关注于如何支持建立面向构件的解决方案。“面向构件的编程需要下列基本的支持”:
-多态性(可替代性)
-模块封装性(高层次信息的隐藏)
-后期的绑定和装载(部署独立性)
-安全性(类型和模块安全性)
构件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装,同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节。
目前,国际上常用的构件标准主要有三大流派,分别是COM/DCOM/CPM+,CORBA和EJB
EJB(Enterprise Java Bean)规范由Sun公司制定,有三种类型的EJB,分别是会话Bean(session bean)、实体bean和消息驱动bean。
EJB实现应用中关键的业务逻辑,创建基于构件的企业级应用程序。EJB在应用服务器的EJB容器内运行,由容器提供所有基本的中间层服务,如事务管理、安全、远程客户连接、生命周期管理和数据库连接缓冲等
COM、DCOM、COM+:COM是微软公司的。DCOM是COM的进一步扩展,具有位置独立性和语言无关性。COM+并不是COM的新版本,是COM的新发展或是更高层次的应用。
COBRA标准主要分为三个层次:对象请求代理、公共对象服务和公共设施。
最底层的是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的“软总线”;
在ORB之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务;
最上层的公共设施则定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。



