20150528联动技术大讲堂15(刘胜)业务系统上线标准指引

41
联动优势科技有限公司 北京市海淀区学院南路12号学创大厦A9层(100088Version 1.2.20150528 《业务系统上线标准参考指引》介绍 刘胜 [email protected]

Upload: liu-sheng

Post on 13-Jan-2017

226 views

Category:

Technology


5 download

TRANSCRIPT

联动优势科技有限公司

北京市海淀区学院南路12号学创大厦A座9层(100088)

Version 1.2.20150528

《业务系统上线标准参考指引》介绍

刘胜 [email protected]

『 联 动 技 术 大 讲 堂 』

2

热点事件

昨天——

支付宝大面积瘫痪,缘由杭州萧山的一根光缆被挖断了。什么互联网+,什么4.0,什么大数据,都顶不住传统行业的一铲子。这一战,蓝翔赢了。

今天——

携程彻底瘫痪。所有节点代码被删除,数据库也被删除了。

某某回复: 现在情况是所有节点上的业务代码被干掉了,业务部门都在忙着部署,所有发布日志没有了,具体原因在差,内部推测可能是内部报复。

看这架势,应该没备份,或者备份不同步,备份数据过老。否则恢复很快,不至于新闻公布出来。

应该不是代码上传服务器自动删除的事,是这样的话,换新的服务器环境就ok了,最多2个小时就可以搞定。这么长时间还不行,只能说是数据出问题了。估计备份也受损了。

5个小时还没修好,估计真要挂了。

3

小调查

《联动风采》2015第一季

『业务系统上线标准指引』

开源BS3框架

http://10.10.67.45:18080/svn3/

/docs/20150122-UMP_DEV_online-system-requirements-outline-v0.7.0512.10.pdf

看过 进一步阐述 没看 更应该了解

4

关于我

——本次课程——

关于上线标准? 关于软件需求?

——有趣的我—— 助理软件工程师@1997

软件工程师@1998 系统分析员@2002

资深系统分析师@2008

——主要挑战——

交互不足 反馈单一

——主要收获——

内容逻辑化 活动游戏化

@刘胜

5

1.引言

1 引言

背景,目的,涉众,术语

2 上线参考要求

三大能力要求

三大测试要求

三大规范要求

3 附录

上线要求快速检查表

6

软件开发文档

软件需求规格说明书 /SRS

软件接口设计说明书 /外部接口

软件概要设计文档 /总体设计

软件详细设计文档

软件功能测试计划

软件功能测试报告

软件性能测试报告

软件安全测试报告

软件验收测试报告

软件系统上线步骤

源代码

Jack W. Reeves @ C++ Journal

1992,What Is Software Design? ——Code As Design

2005,What Is Software Design: 13 Years Later

2005,Letter to the Editor

7

需求规格说明书

Software Requirements Specification(SRS) 功能性需求 Functional Requirements

非功能性需求 Non-Functional Requirements 例:能满足100个人同时使用,页面反应时间不能超过6秒;

例:能7×24连续运行,年非计划宕机时间不能高于8小时;

软件体系架构

(关键需求决定架构,其余需求验证架构) 功 能 性需 求

非功能性需求

高可用,高可靠

高性能,高扩展

多功能,高扩展

易用性,可测试

安全性,健壮性

可复用性

互操作性

可维护性

可移植性

8

需求的重要性

事实1:缺陷在系统中的时间越长,解决它的代价就越大! 【债务】

事实2:一半以上的软件缺陷是在需求阶段引入的。 【不幸】

事实3:有接近一半的软件功能模块,从未被使用。 【Excel】

表1. 摘自《代码大全》

发现BUG阶段

需求 架构 建设 系统测试 发布之后

引入BUG 阶段

需求 1 3 5~10 10 10~100

架构 -/- 1 10 15 25~100

建设 -/- -/- 1 1 10~25

图 1.不同阶段缺陷引入的分布 图2.IT项目实际功能模块使用频率的分布

9

非功能需求

定义

需求=功能+质量+约束

质量=场景+定量

分类

功能性需求~表面功能

非功能需求~潜在质量

需求大局观

关键需求决定架构

其余需求验证架构

重要性

功能性 需求

非功能 需求

1.重要不紧急 2.重要且紧急

3.紧急不重要

10

FQC原则

分布式系统CAP定律 (Eric A. Brewer 2000) ——————————— Consistency 一致性 Availability 可用性 Partition tolerance 分布性

需求分析的FQC原则 (刘胜 2014)

———————————— Functional Features 功能需求 Quality 质量需求 Cost reduction 成本需求

Cost reduction

Pick Two !

11

我司现状+案例2

可行性分析 可行性分析报告

需求分析 需求规格说明书

软件设计 概要设计,详细设计

编码实现

软件开发生命周期(SDLC)

软件测试 功能、性能、安全 运行和维护

部署/上线 运行/监控 维护/升级

需求反馈 (非功能性需求)

需求定义 (功能性需求)

前期 (xx周,xx月)

中期 (xx周,xx月)

后期 (xx年)

非功能需求一般很笼统,但考虑非功能目标要趁早!

盲点 & 要点

12

涉众组织

需求:由事业部的产品团队提出需求

设计:由事业部的开发团队完成设计。

评审:由事业部的开发团队提出,有架构师和DBA参与

功能测试:由事业部的测试团队完成功能测试;

性能测试:由技术发展中心完成性能测试评估;

安全测试:由技术发展中心完成安全检测评估;

部署:由网络与运行中心完成部署上线;

运维:由网络与运行中心进行后期运维;

13

相关术语

单点故障(Single Point of Failure)

纵向扩展(Scale-Up)

横向扩展(Scale-Out)

负载均衡(Load Balance)

故障转移(Fail Over)

故障恢复(Fail Back)

灾难恢复(Disaster Recovery)

流量控制(Flow Control)

功能测试(Functional Testing)

性能测试(Performance Testing)

负载测试(Load Testing)

压力测试(Stress Testing)

14

2.内容

我们的软件系统,需要——

具备哪些能力?

进行哪些测试?

符合哪些规范?

15

上线参考要求

三大能力要求 横向扩展能力*5项

故障转移能力*2项

流量控制能力*3项

三大测试要求 功能测试报告*2项

性能测试报告*4项

安全检测报告*4项

三大规范要求 应用发布规范*5项

应用部署规范*1项

应用运行规范*4项 凡事预则立,不预则废。

16

不同维度

需求/设计/评审 测试 运维 高扩展 3.1横向扩展能力 3.1横向扩展能力

高可用 3.2故障转移能力 3.3流量控制能力

3.2故障转移能力 3.3流量控制能力

高性能 3.5性能测试 3.7.4隔离静态资源 安全性 3.6安全检测 易测试 3.4功能测试 易配置 3.7.2参数配置 易部署 3.7应用发布规范

3.8应用部署规范 易监控 3.9.1健康状态检查

3.9.2运行状态检查 易维护 3.9.3业务日志规范

3.9.4增量数据规划 …

17

各小章节

4功能测试/黑盒测试

4功能测试/白盒覆盖率

5性能测试/单机性能*1

5性能测试/集群性能*4

5性能测试/弹性负载

5性能测试/服务耦合

6安全检测/安全认证

6安全检测/安全传输

6安全检测/非法注入

6安全检测/移动客户端

1横向扩展/负载均衡器

1横向扩展/应用系统

1横向扩展/消息队列

1横向扩展/关系数据库

1横向扩展/非关系型库

2故障转移/后台服务

2故障转移/后台数据库

3流量控制/分流

3流量控制/限流

3流量控制/降级

7发布/目录结构

7发布/启停脚本

7发布/参数配置/动静分离

7发布/隔离静态资源

7发布/自动化打包

8部署/自动化部署

9运行/健康状态检查

9运行/运行状态检查

9运行/业务日志规范

9运行/增量数据规划

18

2.1 故障转移能力

故障节点 后台服务系统 流量控制/分流

后台数据库 !!!

解决方案 应用级解决方案

TDDL,UDDS(动态数据源)

中间层解决方案 DRDS,UDAL(数据访问层)

必备工具 数据复制中心

服务配置中心

19

2.2 横向扩展能力

相关节点

负载均衡器 如 LVS/HaProxy/Nginx等

应用系统 如 Tomcat/Resin等

消息队列 如 ActiveMQ/Kafka等

非关系型库 如 Memcached/Redis/MongoDB等。

关系数据库 如 DB2/Oracle/MySql等

存储、网络、机房、城市

能力分级

1.单点:存在单点故障;

2.主备:两个互为主备,无单点,存在性能瓶颈;

3.双活:两个同时工作,无单点,也无性能瓶颈;

4.多活:多个同时工作,无单点,也无性能瓶颈;

20

2.3 流量控制能力

概念:

指控制发送方的发送数据量,使其不超过接收方的接收能力。

目的:

有效地防止由于网络中瞬间的大量数据对网络和服务器带来的冲击,保证网络和服务器系统高效而稳定的运行。

分类:

网络流量控制:是针对在单位时间内的网络带宽、被发送到网络中的数据量,或者是最大速率的数据流量发送。

服务流量控制:主要是针对单位时间内的服务请求数量进行控制,及时分流或限流,防止后台某单一服务器的过载,而无法响应用户请求,甚至导致整个服务器集群的“雪崩”。

控制——分流、降级、限流

21

2.3.1 分流

相关节点

业务应用

数据库 【读写分离/多读,多写】

场景:已具备横向扩展能力

实现:

模式1:负载均衡器 【如LVS,Ha-Proxy,Nginx】

模式2:服务查找器 【如DNS,服务配置中心】

相关:

灰度发布

AB测试

22

2.3.2 降级

节点 业务应用

数据库 不具备

场景:无法通过分流解决服务可用性问题

实现:将非关键业务降级 关闭推荐应用,以减少数据库和服务资源占用;

非关键的业务信息不进行更新,如商品价格;

远程配置服务改为本地访问内存方式;

相关:

23

2.3.3 限流

节点: 业务应用

数据库 不具备

场景:无法通过分流和降级解决服务可用性问题

实现: 访问接入层/代理服务:可通过配置限制前端访问流量;

服务端应用:可通过队列大小,滑动窗口,超时时间等机制,控制系统内部单位时间的交易处理数量。

相关:

24

2.4 功能测试指标

黑盒测试 ——出具“测试报告”

白盒测试 ——检查测试覆盖率,暂不作要求

兼容性测试 针对Web UI应用

不同浏览器下的兼容性测试:包括IE,Firefox,Chrome等

不同J2EE容器的兼容性测试:包括Resin-3.x/4.x和Tomcat-7x/8x等。

针对手机客户端UI应用 iOS客户端——两代iPhone手机,两个以上iOS版本

手机:4/4s,5c/5s,6/6plus

版本:6.x,7.x,8.x,..

Android客户端——

手机:五个厂商十款不同手机

版本:两个以上Android版本(4.x,4.4,5.x)

25

2.5 性能测试指标

环境

硬件标配参考:x64双核CPU,8G内存,普通磁盘

性能测试

单机性能测试+稳定性测试

集群性能测试+稳定性测试

弹性负载测试

服务依赖测试

26

2.5.1 单机&集群

3.5.1 单机性能测试 & 3.5.2 集群性能测试

前提:

除了依赖数据库、缓存等外,不依赖其他后台子系统;

依赖后台子系统,但响应延迟时间在可控范围内(<1s)

补充要求:

2机集群性能至少达到单机性能的1.7倍;

4机集群性能至少达到单机性能的3倍;

业务系统(单机系统) 并发用户数 TPS/QPS Rt(Delay) 测试时间 非核心系统(×1) >=100 >=200 <=6s 24小时 核心系统(×1) >=300 >=1000 <=6s 72小时

业务系统(多机集群) 并发用户数 TPS/QPS Rt(Delay) 测试时间 非核心系统(×4) >=400 >=600 <=6s 24小时 核心系统(×4) >=1200 >=3000 <=6s 72小时

27

2.5.3 弹性&耦合

3.5.3 弹性负载测试

步骤:

单机3倍负载压力, 连续15分钟超负荷压力测试;

中止压力测试客户端, 等待30分钟,无明显下降;

恢复1倍负载压力, 进行15分钟标准压力测试;

3.5.4 耦合性负载测试

原因:后台子系统的响应延迟时间不可控

目标:解除紧耦合关系,具备一定容错能力

业务系统(单机系统) 并发用户数 TPS/QPS Rt(Delay) 测试时间 核心系统(×1) >=300 >=3000 <=6s 1小时

后台子系统延迟 并发用户数 TPS/QPS Rt(Delay) 测试时间 固定延迟120s 大于等于100 大于等于200 <=60s 1小时 随机延迟1~120s 大于等于300 大于等于1000 <=60s 1小时

28

2.6 安全检测评估

应用类型

对外提供Web服务 漏洞扫描、渗透入侵

对外提供App客户端 混淆、加壳、反篡改、反分析

参考文档

华为Web安全测试规范_V1.2.1.doc

绿盟远程安全评估系统(漏洞管理系列)用户手册.pdf

光荣之路系列测试培训-安全测试.pdf

OWASP 安全编码规范

OWASP 测试指南

OWASP 风险评级方法论

(通付盾)移动应用支付安全三战法.pdf

29

2.6.1 安全认证问题

身份认证的要求:

认证过程信息安全:不允许传输密钥,而是用密钥参与MAC运算,再做比对。

认证过程传输安全:如通过SSL方式传输;

认证信息保存安全:服务端不保存密钥;或仅保存密钥的哈希值;

会话管理的要求:

会话信息脱敏性:会话信息中不保存敏感信息,如密码、身份证等。

会话信息安全性:会话只允许授权访问,不允许匿名访问或修改。

会话管理可扩展:会话管理器不是单点,建议采用分布式架构。

第一类认证 第二类认证 典型案例 SMPP/CMPP/… HTTP-Auth(BASIC,DIGEST) 独立认证请求报文 独立认证请求报文 无 每次携带认证信息 否 每次携带认证信息 状态性 有状态 无状态 高扩展性 难,依赖分布式会话服务 易,可以透明地横向扩展 故障转移 无 有 性能优化 提高客户端性能 保护服务端性能 防重放攻击 简单 无,每次使用相同认证信息/Basic;

有,每次使用不同认证流水/Digest

30

2.6.2 安全传输问题

内部传输:

对外提供访问的IT系统,应该与核心系统的网段隔离。

部署在非核心网段上;

当其访问核心网段时,需由网络部提供合适的访问端口和服务

外部传输:

对外提供访问的IT系统,当涉及敏感信息时,

必须通过SSL等方式进行加密传输;

对用户上传的文件,必须进行充分合理的检查验证;

确保文件完整性; 【CRC,MAC】

确保文件不被篡改; 【MAC,签名】

确保上传目录范围,无可执行权限;【防止木马、病毒等】

31

2.6.3 非法注入问题

原因:

应用程序缺少对输入进行安全性检查,攻击者把一些包含指令数据发送给解释器,解释器会把收到的数据转换成指令执行。

类型:

SQL注入

导致整个数据库可被读写与修改;

攻击者还可能得到整个数据库访问权限或系统账户的访问权限;

攻击者甚至能得到操作系统管理员的权限;

OS Shell注入

LDAP注入

XPath注入

Hibernate注入

32

2.6.4 客户端APP安全*

方案1——封闭体系(iOS,TrustZone,TSM)

方案2——

防止逆向分析 (-反编译)

防止恶意篡改 (-被篡改)

防止被动态注入 (-动态跟踪)

数据的二次加密 (-数据窃取)

—加固— 反分析

移动客户端APP安全解决方案

—密信— 反篡改

—风控— 行为分析

33

2.7 应用发布规范

3.7.1. 目录结构

3.7.2. 参数配置

3.7.3. 起停脚本

3.7.4. 隔离静态资源

3.7.5. 自动打包脚本

34

2.7.1 目录结构

3.7.1 目录结构

Applications

重启脚本

日志目录

配置参数

静态

动态

WebApps

静态资源

日志目录

$(APPNAME)

----启停脚本:start.sh,stop.sh,restart.sh

----日志配置:log4j.properties 或 logback.xml

----./lib 全部依赖库(*.jar)

----./log 通过ln建立的软链接

----./conf 静态配置参数文件

$(WEBAPPNAME)

----启停脚本:start.sh,stop.sh,restart.sh

----日志配置:log4j.properties 或 logback.xml

----./WEB-INF

----./WEB-INF/classes

----./WEB-INF/lib

----./WEB-INF/conf

----./WEB-INF/jsp

----./static 静态文件(jpg/css/js等)

----./log 通过ln建立的软链接

35

2.7.2 参数配置

3.7.2 参数配置

补充:待上线的业务系统,必须提供自动化打包脚本,生成单一部署文件,在目标主机上解压即可运行,而无需再修改配置文件,从而为自动化部署提供方便。

3.7.3 启停脚本 自动化运维

3.7.4 隔离静态资源 性能

3.7.5 自动打包脚本 自动化部署

启动参数 说明 配置方式

静态配置 启动时所需,相对固定的配置参数。测试环境和生产环境的配置完全相同;多机部署时不同主机的配置完全相同。 如:组件依赖关系等。

本地化: 配置文件

动态配置 启动时所需,经常修改的配置参数。测试环境和生产环境的配置有所不同;多机部署时不同主机的配置有所不同。

如:涉及权限的用户名和密码,数据库连接池大小,线程池大小等。

集中化:配置中心

36

2.8 应用部署规范

3.8.1 自动部署脚本

参考步骤——

以普通用户登录主机,进入相应目录;

通过URL下载获取单一部署文件(tar、jar、war格式);

执行文件完整性校验;

解压部署文件(或者将war复制到J2EE容器相应位置);

执行config.sh脚本,完成jdk版本检测、log目录初始化等工作。

执行start.sh脚本,启动应用进程;

补充改进——

与Web管理平台集成;

与Docker工具集成;

增量部署 vs. 全量部署

37

2.9 应用运行规范

3.9.1 健康状态输出

业务调用接口——响应状态,响应时间;

运行指标接口——内存大小,缓存对象大小,队列大小等

3.9.2 运行指标输出——运行时产生指标参数

3.9.3 业务日志规范

避免重复日志——简要日志,STDOUT,

简要日志规范——

日志级别规范——

日志切换规范——周期(小时)

3.9.4 增量数据规划

日志文件,静态文件,数据库

备份周期?增量or全量?压缩?日志合并?NAS/磁带?

38

3.附录:上线系统快速检查表 检查项 类型 评估效果 补充说明

1.1 横向扩展/负载均衡器 硬件|软件 0缺失|1单点|2主备|3多活 1.2 横向扩展/应用系统 WEB|TCP 1单点|2主备|3多活 1.3 横向扩展/消息队列 集中|集群 1单点|2主备|3双活|4多活 1.4 横向扩展/关系数据库 DB2|MySql|… 1单点|2主备|3多读|4双写或多写 1.5 横向扩展/非关系型库 MC|Redis|… 1单点|2主备|3多读|4双写或多写 2.1 ○ 故障转移/后台服务 0缺失|1下次转移|2本次转移 2.2 ○ 故障转移/后台数据库 0缺失|1下次转移|2本次转移 3.1 ○ 流量控制/分流 0缺失|1具备 3.2 流量控制/限流 0缺失|1具备 3.3 流量控制/降级 0缺失|1具备 4.1 ● 功能测试/黑盒测试 0缺失|1测试通过 用例数=___ 4.2 功能测试/白盒覆盖率 (暂不检查) 4.3 功能测试/兼容性测试 Web-UI| 客户端 环境__;版本__ 5.1 ○ 性能测试/单机性能*1 QPS/TPS/Delay 并发数=___ 5.2 ○ 性能测试/集群性能*4 QPS/TPS/DT/*N 并发数=___ 5.3 性能测试/弹性负载 0缺失|1具备弹性 5.4 性能测试/服务耦合 0缺失|1松耦合/具备容错性 6.1 ○ 安全检测/安全认证 0缺失|1部分|2全部 6.2 ○ 安全检测/安全传输 0缺失|1部分|2全部 6.3 ○ 安全检测/非法注入 0严重|1轻微|2无 7.1 ● 发布/目录结构 0不符|1符合 7.2 ● 发布/启停脚本 0不符|1符合 7.3 ● 发布/隔离动态匹配值 0不符|1动静分离|2配置中心 7.4 ● 发布/隔离静态资源 0缺失|1具备 7.5 ● 发布/自动化打包 0缺失|1具备 8.1 ● 部署/自动化部署 0缺失|1具备 9.1 ○ 运行/健康状态检查 0缺失|1部分|2全部 9.2 ○ 运行/运行状态检查 内存|线程|队列 0缺失|1部分|2全部 9.3 ● 运行/业务日志规范 重复|切换|简要 0不符|1符合 9.4 ○ 运行/增量数据规划 日志|文件|DB 0缺失|1部分|2全部

39

Q & A

40

参考资料

20150304联动优势2015技术路线图(刘胜)v3.0324.pptx

20150122联动优势业务系统上线标准指引(技术发展中心)v0.7.0421.9.docx

20150122联动优势业务系统上线标准指引(技术发展中心)v0.7.0512.10.pdf

20150216内刊投稿(刘胜)业务系统上线标准指引v1.0.doc

公开课-研发骨干进阶架构师的15项修炼-2015年6月11-13日-北京.docx

http://wdhdmx.iteye.com/blog/1553506 《一线架构师实践指南》读书笔记

41

集群方式 说明 可用性% 年停机

单机方式 1 -(88/24/365) 99(假设) 87.6H

双机集群 1 -(88/24/365)^2 99.99 53m

三机集群 1 -(88/24/365)^3 99.9999 32s

1 概念:系统可用性

系统可用性 = 运行时间 / (运行时间+停机时间) 集中式高可用 vs. 分布式高可用

术语 说明 可用性% 年停机 容灾 说明

Available 较可用 99 87.6H 无 一般业务

Highly Available 高可用 99.9 8.8H 局部 故障恢复,主备

Extremely Available 极可用 99.99 53m 较强 自动故障转移

Most Available 最可用 99.999 5m 最强 自动灾难恢复

可 用 性 级 别

99%

投入成本

99.9% 99.99% 99.999%