2019年下半年试题二:论软件系统架构评估及其应用
论文库链接:系统架构设计师论文
论文题目
对于软件系统,尤其是大规模复杂软件系统而言,软件系统架构对于确保最终系统的质量具有十分重要的意义。在系统架构设计结束后,为保证架构设计的合理性、完整性和针对性,保证系统质量,降低成本及投资风险,需要对设计好的系统架构进行评估。架构评估是软件开发过程中的重要环节。
请围绕“论软件系统架构评估及其应用”论题,依次从以下三个方面进行论述。
1.概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。
2.详细阐述有哪些不同的软件系统架构评估方法,并从评估目标、质量属性和评估活动等方面论述其区别。
3.详细说明尼所参与的软件开发项目中,使用了哪种评估方法,具体实施过程和效果如何。
论文模板
论软件系统架构评估及其应用
摘要
本文以我参与的清算平台建设为例,论述了软件系统架构评估及其应用。该项目的目标是构建统一的网联交易清算平台,将第三方支付公司和银行之间的数据交互隔离并解耦,以利于央行对支付数据的风险监控诉求。该项目存在影响范围广、涉及单位多、性能要求高等难度与挑战。在此项目中,我作为系统架构师及主要管理人员,参与了该项目的需求开发、系统架构设计等主导工作。我们经过实践认为架构评估是软件开发过程中的重要环节。主要的评估方法有架构权衡分析法(ATAM)、软件架构分析法(SAAM)等。选择正确的系统架构评估方法,对于保证架构设计的合理性、完整性和针对性,保证系统质量,降低成本及投资风险,都是很有必要的。网联项目的系统架构经过严格、严肃的评估并付诸实施,在各方面取得了成功。
正文
随着电子商务的发展,线上支付领域在最近十年获得了爆发式增长。尤其是微信支付、支付宝两大巨头的出现,深刻影响了人们的移动支付方式。“双十一”“618”等场景的出现,进一步促进了互联网支付的深度发展。然而,各大支付公司为了发展代扣用户银行账户余额额业务,几乎接入了每一家大大小小的银行。支付公司和银行之间形成了“网状”的数据通信,引发了央行的持续关注,认为这种“网状”数据通信不利于资金的监管、风险调控等,进而提出要在支付公司和银行之间设立“网联清算平台”,解耦并隔离银行和支付公司的直接通信,并设立风控机构,以期解决上述提出的各项问题。2022年8月,作为系统架构师及主要管理人员,我有幸参与并主导了这个国家级重点工程,并在项目实践了系统架构评估方法及应用,得到了项目组成员的认可。下面重点阐述我在本项目中的实践。
目前最主要的架构评估方法有两种,分别详述如下:
1.架构权衡分析法(ATAM)
ATAM主要针对性能、可用性、安全性、可修改性等质量属性进行评估和折中,其目标是在考虑多个相互影响的质量属性的情况下,从原则上提供一种理解软件体系结构的能力的方法。ATAM的主要活动包括需求收集、架构视图描述、属性模型构造和分析、架构决策与折中等。
2.基于场景的架构分析法(SAAM)
SAAM把任何形式的质量属性都具体化为场景,使用场景技术为评估技术,以场景代表描述体系结构属性的基础,描述了各种系统必须支持的活动和将要发生的变化。SAAM的目标是描述应用程序属性的文档,验证基本的体系结构假设和原则。SAAM的目标是描述应用程序属性的文档,验证基本的体系结构假设和原则。SAAM评估活动包括:场景开发、架构描述、单个场景评估、多个场景交互评估、总体评估。
选择正确的系统架构评估方法,能够保证架构设计的合理性、完整性和针对性,保证系统质量,降低成本及投资风险。所以网联项目组在对架构评估方法选型时,结合网联平台自身的重要性和国家金融基础设施的特点,仔细考察、反复对比了两种主要的方法,最终采用了ATAM为架构评估方法。
项目建设的网联平台本身是一个涉及面比较广泛、影响比较大的国家级工程,它向前对接中国所有的支付公司,向后对接中国所有的银行,中国所有的支付交易全部要经过网联平台,才能发生实质性的个人银行账户金额划转。所以网联平台建设对非功能质量属性的要求非常高,需要分析很多重要且关键的质量属性,例如性能、可用性、安全性、可修改性等,并在格质量属性中做好权衡、折中。而ATAM在评估技术、关注质量属性、特定目标、方法活动、产出的质量属性效应树等各方面都完美匹配网联平台的评估需求。在架构设计完成之后,网联项目组设计了架构评估的工作流程。参与架构评估的人员来自比较重要的支付公司和银行的首席架构师、技术负责人、支付领域业务专家、央行支付的技术领导以及网联的产品负责人、技术线负责人和关键领导等。重要干系人一起参与整个架构评估工作。整个工作分为4个阶段进行。
一、描述和介绍阶段
作为网联项目的架构师,我首先向大家介绍了ATAM架构评估方法的流程以及细则,确保大家理解ATAM方法的运作过程。然后由网联的产品负责人着重讲述网联平台建设的业务动机,包括央行对网联的关键业务需求、技术指标、功能范围,以及各银行和支付公司对网联的接入诉求等,确保大家明确网联平台建设的根本目的。最后由我来描述网联平台的总体架构设计、各业务模块划分及交互、关键技术选型等。
二、调查和分析阶段
由各单位代表提出场景诉求,并加以记录和归类整理,生成质量属性效应树。比如,支付宝技术负责人提出“‘双十一’等高峰支付场景下,网联平台须有能力处理100万并发请求的能力”归类为性能属性 ;微信支付的架构师提出“正常情况下,用户的支付结果响应要在100ms内返回”也归类为性能属性;工商银行的领域专家提出“由于交易中包含用户的敏感信息,所以网络请求需要提升加密力度,比如采用RSA算法”归类为安全是属性;央行的技术领导提出“网联作为国家基础设施,必须有技术手段保证机房发生问题时,秒级切换到备用机房”归类为可用性属性;网联自己的应用技术负责人也提出“在后期迭代过程中,系统要容易扩展新功能”归类为可修改属性。
经过调查所有相关方的诉求后,我们收集了上百个场景,并根据重要性对这些场景设置了权重,通过归纳和整理,我们得到了一颗质量属性效应树。初步分析后我们发现,大多数场景的权重值集中于:性能、可用性、安全性、可修改性四个属性。然后,我们组织网联项目组的各技术线负责人、技术骨干、架构小组来一起进行分析,进一步识别其中的权衡点、敏感点和风险点。比如“采用RSA加密算法虽然能提升安全性,但计算量比较大,会影响请求响应时间”属于权衡点;“对可用性达到99.9999%的要求可能会因为采用主动冗余技术,而造成投入的软硬件成本急剧增加”属于敏感点;“如果机房建设未能如期完成,可能导致系统架构部分实现,从而影响整体功能”属于风险点。
三、测试阶段
由于我们在前一阶段确定了场景的权重,并因此归纳出了网联平台对于质量属性的优先级,即性能和可用性最高,而安全性、可修改性较低。我们依据属性优先级来校验我们最终的架构方案,并充分评估实现方案的可行性和合理性。性能方面,我们架设了北京、上海、深圳三地六中心机房,同时接受支付公司的流量,在每个机房内部署100套微服务实例,并做好负载均衡硬件,提升接入层的可用性;应用层采用负载均衡的分布式集群的微服务架构,提升应用服务器的整体可用性;数据层采用MySQL主从模式的主动冗余技术,以及分库分表技术带来的进一步降低出现问题时的影响范围。在权衡点做决策时,我们依据优先保证系统性能的原则。比如我们采用计算量不大的对称加密算法,保证系统性能不受影响,但通过定时自动更换对称密钥的机制,来降低对称密钥被破解带来的风险,从而在性能和安全性之间达到最佳选择。另外我们对于所有敏感点和风险点做了详细的评估,并做了充分的预案设计和应对流程设计。
四、报告阶段
经过架构评估,我们将评估的过程和结果汇总整理成文档。文档包括架构分析方法文档、不同场景及优先级、质量属性效应树、权衡点决策、风险点评估、会议记录等。
综上所述,由于运用了ATAM的评估方法和活动流程,我们做出了合理的架构决策,保证了架构设计的正确性,验证了各项质量需求,保障了系统实现、测试、验收等工作的顺利实施。网联平台上线以来,得到了支付行业内的持续关注,由于架构合理且考虑周全,进展比较顺利,得到了行业内外的认可。我们还持续优化并升级扩展机房规模,在最近几年的“双十一”和“618”等场景下,经受了大并发的性能考验。这也充分说明了在当今信息系统建设中,以ATAM为代表的架构评估方法是验证架构设计的最重要手段。
相关文章:

