【FCon上海】与行业领袖共话AI大模型、数字化风控等前沿技术。 了解详情
写点什么

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

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

    阅读完需:约 10 分钟

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

架构漫谈是由资深架构师王概凯 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:559688

评论

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

双非本科逆袭记,阿里技术四面+交叉面+HR面,成功拿到offer

Java架构师迁哥

解读革命性容器集群CCE Turbo:计算、网络、调度全方位加速

华为云开发者联盟

容器 华为云 CCE Turbo 集群服务器

2021版最新!字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java架构之路

Java 程序员 架构 面试 编程语言

老同学突然升到了阿里P7,只因偷偷掌握了JVM的奥秘?

Java架构师迁哥

干货:ANR日志分析全面解析

vivo互联网技术

android 堆栈 日志分析 anr

一文读懂开源项目 OpenHarmony2.0

科技热闻

聚焦机器同传前沿进展,第二届机器同传研讨会将在NAACL举办

百度大脑

人工智能 机器

学历不够,技术来凑,8年开发经验,逆袭拿到阿里P7岗

Java架构师迁哥

普通二本,吃透这份阿里高级专家的《Java面试手册21版》成功拿下腾讯offer

Java架构师迁哥

从零开始学习3D可视化之坐标系

ThingJS数字孪生引擎

物联网 可视化 数字时代 3D模型 3D可视化

本科毕业六年,备战一个月,四面阿里巴巴定级P7

Java架构师迁哥

不愧是清华大佬,一个联机对战游戏就把23种设计模式给抽丝剥茧了

Java架构师迁哥

上云就上百度智能云,百度智能计算峰会召开,AI原生云全新升级

百度大脑

AI 智能云 峰会

别乱打日志了,这才是正确的打日志姿势!

xcbeyond

日志 规范 6月日更

【译】JavaScript 代码整洁之道-重构篇

KooFE

JavaScript 大前端 代码重构 6月日更 整洁代码

花了三个小时把一份GitHub上标星115k的《Java超全进阶教程》整理成了PDF文档。

Java架构之路

Java 程序员 架构 面试 编程语言

阿里都会问些什么?4面阿里余额宝Java高级技术岗

Java架构师迁哥

iOS开发-Objective-C 中的 MVVM 模式介绍

iOSer

ios objective-c MVVM ios开发

Linux Shell 自动交互人机交互的 3 种方法

学神来啦

Linux 运维 Shell 虚拟机 linux运维

博客

vincentjia

看Kunpeng BoostKit 使能套件如何实现大数据场景倍级性能提升

华为云开发者联盟

大数据 开源 鲲鹏 鲲鹏计算 Kunpeng BoostKit

带你遨游银河系的十种分布式数据库

悟空聊架构

数据库 分布式 分布式数据库 6月日更

如何在 Electron 上实现 IM SDK 聊天消息全文检索

网易云信

全文检索 Electron IM

入职美团定级P7,总结2021年最新180道高级岗面试题及答案

Java架构师迁哥

代码写的烂才是原罪?字节三面+微信四面+PayPal四面,大厂面经分享

Java 程序员 架构 面试

@成都的Coder

蚂蚁集团移动开发平台 mPaaS

flutter 移动开发 mPaaS

Mybatis缓存机制详解

北游学Java

Java mybatis

京东T8Java架构师呕心沥血总结整理的《15w字的Java面试手册》免费开放分享给大家复习。

Java架构之路

Java 程序员 架构 面试 编程语言

即时通讯系列-WorkPlus简介

WorkPlus

开源 即时通讯 IM 办公自动化

网络攻防学习笔记 Day39

穿过生命散发芬芳

网络攻防 6月日更

java中的NIO和IO到底是什么区别?20个问题告诉你答案

华为云开发者联盟

Java io nio buffer channel

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