# 解决方案架构的文档

解决方案架构的文档提供了一种端到端的应用程序视图,它可以解决与应用程序开发相关的需求,并帮助大家达成共识。解决方案架构文档有助于实现以下目的:

  • 向利益相关者传达端到端的应用程序解决方案
  • 提供高层次架构和不同的应用程序设计视图,以满足应用程序的服务要求
  • 提供解决方案对业务需求的可追溯性,并关注应用程序如何满足所有的功能性和非功能性需求
  • 提供设计、构建、测试和实施所需解决方案的所有视图
  • 定义解决方案的影响,以便评估、规划和交付
  • 定义解决方案的业务流程、延续和运维方式,以便能够在系统上线后不间断运行

# 文档的视图

解决方案架构文档的整体视图包括从业务需求派生出的各种视图,涵盖了不同方面

为满足不同角色的需求,解决方案架构文档应该尽可能满足以下视图:

  • 业务视图:显示整体解决方案和产品的价值主张,可以选择识别出于业务相关的高级场景,并将其以用例图的形式展现出来。另外,业务视图还描述了利益相关者和执行项目所需的资源。
  • 逻辑视图:展示了系统上的各种程序包,以便业务用户和设计人员可以了解系统的各种逻辑组件。逻辑视图能显示出系统多个组件是如何连接以及用户如何与其交互的。
  • 流程视图:呈现了更多的业务细节,它可以显示系统的关键流程如何进行协作。
  • 部署视图:展示英语程序如何在生产环境中工作,以及系统的不同组件(防火墙、负载均衡器、应用服务器等)是如何连接的。应该使用便于用户理解的简单框图或者UML部署图向团队展示各种节点组件及其依赖关系。
  • 实现视图:体现了架构上和技术上的选择,例如要显示它是n层架构还是事件驱动架构,及其背后的理由。还需要说明技术的选择,以及他们各自的利弊,需要在实现视图中说明执行项目所需的资源和技能,开发团队通过实现视图来创建详细的设计。
  • 数据视图:大多数的应用程序都是数据驱动的,数据视图显示了数据如何在不同的组件之间流动,以及如何存储。数据视图可以用来解释数据的安全性和数据完整性,可以用ER图来显示数据库中不同的表和模式之间的关系。
  • 运维视图:解释了系统在启动后如何进行维护,需要定义SLA、告警和监控功能、灾难恢复计划等,它还需要提供有关系统维护的详细信息,包括修复bug、打补丁、备份和恢复、处理安全事件等。

# 文档的结构

解决方案架构文档的结构大致如下图所示:

# 解决方案概述

在解决方案概述部分,我们需要简要介绍解决方案,粗略的描述解决方案不同的组件。主要的部分包括:

  • 解决方案的目的:提供所要解决的业务问题的简要介绍,以及建立特定解决方案的理由。
  • 解决方案的范围:对业务范围进行说明,明确描述解决方案不处理的范围外内容。
  • 解决方案的假设:列出解决方案所基于的假设,例如,最小网络带宽的可用性。
  • 解决方案的限制:列出所有技术、业务和资源的限制,还可以强调风险和缓解计划。
  • 解决方案的依赖关系:列出所有上游和下游的依赖关系,例如订单系统需要同仓储系统和运输系统进行通信。
  • 关键架构决策:列出主要问题的说明和相应解决方案的建议,描述每个方案的优缺点。以及做出特定决策的原因。

# 业务上下文

在业务上下文部分,需要提供关于解决方案所支撑的业务功能和要满足业务需求的概述。这部分主要包括:

  • 业务功能:提供解决方案所涉及业务功能的简要描述,确保其中描述了功能的优势,以及它们将如何满足客户需求。
  • 关键业务需求:列举解决方案要解决的所有关键业务问题,提供关键需求的高层视图。
  • 关键业务流程:使用流程文档或者流程图来说明关键流程。
  • 业务利益相关方:列出受项目直接或间接影响的利益相关方,包括开发人员、终端用户、供应商、合作伙伴等等。
  • 非功能性需求:包含可伸缩性、可用性和可靠性、性能、可移植性和容量等等。

# 概念解决方案概述

概念解决方案概述提供了一个抽象图,可以捕捉到解决方案的全面,其中包含技术和业务两个方面。它有助于仔细的完善和优化解决方案架构,以支持解决方案的设计和实施。

# 解决方案架构

解决方案架构部分会深入介绍架构的每一部分,并且提供了不同的视图,团队可以使用这些视图来创建详细设计并实施。这些视图可以针对不同的人群,主要的内容如下:

  • 信息架构:提供了应用程序的用户导航的信息流程。
  • 应用架构:针对开发团队,提供更多的实施细节。
  • 数据架构:针对DBA和开发团队,方便其了解数据库模式和表之间如何相互关联。
  • 集成架构:针对供应商、合作伙伴或者其他团队,列举应用程序相关上下游系统,以及它们之间的依赖关系。
  • 基础设施架构:针对运维团队,给出服务器的逻辑位置及其依赖关系。
  • 安全架构:包括身份和访问管理、基础设施的安全防控、应用程序的安全保护、数据传输加密防护等。

# 解决方案实施

解决方案实施部分包括开发和部署到基本注意事项,主要包含:

  • 开发:讨论开发工具、编程语言、代码库、代码版本控制和分支策略。
  • 部署:讲述部署方式、部署工具、各种部署组件、部署清单及其选择依据。
  • 数据迁移:描述数据迁移和采集方式、数据迁移范围、数据对象、数据来源、数据格式以及对应所使用的工具。
  • 应用系统停用:列出现有系统的退出策略,提供旧系统停用的方法和时间表,并进行整体影响评估。

# 解决方案管理

解决方案管理部分专注于生产环境支持和其他非生产环境的持续系统维护,主要解决如下几类问题:

  • 运维管理,如系统补丁和开发、测试、用户验收、生产环境的升级。
  • 管理应用程序升级和新版本的工具。
  • 管理系统基础设施的工具。
  • 系统监控和告警,运维仪表盘。
  • 生产环境支持、SLA和事件管理。
  • 灾难恢复和业务流程延续。