架构师才能看懂的大型网站架构面临的挑战:业务架构的基本思路

简介: 业务架构的基本思路大型网站系统有很多功能,一次性明确所有的功能需求并设计出一个庞大的业务架构是一件费力不讨好的事情。因为在项目前期,难免会忽视一些琐碎功能,而随着开发的进行,也会有很多新的想法产生,基本上不会存在完全按照最初的业务架构设计完成的软件产品。因此,业务架构不仅要做到“规整功能模块,厘清产品业务逻辑”,更重要的是如何做到“有规划性地应对项目过程中的需求变更”。

业务架构的基本思路

大型网站系统有很多功能,一次性明确所有的功能需求并设计出一个庞大的业务架构是一件费力不讨好的事情。因为在项目前期,难免会忽视一些琐碎功能,而随着开发的进行,也会有很多新的想法产生,基本上不会存在完全按照最初的业务架构设计完成的软件产品。因此,业务架构不仅要做到“规整功能模块,厘清产品业务逻辑”,更重要的是如何做到“有规划性地应对项目过程中的需求变更”。

递进思想

传统的软件开发基本上都遵循瀑布开发模型,即项目开发过程必须严格按照需求分析、设计、编码、测试和维护等步骤执行。瀑布开发模型的流程和产出物如图2.5所示。在一般的瀑布开发模型中,每个阶段都需要有明确的产出物,通过严格的评审后才能进入下一阶段。瀑布开发模型的理想状态是每个阶段只执行一次,一次性完成整个项目。瀑布开发模型很大程度上依赖需求分析阶段的明确性,因为在瀑布开发模型中默认需求是充分和明确的,需求几乎不存在被改动的情况,所以设计和编码阶段都是完全以需求分析为依据的。如果在项目后期才发现有重要的需求变更或者有其他遗漏,往往就会导致项目失败或者项目重新启动。

网络异常,图片无法展示
|

图2.5 瀑布开发模型的流程和产出物

在上节节中曾提到,大型网站系统的需求很难做到完全明确,在项目开发过程中往往会有更好的想法产生。如果我们完全采用瀑布开发模型的思维方式开发大型网站项目,并且想一次性确定需求并交付项目,那么很可能在项目的后期才会发现需求有遗漏,或者很可能在网站基本定型后才发现大部分功能使用起来并没有预想的好。这些情况都会在很大程度上导致项目失败。

瀑布开发模型的弊端很明显,即需求必须是完全明确的,对需求的变化适应性差。瀑布开发模型一般就是我们执行项目时的惯性思维,正是因为这种惯性思维,使得开发者在项目开发过程中对需求的变更是恐惧的。针对瀑布开发模型的弊端,敏捷开发模型被提出来而且逐渐流行。敏捷开发模型不是确切的项目管理框架,它是一套软件开发的原则。敏捷开发主张适度的计划、迭代开发、提前交付和持续改进,并且提倡快速与灵活地看待开发与变更。简单地说,就是在开发过程中保持沟通,不断交付完成的部分,并持续地改进,而不是一次性交付项目。遵循敏捷开发原则的项目流程如图2.6所示。

网络异常,图片无法展示
|

图2.6 遵循敏捷开发原则的项目流程

不过,软件开发终归逃不出需求分析、设计、编码、测试和维护等步骤,没有一个明确的主体需求也会导致开发无法进行,盲目地持续改进更会造成很大的成本浪费。因此笔者认为瀑布开发模型的流程也不是不能借鉴。敏捷开发提倡的是沟通,通过持续的沟通和改进最终得到一个满意的结果,而非以一开始想象中的全部需求来指导整个项目开发。

因此,不用在意项目开发是遵循瀑布开发模型还是敏捷开发模型,关键是如何在明确需求的同时适应需求变化。笔者认为,项目开发需要有递进思想。

遵循递进思想的项目流程如图2.7所示。可以看到,应先完成主体功能,然后再添砖加瓦,需求不用一次性完全明确,而是持续地进行沟通和改进,每个部分开始编码前其需求必须是明确的,这样通过多个递进阶段完成整个项目。

网络异常,图片无法展示
|

图2.7 遵循递进思想的项目流程

项目流程只有遵循递进思想,才能更好地应对需求变化。同样,业务架构也需要遵循递进思想,才能有规划地应对项目开发过程中的需求变更。在明确主体需求的前提下,可以适当省略一些次要或琐碎功能的细节,但不能完全忽视这些次要或琐碎功能,完全忽略这些需求会导致工期失控。等主体功能开发完成后,再对次要功能的细节进行明确,等次要功能完成后,再对一些琐碎的功能进行明确,以递进的方式逐步细化和修改业务架构。

版本计划逐渐完善

在上面曾提到,项目流程只有遵循递进思想,才能更好地应对需求变化。那么,项目应该规划为多个版本,以方便逐步完成。一般来说,项目版本可以划分为主功能阶段、次要功能阶段和优化阶段。版本计划逐步完善的项目流程如图2.8所示。

