目录
一、软件流程设计
1.1 业务流程分析方法
1.2 业务流程建模
1.2.1 标杆瞄准
1.2.2 IDEF
1.2.3 DEMO
1.2.4 流程建模语言
1.2.5 基于服务的BPM
1.2.6 业务流程重组BPR
1.2.7 业务流程管理BPM
二、软件架构设计
2.1 概念
2.2 软件架构风格
三、 结构化设计
四、面向对象设计
4.1 基本过程
4.2 设计原则
4.3 设计模式
4.3.1 基本概念
4.3.2 设计模式分类
五、人机界面设计
六、Web应用设计
6.1 相关技术
6.2 单台机器 到 数据库与Web服务器分离
6.3 应用服务器集群
6.3.1 负载平衡技术
6.3.2 有状态无状态问题
6.4 数据库优化
6.4.1 读写分离化
6.4.2 用缓存缓解读库的压力
6.4.3 内容分发网络CDN
6.4.4 数据格式
6.5 Web服务器分类
6.6 缓存技术
6.7 表述性状态传递REST
6.8 响应式Web设计
一、软件流程设计
1.1 业务流程分析方法
- 价值链分析法
- 客户关系分析法
- 供应链分析法
- 基于ERP的分析法
- 业务流程重组
1.2 业务流程建模
- 标杆瞄准
- *IDEF(一系列建模、分析和仿真方法的统称大 )
- DEMO(组织动态本质建模法 )
- Petri网
- 业务流程建模语言
- 基于服务的BPM
1.2.1 标杆瞄准
- 确定需要进行标杆研究的流程和影响流程成败的关键因素
- 确定瞄准目标的标杆企业、组织及其流程
- 通过走访、调研、会谈、广告等采集数据,并进行分析
- 从众多标杆数据中,选定最佳改进标准
- 根据标杆指标,评估企业的既有流程,并确立改进目标
1.2.2 IDEF
1.2.3 DEMO
1.2.4 流程建模语言
1.2.5 基于服务的BPM
1.2.6 业务流程重组BPR
1.2.7 业务流程管理BPM
二、软件架构设计
2.1 概念
- 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
- 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成
- 软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性
- 软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量
2.2 软件架构风格
架构设计的一个核心问题是能否达到架构级的软件复用
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效地组织成一个完整的系统
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
- 数据流风格:批处理序列、管道-过滤器
- 调用/返回风格:主程序/子程序、面向对象、层次结构
- 独立构件风格:进程通信、事件驱动系统(隐式调用)
- 虚拟机风格:解释器、基于规则的系统
- 仓库风格:数据库系统、超文本系统、黑板系统
三、 结构化设计
四、面向对象设计
4.1 基本过程
4.2 设计原则
- 单一职责原则:设计目的单一的类
- 开放-封闭原则:对扩展开放,对修改封闭
- 李氏(Liskov)替换原则:子类可以替换父类
- 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
- 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
- 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
- 迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
4.3 设计模式
4.3.1 基本概念
- 架构模式:软件设计中的高层决策,例如C/S结构就属于架构模式,架构模式反映了开发软件系统过程中所作的基本设计决策
- 设计模式:主要关注软件系统的设计,与具体的实现语言无关
- 惯用法:是最低层的模式,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如引用-计数就是C++语言中的一种惯用法
4.3.2 设计模式分类
创建性模式:
结构型模式:
行为模式:
五、人机界面设计
六、Web应用设计
6.1 相关技术
- 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务.
- 从缓存来看:MemCache,Redis,Squid。
- 从并发分流来看: 集群(负载均衡 )、CDN
- 从数据库来看: 主从库(主从复制),内存数据库,反规范化技术,NOSQL分区( 分表 )技术,视图与物化视图
- 从持久化来看:Hibernate,Mybatis.
- 从分布存储来看:Hadoop,FastDFS,区块链。
- 从数据编码看: XML,JSON。
- 从Web应用服务器来看: Apache,WebSphere,WebLogic,TomcatJBOss,IS
- 其它 : 静态化,有状态与无状态,响应式Web设计。
6.2 单台机器 到 数据库与Web服务器分离
6.3 应用服务器集群
系统演变到这里,将会出现下面几个问题:负载平衡、有状态无状态问题
1、用户的请求由谁来转发到到具体的应用服务器
2、用户如果每次访问到的服务器不一样,那么如何维护session的一致性
6.3.1 负载平衡技术
- 基于特定软件的负载均衡( HTTP重定向 ) ( 应用层)
- HTTP重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正集群
- 特点:实现简单,但性能较差
- 反向代理负载均衡(应用层)
- 在用户的请求到达反向代理服务器时( 已经到达网站机房 》,由反向理服务器根据算法转发到具体的服务器。常用的apache,nginx都可以充当反向代理服务器
- 特点:部署简单,但代理服务器可能成为性能的瓶颈。
- 基于DNS的负载均衡( 传输层)
- DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP。
- 效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理。
- 基于NAT的负载均衡(传输层 )
- 基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址。
- 技术较为成熟,一般在网关位置,可以通过硬件实现。像四层交换机一般就采用了这种技术。
- 混合型负载均衡
负载平衡算法:
- 静态算法: 轮转算法、加权轮转算法、源地址哈希散列算法、目标地址哈希散列0算法、随机算法
- 动态算法:最小连接数算法、加权最小连接数算法、加权百分比算法
软硬件负载平衡技术:
- 硬件负载均衡:F5
- 软件负载均衡: LVS、Nginx、HAproxy
6.3.2 有状态无状态问题
- 无状态服务( stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息
- 有状态服务(stateful service) 则相反,它会在自身保存一些数据,先后的请求是有关联的。
6.4 数据库优化
6.4.1 读写分离化
6.4.2 用缓存缓解读库的压力
6.4.3 内容分发网络CDN
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定
6.4.4 数据格式
(1)XML
扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
- XML的优点:
- A.格式统一,符合标准
- B,容易与其他系统进行远程交互,数据共享比较方便
- XML的缺点
- A.XML文件庞大,文件格式复杂,传输占带宽 ;
- B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
-
- C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码
- D.服务器端和客户端解析XML花费较多的资源和时间
(2)JSON
JSON(JavaScript object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换.
- JSON的优点
- 1、数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
- 2、易于解析,客户端JavaScript可以简单的通过eval0进行JSON数据的读取
- 3、支持多种语言,包括ActionScript, C,C#,ColdFusion,Java,JavaScript, Perl,PHP, Python,Ruby等服务器端语言,便于服务器端的解析;
- 4、因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护
- JSON的缺点
- 没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性
6.5 Web服务器分类
WEB应用服务器可以理解为两层意思
- WEB服务器:其职能较为单一,就是把浏览器发过来的Request请求,返回Html页面
- 应用服务器 : 进行业务逻辑的处理。
- Apache : Web服务器,市场占有率达60%左右。它可以运行在几乎所有的Unix.Windows、Linux系统平台上。
- IIs : 早期Web服务器,目前小规模站点仍有应用
- Tomcat :开源、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器
- JBOSS:JBOSS是基于J2EE的开放源代码的应用服务器。一般与Tomcat或Jetty绑定使用WebSphere: 一种功能完善、开放的Web应用程序服务器,它是基于Java 的应用环境,用于建立、部署和管理Internet 和Intranet Web 应用程序。
- WebLogic: BEA WebLogic Server 是一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。
- Jetty : Jetty 是一个开源的servlet容器,它为基于Java的web容器.
6.6 缓存技术
MemCache | Memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负载。Memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等 |
Redis | Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 |
Squid | Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。 |
6.7 表述性状态传递REST
REST ( Representational State Transfer,表述性状态转移)是一种只使用HTTP和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性
REST的5个原则:
- 网络上的所有事物都被抽象为资源
- 每个资源对应一个唯一的资源标识
- 通过通用的连接件接口对资源进行操作
- 对资源的各种操作不会改变资源标识。
- 所有的操作都是无状态的
6.8 响应式Web设计
响应式WEB设计是一种网络页面设计布局,其理念是: 集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。
方法与策略:
- 采用流式布局和弹性化设计: 使用相对单位,设定百分比而非具体值的方式设置页面元素的大小。
- 响应式图片: 不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率