0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

合适的架构才是最好的架构?

jf_ro2CN3Fa 来源:芋道源码 2023-05-30 09:55 次阅读
Andrew Hunt 和 David Thomas 的《程序员修炼之道:从小工到专家》无疑是软件开发者们最喜爱的书籍之一。但是,我有时会想,到底有多少软件工程师真正阅读过这本书呢?

尽管这本书并没有详细阐述微服务和单体架构的方方面面,但它也提供了足够多的信息 —— 甚至可以说是全部信息 —— 帮助我们做出最好的,或者说是最务实的决定,来构建软件。仅仅是目录本身就值得称赞!但是,即使过去了 25 年,这个行业似乎仍未领会到其最基本的教诲 —— 那就是,根据实际情况选择合适的工具

另一个大名鼎鼎的人物,就是 Martin Fowler,他因遵循 “根据实际情况选择合适的工具” 这一理念而崭露头角的。任何熟悉持续重构这一概念的人,也很可能听过 Martin Fowler 的名字。他甚至写了一本专门讲述这个主题的书。

但如果你不想读或者买不起,这里有一个极简的版本:“始终保持重构。如果你接触到代码,并且有能力改进它,那就去改进,但绝不提前优化。 ” 这本书的精髓被浓缩为这句话。在这本书里,他不仅分享了他对重构的见解,还讨论了许多其他现代软件开发的主题,比如架构,更具体地说,单体架构和微服务。

相反,从单体开始,使它保持模块化,一旦单体成为问题时把它分解成微服务。

——martinfowler.com

在 2023 年初,React 的开发人员和维护人员的行为让开发者们大吃一惊,现在又出现在了亚马逊 Prime Video 的开发者身上,最近他们发表了一篇文章,讨论了从微服务转向单体架构的过程(如果你还没读过,为了理解背景,请阅读)。这引发了很大的讨论,因为考虑到亚马逊还拥有 AWS,在其上建立的无服务器和微服务架构远比我们都应该接受的多 —— 但那是另一个故事了。

那么,到底发生什么事情了呢?好吧,想象一下。悬崖边上的第一只羊跳了下去,然后其他羊都跟着跳了下去。但是后面的羊都没注意到,第一只羊 —— 亚马逊 —— 是穿着降落伞跳的。后面的羊都没有注意到。不幸的是,这种情况并不少见,而这也是我多年来一直在反对的。

仅仅因为大型科技公司正在采用一些新的架构、工具或库,并不意味着它对每个人,包括推出它的那个公司,都是可行的。还记得谷歌的 Angular.js 吗?就是这个道理……

亚马逊 Prime Video 的故事与此非常非常相似。推动了云服务发展的这家公司的部分部门,已经意识到了 Martin Fowler 在 2014 年非常恰当地指出的一个事实 —— 这种模式可能并不适用,而且还没有足够的证据来证明它会有效。当然,这并不意味着亚马逊就不应该尝试这种架构,或者不应该构建支持这种架构的 AWS 产品。Martin 本人也同意,这种尝试是有价值的。但是,尝试与采纳是有很大差异的,在产生实际效果之前的盲目尝试和盲目采纳差异更大。

尽管对许多人来说,亚马逊开发者决定放弃部分微服务,转而选择单体架构的决定可能令人震惊,但这其实一点都不出人意料。微服务是否能成功的可能性一直是五五开。

与那些永远看好未来、天真乐观的人不一样,软件开发并非非黑即白,无论它最终如何编译成 0 和 1。这就是为什么我们需要回归到由 Andrew Hunt 和 David Thomas 在《程序员修炼之道:从小工到专家》中阐述的基本原则,这是每一个紧随亚马逊步伐,一头扎向同样深渊的人都应该做的。

亚马逊 Prime Video 团队的决定并不应被视为一种普遍的方案,尽管我确信会有许多人走进办公室,或者登录 Slack,准备召开紧急的工程全员会议,提出一个计划,要么恢复原状,要么将他们的微服务 “单体化”。我相信我不必须这么说,但请你不要这样做。如果你最终运行的微服务是从解决实际问题的单体架构中剥离出来的,那么你显然已经做出了正确的选择,推翻这个决定至少不会解决任何问题。

另一方面,如果你从一开始就由于像 “其他人都在这么做” 这样的轻率理由而采用微服务,那么你可能需要坐下来对你的架构进行一次真正的成本效益分析,甚至可能需要与亚马逊 Prime Video 的案例进行对比。他们勇敢地承认微服务是错误的选择,这至少表明这个决定并非出于市场炒作。你的分析结果可能会证明,采用单体架构所解决的问题少于其带来的问题和投入,在这种情况下,你应当坚持你现有的选择。

