写点什么

架构漫谈(六):软件架构到底是要解决什么问题?

  • 2016-03-22
  • 本文字数:2940 字

    阅读完需:约 10 分钟

架构漫谈是由资深架构师王概凯 Kevin 执笔的系列专栏,专栏将会以 Kevin 的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题。

本文是漫谈架构专栏的第六篇,作者 Kevin 继续沿着前几篇文章的思路,探讨了软件架构为什么要有软件架构,进而再去解释什么是软件架构。这和最近网上疯传的黄金圆环(Why-How-What)思路非常贴合。

前一篇文章简述了什么是软件。那么什么是软件架构呢?按照惯例,我们来看看是什么问题,是谁的问题。

要解决谁的问题?

如前所述,软件实际上就是把现实生活模拟到计算机中,并且软件是需要在计算机的硬件中运行起来的。要做到这一点需要解决两个问题:

一、业务问题

具体的现实生活状态下,没有软件的时候,所解决的问题的主体是谁,解决的是什么问题,是如何解决,如何运作的?

二、计算机问题

  1. 如何把现实生活用软件来模拟?
  2. 模拟出来的软件,需要哪些硬件设施才能够满足要求? 并且当访问量越来越大的时候,软件能否支持硬件慢慢长大,性能线性扩展?
  3. 因为硬件是可能会失效的,软件如何在硬件失效的情况下,仍然能够保证可用性,让用户能够不中断的访问软件提供的服务?
  4. 怎么收集软件产生的数据,为下一阶段的工作提供依据?

分别是谁的问题呢?

  1. 业务的 owner 需要提升业务的效率,降低业务的成本,这是动机。这个实际上就是业务的问题,所以一般软件开发的出发点就在这里。
  2. 是软件工程师的问题,要解决业务 owner 把业务虚拟化的问题,并且要解决软件开发和运营的生命周期的问题。

(点击放大图像)

分别有什么问题?

  1. 业务问题的本质,是业务所服务的对象的利益问题,明白了这个,就很容易搞清业务的概念和组织方式。再次强调一下,有了软件,可以降低业务的成本,没有软件的情况下,业务是一样跑的。如果只是为了跟风要用软件,说不定反而提高了成本,这个是采用软件之前首先要先搞清楚的。我们经常说软件和技术是业务的 enabler,实际就是把原来成本很高的降到到了很低的程度而已,并不是有了什么新的业务。另外软件也不是降低业务成本的唯一方式。
  2. 为了能够让软件很好的跑起来,软件工程师必须理解业务所服务的对象,他们的利益所在,即业务问题。业务面对这些问题是如何分拆解决的? 涉及到了哪些概念? 这些概念分别解决了哪些哪些问题? 我们不能自己按照自己的理解,用自己的一套概念体系来表述。如果这么做的话,会导致两个问题:
  • 业务无法和我们交流,因为他们无法明白我们所自己创建的概念,所以他们无法确认我们的理解是否正确。
  • 我们所表述的东西,并没有在实际生活中实践过,我们也不知道这些概念是否能够解决业务的问题。
  1. 软件工程师还必须要考虑,用什么样的硬件把软件跑起来,怎样跑得好,跑得快,并且可以随着业务的流量逐渐的长大?

分析问题

对于 2,在有限的时间下,软件工程师毫无疑问无法一个人去完成这么多事情,那么我们需要把所做的事情列出来,进行分析。

一、虚拟化业务需要完成这些事情:

  1. 学习业务知识,认识业务所涉及的 stakeholders 的核心利益述求,以及业务是如何分拆满足这些利益述求,并通过怎样的组织架构完成整个组织的核心利益的,以及业务运作的流程,涉及到哪些概念,有哪些权利和责任等。
  2. 通过对业务知识的学习,针对这些概念所对应的权利和责任以及组织架构,对业务进行建模,把并把建模的结果用编程语言实现。这是业务的模型,通常是现实生活中利益斗争的结果,是非常稳定的。
  3. 学习业务所参与的 stakeholder 是如何和业务打交道,并完成每个人的权利和义务的,并通过编程语言,结合业务模型实现这些打交道的沟通通道。这部分是变化最频繁的,属于组合关系。明白了这一点,对后续的实现非常有帮助。
  4. 如何把业务运行的结果,持久化,并通过合适的手段把持久化后的数据,在合适的时间合适的地点加载出来。这部分和基础设施有关,变化可能也会比较频繁。