网络异常,图片无法展示
|

图2.8 版本计划逐步完善的项目流程

1.主功能阶段

主功能阶段主要实现整个主体功能,这一阶段的业务架构需要完全明确主体功能需求,次要功能和琐碎功能的细节可以先忽略,但次要功能和琐碎功能也要体现,因为它们会影响技术架构和迭代计划。项目开发过程中可能会对主体功能进行调整,但是偏离程度不能太大,不能说一开始只想要一个网页,而项目开发过程中却想加入App客户端。

2.次要功能阶段

次要功能阶段的目标是实现之前忽略的次要功能。这一阶段可以根据实际情况进一步细分成多个次要功能阶段。在这个阶段中,不需要一次性明确全部的次要功能,只需要明确当前阶段的次要功能即可。次要功能阶段可能会出现频繁的需求变更,因为次要功能一般是一些用户体验方面的功能,经常会发生改动。但是,最好能按照过往经验和精品网站的要求做尽量好的方案,这样能在一定程度上减少需求变更的发生。

3.优化阶段

因为项目开发过程是不停地让业务部门或者客户使用网站系统的过程,所以其间难免会有很多新的想法,有一些甚至是从来没有提及的需求。这些新需求一定不能在主功能阶段和次要功能阶段添加(除非这些需求所需的工作量非常小,或者这些功能是主要功能或次要功能中必不可少的部分),因为这样会打乱这两个些阶段的开发节奏和既定计划,导致进度失控。要想把进度失控的项目重新拉到正常的状态是很困难的,很多时候失控只会越来越严重。

因此,这些需求可以先记录下来,在优化阶段再仔细评估和处理这些需求。在优化阶段再处理这些“突发奇想”的需求,既可以保证前面的项目进度,又可以集中控制这些需求带来的风险。

持续优化,推陈出新

很多项目的失败与团队经验、技术水平或项目管理水平没有直接的关系。大部分项目失败的原因是妄想网站第一次上线就具备市场上所有的好功能,同时还要具备特色功能。这个想法如果占据主动,则会添加过多其实并不需要的伪功能,也会习惯性地修改需求,最后在不知不觉中导致时间成本和人力成本的严重超支,以致项目崩塌。对于大型网站而言,由于功能繁多,所以值得斟酌的地方也会有很多,加之项目工期较长,开发人员看上去也充足,因此需求经常被改变,导致项目在不知不觉中失控。

罗马非一日建成。时间成本和人力成本是有限的,好的功能也会随着市场竞争被更好的功能所取代。而且从用户使用的角度讲,通过多个迭代版本持续学习新功能往往会比一次性地接受过多功能更有吸引力。因此,大型网站项目应该持续优化,且要不断推陈出新,而非一次性地完成全部功能,即通过一期项目、二期项目、三期项目等有规划地逐步构建大型网站才是合理的。

对于业务架构而言,如果出现一些好的想法或功能,但是其工作量很大,则需要考虑是否将其放在下一期的项目中实现。

相关文章
|
2月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
26 0
|
5月前
|
Dubbo Java 应用服务中间件
阿里巴巴资深架构师深度解析微服务架构设计之SpringCloud+Dubbo
软件架构是一个包含各种组织的系统组织,这些组件包括Web服务器,应用服务器,数据库,存储,通讯层),它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。
|
1月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
|
2月前
|
存储 消息中间件 算法
深度思考:架构师必须掌握的五大类架构设计风格
数据流风格注重数据在组件间的流动,适合处理大量数据。调用返回风格则强调函数或方法的调用与返回,过程清晰明了。独立构件风格让每个构件独立运作,通过接口交互,提升灵活性和可重用性。虚拟机风格则模拟完整系统,实现资源的高效利用。
深度思考:架构师必须掌握的五大类架构设计风格
|
2月前
|
设计模式 架构师 前端开发
架构师进阶篇-什么是架构师
架构师进阶篇-什么是架构师
63 0
|
4月前
|
人工智能 运维 架构师
数美科技首席架构师陈建:基于云上弹性的高可用实时风控架构实践
2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,北京数美时代科技有限公司首席架构师陈建在【CloudOps云上运维专场】发表了题为《基于云上弹性的高可用实时风控架构实践》的主题演讲,从在线实时风控架构及高可用解决方案等方向做了分享。
|
5月前
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。
|
5月前
|
缓存 负载均衡 架构师
阿里资深架构师钟华曰:中台战略思想与架构实战;含内部实施手册
最近在读一本书,叫做《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》,在写此文时本书还没有看完,因为担心如果把书全部看完后再来写这篇文章,很多精彩的内容可能已经忘记了,所以中途先写一篇来分享给大家。
|
5月前
|
消息中间件 存储 缓存
阿里P8架构师带你“一窥”大型网站架构的主要技术挑战和解决方案
传统的企业应用系统主要面对的技术挑战是处理复杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到。