Martin Fowler 和我都赞同一个简单的事实,那就是

我们在讨论这个话题,对前端开发也同样适用。微前端是一种可能的解决复杂前端问题的方案,但这并不一定意味着它是每个复杂前端的正确解决方案。

这篇文章就是要说明,不要盲目追随大型科技公司。务实的编程依然占主导地位,根据实际情况选择合适的工具永远是最佳建议。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件开发
    +关注

    关注

    0

    文章

    608

    浏览量

    27333
  • 架构
    +关注

    关注

    1

    文章

    510

    浏览量

    25447
  • 程序员
    +关注

    关注

    4

    文章

    950

    浏览量

    29763

原文标题:合适的架构才是最好的架构?

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    软件架构

    软件架构软件架构软件架构
    发表于 03-29 21:54

    哪款放大器才是最好的驱动器?

    哪款放大器才是最好的驱动器?ADC架构、分辨率、信号带宽和其他特定应用细节在决定最佳方法上都发挥着作用。在本文中,我们在驱动SAR(逐次逼近寄存器)ADC的情况下将考虑一下这些问题。
    发表于 04-09 06:05

    ARM架构是什么

    从单片机转到ARM,主要需要学习ARM的架构,ARM相比单片机多了一些外设和总线。在仅仅是裸奔的情况下,如果熟悉了ARM架构,那么我认为使用任何ARM架构的芯片和用单片机将没有区别。ARM架构
    发表于 07-01 09:23

    ARMARM的架构与ARM架构的区别

    目录文章目录目录ARMARM 的架构x86 架构与 ARM 架构的区别ARM 的技术实现ARMARM 架构过去称作进阶精简指令集机器(Advanced RISC Machine,更早称
    发表于 07-16 06:43

    arm架构和cortex架构

    arm架构和cortex架构,ARM Cortex内核系列提供非常广泛的具有可扩展性的性能选项,设计人员有机会在多种选项中选择最适合自身应用的内核,而非千篇一律的采用同一方案。Cortex系列组合
    发表于 07-27 07:02

    浅析ARM架构与STM32系统架构

    ARM架构是怎样构成的?STM32系统架构地基本原理是什么?
    发表于 10-20 06:10

    软件架构存在的意义

    1、前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发
    发表于 10-27 09:34

    如何来选择合适电源逆变器的隔离架构

    在电源逆变器的实际应用中,应该如何来选择合适的隔离架构,以及对电路和元件的选择要求有哪些,电工天下小编整理了有关《电源逆变器应用中选择隔离架构电路和元件的要求》,希望对大家有所帮助。电机和电源控制
    发表于 11-15 06:02

    什么是RISC架构?RISC架构的优点与缺点

    什么是RISC架构?RISC架构的优点与缺点
    发表于 02-27 11:22

    微服务架构多微才合适

    大家也都认可,随着数据量、流量、业务复杂度的提升,服务化架构架构演进中的必由之路,今天要讨论的话题是:微服务架构多“微”才合适
    的头像 发表于 02-07 17:14 3343次阅读
    微服务<b class='flag-5'>架构</b>多微才<b class='flag-5'>合适</b>

    什么样子的物联网架构才是合适

    随着公司采用物联网,他们面临着影响网络和系统架构的连接性、数据量和安全性挑战。
    发表于 03-23 15:36 604次阅读

    ARM Cortex-A7合适CPU处理应用才是最好的 (2)

    ARM Cortex-A7,ARM史上最省功耗处理器横空出世!更小身材,更高性能,术业有专攻,再也没有“大材小用”,再也没有“力所不及”,我们相信,用最合适的CPU处理最合适的任务,才是最好
    的头像 发表于 07-02 12:52 4176次阅读

    ARM Cortex-A7合适CPU处理应用才是最好的 (1)

    ARM Cortex-A7,ARM史上最省功耗处理器横空出世!更小身材,更高性能,术业有专攻,再也没有“大材小用”,再也没有“力所不及”,我们相信,用最合适的CPU处理最合适的任务,才是最好
    的头像 发表于 07-02 12:51 8575次阅读

    什么是架构架构本质

    Linux有架构,MySQL有架构,JVM也有架构,使用Java开发、MySQL存储、跑在Linux上的业务系统也有架构,应该关注哪一个?想要清楚以上问题需要梳理几个有关系又相似的概念
    的头像 发表于 09-22 14:18 1000次阅读

    什么是系统架构 为什么要做架构设计

    以上的定义从高层抽象视角对什么是架构给予了自己的回答,相比之下,Neil Ford 在《软件架构基础》一书中对架构给出了更具象的阐述,其从架构组成元素入手,从更偏向实践的角度对
    的头像 发表于 11-10 10:19 4323次阅读