二、代码如何运营,需要完成这些事情:

  1. 需要多少硬件设备来满足访问的需求?
  2. 代码要分成多少个组件部署到哪些硬件设备上?
  3. 这些代码如何通过硬件设备互相连接在一起?
  4. 当业务流量增大到超过一台机器的容量时,软件能否支持通过部署到新增机器上的方式,扩大对业务的支撑?
  5. 当某台或某些硬件设备失效时,软件是否仍然能够不影响用户的访问。
  6. 软件运行产生的数据,能否支持提取出来并加以分析,为下一轮的业务决策提供依据。

三、如果分成不同的角色来完成这些事情,就需要一个组织架构来组织代码的编写和运营,需要做哪些事情:

  1. 完成一和二所列的这些事情,需要哪些角色参与?
  2. 这些事情基本都需要顺序的发生,如何保证信息在不同角色的传递过程中不会有损失? 或者说即使有损失,也能快速纠正?
  3. 这些角色之间是如何协调,才能共同完成虚拟化业务的需求?

会生成哪些架构

如果业务足够简单,用户流量够小,时间要求也不急迫,那么一个人,一台机器就够了,这个时候一般不会去讨论架构的问题。当访问的流量越来越大,机器就会越来越多,代码的部署单元就会拆分的越来越多。

同样就会需要越来越多的人来完成拆分出来的越来越多的部署单元,甚至同一个部署单元也需要分拆为多人合作完成。但是我们需要注意到一点,整个的概念体系,或者说业务的建模不会有任何的变化,还是完成同样的这些事情。唯一的区别就是量越来越大,超过了单个人和单个机器的容量,不断地增长。这样就会导致以下的架构:

  1. 当流量越来越大,我们就会发现,软件所部属的机器就会开始按照树状的结构开始分拆,就会形成硬件的部属架构。这就是为什么会形成部署的分层。
  2. 为了把业务在软件中实现并落地,需要前端人员、业务代码人员、存储层等不同技巧的人同时工作,需要切分成代码的架构。这就是为什么会形成代码的分层,形成代码的架构。当然,当这些角色由一个人来完成的时候,不一定会有代码架构,往往会比较乱。
  3. 当参与的人员越来越多,就会形成开发体系的组织架构。因为代码开发的过程是一个连续的过程,会用流程来吧不同的角色串联起来,这就是软件工程。
  4. 为了完成业务的工作,需要识别出来业务架构和支撑业务的组织架构,以及业务运作的流程。这是被虚拟化的业务架构和组织架构,也需要体现在代码中,保持和现实生活中一致。

什么是软件架构

这就是软件比较复杂的地方,涉及到软件本身的业务体系,和所虚拟的业务体系。根据以上的分析,所生成的架构,究竟那些算是软件架构呢?

  1. 软件因为流量增大而分拆成不同的运行单元,在不同的机器上部署所形成的架构,属于软件架构。
  2. 每个运行单元为了让不同角色的人,比如前端,业务,数据存储等能够并行工作,所分成的代码架构,也属于软件架构。

所以当我们说软件架构的时候,我们一定要讲清楚,究竟说的是部署的架构,还是代码的架构。软件架构的落地,需要软件的组织架构和流程来保障,离开了这个,软件架构是一句空话。

