需求分析-----------架构------------软件设计
(鸿沟)
体系结构==架构
架构设计就是需求分配,即是将满足需求的职责分配到组件上。
批处理序列
管道--过滤器
早期编译器就是采用的这种架构。要一步一步处理的,均可考虑采用此架构风格。
主程序/子程序
面向对象
层次结构
进程通信
事件驱动系统(隐式调用)
仓库风格中构件分两种:一种是中央数据结构,保存系统的当前状态;另一种是独立构件,对中央数据存储进行操作。
数据库系统
黑板系统
超文本系统
当软件被用来操作一个物理系统时,软件与硬件之间可以粗略地表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。适合于嵌入式系统,涉及连续的动作与状态。
C2是一种并行构件网络。如下所示:
C2架构的基本规则:
三层C/S架构
层次架构风格
Model(模型)是应用程序中用于处理数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
J2EE体系结构中:
视图(View):JSP
控制(Controller):Servlet
模型(Model):Entity Bean、Session Bean
服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持
SOA的实现方式
SOA关键技术
SOAP,Simple Object Access Protocol,简单对象访问协议,简单的说就是用于访问网络服务的协议:它是基于XML的简易协议,可以使应用程序在HTTP之上进行信息交换。
SOAP是一种网络通信协议,用于网络上、不同平台、不同语言的应用程序间的通讯。
SOAP协议=HTTP协议+XML数据格式
微服务的优势
微服务面临的挑战
微服务与SOA
ADL是一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。基于底层语义的工具为体系结构的表示、分析、演化、设计过程等提供支持。
基本活动
领域分析机制
建立过程
ABSD方法是架构驱动,即强调由业务、质量和功能需求的组合驱动架构设计。
使用ABSD方法,设计活动可以从项目总体功能框架明确就开始,这意味着需求获取和分析还没有完成(甚至远远没有完成),就开始了软件设计
ABSD方法有三个基础
ABSD方法是递归的,且迭代的每一个步骤都是清晰地定义的,因此,不管设计是否完成,架构总是清晰的,这有助于降低架构设计的随机性。
视角与视图:从不同的视角来检查所以会有不同的视图
用例用来捕获功能需求、特定场景来捕获质量需求
质量属性
1、性能
性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。
代表参数:响应时间、吞吐量 设计策略:优先级队列、资源调度
2、可用性
可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或者在出现故障时系统能够恢复正常的速度来表示。
代表参数:故障间隔时间 设计策略:冗余、心跳线
3、安全性
安全性(security)是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性又可以划分为机密性、完整性、不可否认性及可控性等特征。
设计策略:追踪审计
4、可修改性
可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考察这些变更的代价衡量可修改性。
主要策略:信息隐藏
5、可靠性
可靠性(reliability)是软件系统在应用或系统错误面前,在意外或者错误使用的情况下维持软件系统的功能特性的基本能力。主要考虑两个方面:容错、健壮性。
代表参数:MTTF、MTBF 设计策略:冗余、心跳线
6、功能性
功能性(functionality)是系统所能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
7、可变性
可变性(changeability)是指体系结构经扩充或变更而成为新体系结构的能力。这种新体系结构应该符合预先定义的规则,在某些具体方面不同于原有的体系结构。当要将某个体系结构作为一系列相关产品(列如,软件产品线)的基础时,可变性是很重要的。
8、互操作性
作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用。为了支持互操作性(interoperation),软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其他编程语言编写的软件系统的交互作用就是互操作性的问题,这种互操作性也影响应用的软件体系结构。
软件架构分析方法(SAAM)
架构权衡分析法(ATAM)
成本效益分析法(CBAM)
J2EE-分布式多层应用程序
J2EE核心组成
容器:
Applet Container、Application Container、Web Container、EJB Container
组件:
Applet、Application、JSP/Servlet、EJB
服务:
HTTP(Hypertext Transfer Protocol):超文本传输协议
RMI-IIOP(remote method invocation ober the internet inter-ORB protocol):远程方法调用,融合了java RMI 和CORBA,在使用Application或Web端访问EJB端组件时使用
CORBA(Common object request broker architecture):公共对象请求代理体系结构
Java IDL(java interface definition language):java接口定义语言,用于访问外部的CORBA服务
JTA(java transaction API):用于进行事务处理操作的API
JDBC(Java Database Connectivity):为数据库操作提供的一组API
JMS(Java Massage Service):用于发送点对点消息的服务
JavaMail:用于发送邮件
JAF(Java Activation Framework):用于封装传递的邮件数据
JND(Java Naming and Directory Interface)
JAXP(Java API for XML Parsing):解析XML的API
JCA(J2EE Connector Architecture):Java 连接器构架
JAAS(Java Autherticati on and AUthorization Service)
JSF(Java Server Faces)
JSTL(JSP Standard Tag Library)
SAAJ(SOAP with Attachments API for JAVA)
JAXR(Java Api for XML Registries)
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源
中间件技术的优点:
架构:MVC MVP MVVM REST WEBSERVICE 微服务
缓存: MemCache Redis Squid
并发:集群(负载均衡) CDN
数据库:主从复制 内存数据库 反规范化技术 NoSQL 分区分表 视图与物化视图
持久化:Hibernate Mybatis
分布存储:Hadoop FastDFS 区块链
数据编码:XML JSON
WEB应用服务器:Apache WebSphere WebLogic Tomcat JBOSS IIS
其他:静态化 ,有状态与无状态 响应式web设计
基于特定软件的负责均衡(HTTP重定向)(应用层)
反向代理负载均衡(应用层)
基于DNS的负载均衡(传输层)
基于NAT的负载均衡(传输层)
混合型负载均衡
静态算法:轮转算法、加权轮转算法、源地址哈希散列算法、目标地址哈希散列算法、随机算法
动态算法:最小连接数算法、加权最小连接数算法、加权百分比算法
硬件负载均衡:F5
软件负载均衡:LVS nginx haproxy
应用负载均衡
1、http重定向,http重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群。
特点:实现简单,但性能较差
2、反向代理服务器,在用户的请求到达反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的apache,nginx都可以充当反向代理服务器。
特点:部署简单,但代理服务器可能成为性能的瓶颈
传输层负载均衡
1、DNS域名解析负载均衡,DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP
特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务器商那里,网站无法做更多的改善和更强大的管理
2、基于NAT的负载均衡,基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址
特点:技术较为成熟,一般在网关位置,可以通过硬件实现。像四层交换机一般就采用了这种技术。
无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以冲外部获取到(比如说数据库),服务器本身不存储任何信息。
由状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的。
CDN的全称是Content Delivery Network, 即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快,更稳定。
WEB应用服务器
Apache:Web服务器,市场占有率达60%左右,它可以运行在几乎所有的UNIX,Windows, Linux系统平台上
IIS:早期web服务器,目前小规模站点仍有应用。
Tomcat:开源、运行servlet和JSP web应用软件的基于JAVA的web应用软件容器。
JBOSS:JBOSS是基于J2EE的开源的应用服务器。一般与Tomca或Jetty绑定使用。
Weblogic: BEA weblogic server 是一种多功能,基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。
Jetty:Jetty是一个开源的servlet容器,它为基于Java的web容器。