2019年下半年试题二:论软件系统架构评估及其应用
论文库链接:系统架构设计师论文 论文题目 对于软件系统,尤其是大规模复杂软件系统而言,软件系统架构对于确保最终系统的质量具有十分重要的意义。在系统架构设计结束后,为保证架构设计的合理性、完整性和针对性,保证系…...

网络自动化04:python实现ACL匹配信息(主机与主机信息)
目录 背景分析代码代码解读代码总体结构1. load_pattern_from_excel 函数2. match_and_append_pattern 函数3. main 函数总结 最终的效果: 今天不分享netmiko,今天分享一个用python提升工作效率的小案例:acl梳理时的信息匹配。 背景 最近同事…...

字典树介绍以及C++实现
字典树的概念 字典树(Trie),又称为前缀树或单词查找树,是一种树形数据结构,主要用于存储具有相同前缀的字符串集合。它特别适合用于词典中的单词查找、自动补全、拼写检查等应用。 字典树算法的核心思想就是每层存入…...

【C++】用红黑树封装set和map
在C标准库中,set容器和map容器的底层都是红黑树,它们的各种接口都是基于红黑树来实现的,我们在这篇文章中已经模拟实现了红黑树 ->【C】红黑树,接下来我们在此红黑树的基础上来看看如何封装set和map。 一、共用一颗红黑树 我…...