另外很多人讲,架构是进化出来的。架构实际上是在量不断的增大,超过了单台服务器的容量,逐渐的分拆,同时导致超过单个人员的能力,工作人员不断的增多,工作内容不断的分拆形成的。这本身就是架构的意义所在。不管怎么分拆,所达到的目标没有任何变化,就是完成业务在计算机中的虚拟化。


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-03-22 16:5510430

评论

发布
暂无评论
发现更多内容

AI 时代火山引擎对象存储:为数据松绑,让算力起飞

北京中暄互动广告传媒有限公司

GOSIM 开源出海工作坊:给开源创业者的忠告

白鲸开源

开源 DataOps 开源商业化 白鲸开源 WhaleStudio

执行力:拉开团队与团队差距的关键,优秀项目经理都这么做

Tecjt_锦图科技

项目管理 团队协作 执行力 项目进度管理

MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统

火山引擎开发者社区

MCP

十行代码 带你极速接入鸿蒙6新特性 - 应用内打分评价

万少

HarmonyOS

MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统

极客天地

全栈信创+AI大模型:百分点科技BD-OS重塑数据治理基座

百分点科技技术团队

MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统

北京中暄互动广告传媒有限公司

AI 时代火山引擎对象存储:为数据松绑,让算力起飞

火山引擎开发者社区

AI 火山引擎

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 无代码 版本更新

智能体是什么,与AI有什么区别?一文弄懂智能体的方方面面

职场工具箱

人工智能 智能体 agent AIGC 智能体平台

【项目经理必读】为何项目管理越来越难?破局关键在这里!

Tecjt_锦图科技

项目管理 团队协作 项目经理 进度管理 软件研发管理

喜报!和鲸科技获张江国家自主创新示范区专项发展资金支持

ModelWhale

人工智能 大数据 科研 和鲸

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?

猫头虎

AI Agents

(三)数仓人必看!ODS 到 DWS 各层设计规范全解析,含同步/存储/质量核心要点

白鲸开源

大数据 开源 数仓 大模型 命名规范

企业级数据采集解决方案:Dify + MCP Server + LLM打造零代码YouTube创作者主页分析智能体

不叫猫先生

智能体 LLM dify MCP

RFID智能工具柜选型指南:软件功能和硬件配置哪个更重要?

斯科信息

RFID智能工具柜

淘宝天猫商品评论API:轻松挑选优质商品的利器

tbapi

淘宝API 淘宝商品评论数据 淘宝商品评论API 天猫商品评论数据采集 天猫商品评论API

DXC在2025年度ServiceNow研究中获评领导者

财见

CFD专栏丨屋顶冷水机组气动噪声分析

Altair RapidMiner

制造业 CAE CFD 流体仿真 ultraFluid

你画我猜小程序 PRO:社交游戏新选择,助力运营变现

微擎应用市场

Paperpal携手国际出版机构发起【AI时代科研现状与未来大调研】,助力制定科研AI新规范

财见

低代码“打印文件”实操指南:从模板预览到PDF导出全流程解析

引迈信息

具身智能从此「边听边说」,智源研究院开源原生全双工语音大模型RoboBrain-Audio

智源研究院

人工智能

项目成功的关键是谁?卓越项目经理的三大核心能力与高效工具

Tecjt_锦图科技

用 SeaTunnel 同步 MySQL 到 Doris:全量增量 + SQL 过滤

白鲸开源

MySQL Doris 数据同步 数据集成 Apache SeaTunnel

微云二手车运营版系统:多端覆盖的二手车平台解决方案

微擎应用市场

重量体积查询 API | 电商快递费用核算不再有争议

快递鸟

一文掌握 Apache SeaTunnel 构建系统与分发基础架构

白鲸开源

大数据 开源 数据同步 数据集成 Apache SeaTunnel

省级旅投集团数据中台架构实战:多租户隔离与主题域建模实践

袋鼠云数栈

大数据 数据中台 数据治理 中台架构 袋鼠云

架构漫谈(六):软件架构到底是要解决什么问题?_架构_王概凯Kevin_InfoQ精选文章