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

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

业务架构的基本思路

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

递进思想

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

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

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

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

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

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

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

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

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

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

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

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

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

版本计划逐渐完善

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

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

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

1.主功能阶段

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

2.次要功能阶段

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

3.优化阶段

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

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

持续优化,推陈出新

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

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

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

相关文章
|
3月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
6月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
133 5
|
1月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
1月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
4月前
|
测试技术 uml
业务架构问题之在业务架构中,经常说的“看清楚事”指的是什么
业务架构问题之在业务架构中,经常说的“看清楚事”指的是什么
|
4月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
141 10
|
4月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
178 8
|
6月前
|
运维 架构师 安全
架构师养成手册:架构师职责
小米是一名热情的技术爱好者和架构师,他探讨了架构师的角色和职责。主要涉及六个方面:顶层设计,需与企业战略目标对齐,制定架构原则;规划可适应未来变化的企业架构,分析需求并关注技术趋势;全局视角制定可落地的架构方案,兼顾全局与局部优化;技术选型与难题解决,选择合适技术并解决实际问题;关注方案与代码的广度与深度,确保宏观设计与微观实现的统一;同时,架构师还需具备管理能力,包括团队协作、资源调配和风险管理。
191 11
|
5天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
3天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####