【大数据测试HDFS + Flask详细教程与实例】
大数据测试HDFS Flask 1. 环境准备安装工具安装Hadoop(以单机模式为例)安装Flask和HDFS Python客户端 2. HDFS Flask基本架构基本文件结构 3. 创建Flask应用与与HDFS交互步骤1:配置HDFS连接步骤2:构建Flask应用 4. 创建前端界面…...

高级java每日一道面试题-2024年10月31日-RabbitMQ篇-RabbitMQ中vhost的作用是什么?
如果有遗漏,评论区告诉我进行补充 面试官: RabbitMQ中vhost的作用是什么? 我回答: 在Java高级面试中,关于RabbitMQ中vhost(虚拟主机)的作用是一个重要且常见的考点。以下是对vhost的详细解释: 一、vhost的基本概念 vhost&am…...

【日常记录-Java】代码配置Logback
1. 简介 在Logback中,推荐使用配置文件(如logback.xml或logback-spring.xml)来设置日志记录的行为。但在实际应用中,会有动态配置logback的需求。此时可通过编程的方式直接操作LoggerContext以及相关的Logger、Appender、Encoder等…...

HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?
HTTP 请求头(Request Headers)用于在 HTTP 请求中携带额外的信息,帮助服务器更好地处理请求。以下是一些常见的 HTTP 请求头及其作用: 常见请求头及其作用 1. Accept 作用:告知服务器客户端可以接受的内容类型。示例…...

电信数据清洗案例:利用MapReduce实现高效数据预处理
电信数据清洗案例:利用MapReduce实现高效数据预处理 在大数据时代,电信行业积累了大量的用户通话、短信、上网等行为数据。在数据分析和机器学习模型训练前,对这些数据进行清洗是至关重要的一步。MapReduce 是一种高效的数据处理模型&#x…...

react 中 FC 模块作用
React.FC 是一个泛型类型,用于定义函数组件的类型 一、类型定义和代码可读性 1. 明确组件类型 使用React.FC定义一个组件时,使得组件的输入(props)和输出(返回的 React 元素)都有明确的类型定义。 impo…...

多模态大模型(1)--CLIP
CLIP(Contrastive Language-Image Pre-training)模型是一种多模态预训练神经网络,由OpenAI在2021年发布。它通过对比学习的方式,将图像和文本映射到同一个向量空间中,从而实现跨模态的检索和分类。下面介绍其基础功能&…...

opencv入门学习总结
opencv学习总结 不多bb,直接上代码!!! 案例一: import cv2 # 返回当前安装的 OpenCV 库的版本信息 并且是字符串格式 print(cv2.getVersionString()) """ 作用:它可以读取不同格式的图像文…...

C/C++内存管理 | new的机制 | 重载自己的operator new
一、C/C内存分布 1. 内存分区 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信 .堆用于程序运行时动态内…...

知识库管理系统:企业数字化转型的加速器
在数字化转型的大潮中,知识库管理系统(KBMS)已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性,以及如何快速搭建企业知识库。 知识库管理系统是什么? 知识库管理系统…...

