架构设计00-架构师知识体系04-怎么做架构设计

简介: 架构设计00-架构师知识体系04-怎么做架构设计

架构设计系列文章,请参见连接。
封面

背景

写出一份富有感情并对实际工作有指导意义的文章非常不容易。因为工作忙没有时间去梳理与整理这方面的思路是主要原因,但也有人越来越懒、越来越多事情要想造成的问题。而最近会重拾起写作这件事,因为只有对自己的提升才是对自己最大的认可与投资。

随着工作方向的变化,作者本人也对与架构设计的工作遗忘了很多。为了更好的为实际工作做指导,并且时刻保持有效、可靠的架构决策作者准备把之前在各种情况下做的架构设计过程做一个抽象并记录下来。

前面的文章中有关于架构设计理念的描述,架构设计理念是对架构设计的一个高度抽象。也会有架构师知识体系这样纯知识体系的内容。而对于一个架构师应该怎样进行架构设计,架构设计的过程是什么样的业界也有很完善的体系,比如说:MDD、DDD、风险驱动设计,演进式架构等。而本篇是作者在实际工作中真正使用到的架构设计过程。

因作者的知识面、工作方向、从业经验的影响,本文中肯定会有各种遗漏和欠缺。但这里的思路也代表着一种实际实践过程中的指导,故还是写下来。

方向

这里先需要明确一下本篇文章中架构设计具体是指那个方向的架构设计。软件的架构设计可以分为:企业架构(EA),业务架构(BA),技术架构(TA)。三个不同的方向就会有三个不同的设计过程与设计结果,所以这里简单的说一下这三个方向:

  1. 企业架构规划整个企业的业务蓝图。对蓝图进行拆解与实施。例如:TOGAF,ZACHMAN这样的EA。
  2. 业务架构是把企业的业务战略转化为日常运作的渠道,业务战略决定业务架构,它包括业务的运营模式、流程体系、组织结构、地域分布等内容。(TOGAF中的定义)
  3. IT架构对于企业架构与业务架构具体落地到技术层面时应该使用技术结构。
  4. 技术架构对于纯技术领域中关于架构的内容。例如:区块链的架构,人工智能的架构。

对于国内从事架构设计方向的大多数人来说最主要的方向还是集中在IT架构上。所以这里也集中说明IT架构的设计过程与方法。

步骤

  • 问题域的定义:

摆在架构师面前的问题是架构需要设计哪些东西?架构要涉及到多少细节?怎样的设计才能让团队顺利实施?对于一个产品来讲技术资产应该怎样进行管理?

针对这些问题,或者更多的架构设计问题应该以怎样的步骤去解决问题?怎样的工具去解决问题?

  • 解决域工具:

针对上面的问题需要有实际的工具和方法去指导架构师应该怎样完成工作,下面结合过程和方法对这部分进行说明:

  1. 软件需求=功能需求+非功能需求+约束:

每个项目都有自己的特点,在接触一个新的项目或着接收一个遗留系统的时候最长听见的一句话是:我们的系统逻辑不像其他的,我们的业务逻辑很复杂。而在架构设计前期最主要的工作就是了解功能、非功能、约束方面的内容。例如:一个业务流程是业务功能方面的需求,整体系统设计容量或现阶段容量、稳定性、安全方面就是非功能需求,再比如是不是有必须要在遗留系统里面保留的内容,是不是遗留系统不可能一步替换掉,用户的操作方式是否可以变更这个就是约束。
这部分主要是为了了解系统需要解决的问题,不管是业务问题还是技术问题,还是其他问题都需要了解清楚。在了解清楚问题域的情况下才能对整体系统有系统型的设计。
而在软件需求阶段有两个比较重要的产出物:容量评估约束列表
容量评估实践过程,可以参考:滴滴内部线上系统的容量评估方法微服务负载保护设计方法,还有作者写的帮Stack Overflow评估一下性能指标
约束列表就是将项目/产品中关于必须遵守的约定进行记录,以方便之后进行查询与参照。

  1. 设计方法选择:

设计方法可以选择数据驱动设计(设计数据流,数据存储结构等),模型驱动设计(UML),领域驱动设计(DDD),风险驱动设计(RDD),演进式设计(EDD)。在一个项目中不可能只选择一种设计方法进行设计工作,所以一般会采用多种方式结合的方式进行架构设计工作。

  1. 架构模式选择:

采用云架构还是采用微服务架构其实是需要进行抉择的。就像在IoT项目中最好的方式是使用《控制环路模式》去做相关的架构设计。在区块链系统的架构中最好使用P2P的方式进行架构设计。所以,需要根据不同的项目采用不同的架构模式进行设计。不过选择架构模式是也可能会遇到约束的问题,比如说公司/客户要求必须使用微服务进行设计。针对这部分有要求的项目/产品就需要遵守约束中的规定。
在选择架构模式是也不是只选择一种架构模式,肯定是需要选择一个主架构模式,再选择几个辅助架构模式,使用多种架构模式结合的方式进行架构的设计工作。

  1. 架构全景图

选择完成设计方法、架构模式的选择之后,就需要制定一张完整的架构全景图。全景图包括:业务全景图架构全景图
业务蓝图可以代表业务的整体情况。
架构全景图代表架构中对于业务的拆分以及业务拆分之间的关系。

  1. 填充细节

在有了全景图之后,就需要对架构设计的细节进行填充。填充的内容包括:业务拆解业务核心流程设计技术选型非功能设计

  1. 架构设计演进

对于软件系统搭建完成之后,就意味着架构已经开始老化了。而应对架构老化的问题就必须进行架构的演进。而架构演化的过程需要有合适的时候将功能/代码下线。所以这个阶段就是服务治理的过程。

以上描述的是项目架构从0到1的过程。而对于架构从1到100的过程就需要持续的演进动作。而演进过程中要谨防的是架构的腐化,防止架构中被遗留代码/服务/项目限制架构的发展。

实施

上面已经说明了架构设计的步骤,而现实中对于这个过程的实施也会有所不同。这里再次说明一下具体实施过程中要做的事情:

  1. 非功能需求确认

询问客户系统中的用户数、sku/spu数、交易数、活跃时间、单页面停留时间等信息。

  1. 容量评估

收集到这些信息之后再根据上面提供的容量评估方法进行容量评估即可。

  1. 整体架构设计

选择架构模式、技术栈后将整体架构按照架构模式的内容拆分为架构模式中所需要的组件。

  1. 核心流程设计

进行细节核心流程的设计。比如说交易系统的交易流程。

  1. 核心存储结构设计

根据容量评估进行存储的设计。包括:对象存储,内容发布网络,缓存,数据库等。

  1. 可靠性、性能、稳定性设计

还是根据容量评估进行非功能型方面的设计。

对于完全新系统来说可以进行这样的设计过程,但对于需要兼容遗留系统的设计过程需要考虑遗留系统的特点。遗留系统最可能使用的方式是使用Sidecar模式进行设计。

总结

前面有关于架构设计原则指导,还有架构师的知识体系,这里又说明了个人的架构设计过程。也算是相对完善的阐述了作者对于架构设计的理解。不过之后还是会输出关于其他方法论的具体理解的文章。

参考

为什么大部分人做不了架构师?这2点是关键
企业架构方法论可以简化吗?

你是个软件架构师吗?

架构师及其目标在软件项目中的挫折感
给敏捷团队中的架构师的 10 个建议
架构:系统的概要设计
架构师成功沟通的 3 个关键

目录
相关文章
|
1月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
23 0
|
3月前
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到架构设计借鉴
Tomcat 架构原理解析到架构设计借鉴
106 0
|
24天前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
|
1月前
|
存储 消息中间件 算法
深度思考:架构师必须掌握的五大类架构设计风格
数据流风格注重数据在组件间的流动,适合处理大量数据。调用返回风格则强调函数或方法的调用与返回,过程清晰明了。独立构件风格让每个构件独立运作,通过接口交互,提升灵活性和可重用性。虚拟机风格则模拟完整系统,实现资源的高效利用。
深度思考:架构师必须掌握的五大类架构设计风格
|
1月前
|
设计模式 架构师 前端开发
架构师进阶篇-什么是架构师
架构师进阶篇-什么是架构师
56 0
|
3月前
|
人工智能 运维 架构师
数美科技首席架构师陈建:基于云上弹性的高可用实时风控架构实践
2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,北京数美时代科技有限公司首席架构师陈建在【CloudOps云上运维专场】发表了题为《基于云上弹性的高可用实时风控架构实践》的主题演讲,从在线实时风控架构及高可用解决方案等方向做了分享。
|
4月前
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。
|
7天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
7天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
1天前
|
监控 测试技术 持续交付
探索现代微服务架构的最佳实践
【4月更文挑战第25天】 随着软件开发领域不断演进,微服务架构已成为设计灵活、可扩展且高度可维护系统的首选方案。本文将深入探讨构建和部署微服务时的关键最佳实践,涵盖从服务划分原则到持续集成/持续部署(CI/CD)的流程,再到监控与日志记录的策略。我们的目标是为开发者提供一套实用的指南,帮助他们在构建未来的应用程序时做出明智的架构选择,并确保这些系统能够快速响应市场和技术的变化。