uniapp 如何使用vuex store (亲测)
首先是安装: npm install vuexnext --save 安装之后,Vue2 这样写 不管在哪里,建立一个JS文件,假设命名:store.js 代码这样写: import Vue from vue; import Vuex from vuex;Vue.use(Vuex);const store…...

[编译报错]ImportError: No module named _sqlite3解决办法
1. 问题描述: 在使用python进行代码编译时,提示下面报错: "/home/bspuser/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py", line 18, in <module>import sqlite3File "/usr/local/lib/python2.7/sqlite3/_…...

【旷视科技-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

python学习记录16
字符串总结 python程序使用unicode编码,中文字符与英文字符都占一个字符,但英文字符只占一个字节,中文字符若按照utf-8格式编码占3个字节。 (1)字符串常用方法 1)大小写转化 string.upper()#将所有字母…...

AI 大模型在软件开发中的角色

React中类组件和函数组件的理解和区别
react代码模块分为类组件和函数组件。 从语法和定义、内部状态管理、生命周期、性能、可读性和维护性、上下文、集成状态管理库等角度对比React中类组件和函数组件。 1、语法和定义 类组件: 使用 ES6 的类(class)语法定义的 React 组件。…...

Day62||prim算法精讲 |kruskal算法精讲
prim算法精讲 53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同&…...

upload-labs通关练习
目录 环境搭建 第一关 第二关 第三关 第四关 第五关 第六关 第七关 第八关 第九关 第十关 第十一关 第十二关 第十三关 第十四关 第十五关 第十六关 第十七关 第十八关 第十九关 第二十关 总结 环境搭建 upload-labs是一个使用php语言编写的,…...

wordpress搭建主题可配置json
网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题,你需要先安装好主题,然后可以导入我的json文件一键配置。 需要json界面配置文件的,可以在评论区回复,看见评论我会私发给你。~...

RWKV-5/6 论文被 COLM 2024 收录
由 Bo PENG 和 RWKV 开源社区共同完成的 RWKV-5/6架构论文《Eagle and Finch: RWKV with Matrix-Valued States and Dynamic Recurrence》被顶级会议 COLM 2024 收录。 这是继 RWKV-4 架构论文《RWKV: Reinventing RNNs for the Transformer Era》被 EMNLP 2023 收录之后&…...

MinIO分片下载超大文件
一、前言 各位亲爱的们,之前介绍过了上传超大文件到MinIO: MinIO分片上传超大文件(纯服务端)MinIO分片上传超大文件(非纯服务端) 这里最后再补充一下从MinIO下载超大文件。 二、从MinIO分片下载大文件 …...

Vue3 -- 新组件【谁学谁真香系列6】
Teleport Teleport是什么?–Teleport是一种能够将我们的组件html结构移动到指定位置的技术。 父组件: <template><div calss="outer"><h2>我是App组件</h2><img src="https://z1.ax1x.com/2023/11/19/piNxLo4.jpg" alt=&qu…...

Openstack3--本地仓库搭建(ftp源搭建失败)
上传镜像 后面的ftp源做不了,请将下面的本地openstack源在控制节点和计算节点都配置 在控制节点上传,安装ftp并配置启动后再在计算节点配置 将openStack-train.iso文件通过MobaXterm远程连接软件上传至控制节点 /opt 目录下 挂载 进入 /opt 目录 创建…...

【初阶数据结构与算法】链表刷题之移除链表元素、反转链表、找中间节点、合并有序链表、链表的回文结构
文章目录 一、移除链表元素思路一思路二 二、合并两个有序链表思路:优化: 三、反转链表思路一思路二 四、链表的中间节点思路一思路二 五、综合应用之链表的回文结构思路一:思路二: 一、移除链表元素 题目链接:https:…...

【PGCCC】Postgresql Toast 原理
前言 上篇博客讲述了 postgresql 如何存储变长数据,它的应用主要是在 toast 。Toast 在存储大型数据时,会将它存储在单独的表中(称为 toast 表)。因为 postgresql 的 tuple(行数据)是存在在 Page 中的&…...

vue3使用element-plus,树组件el-tree增加引导线
vue3使用element-plus,树组件el-tree增加引导线 vue3项目element-plus,树组件el-tree增加引导线 element-plus组件库的el-tree样式 因为element的样式不满足当前的的需求,UI图,所以对el-tree进行增加了引导线 修改样式如下&am…...