写点什么

Martin Fowler 阐述“牺牲的架构”

  • 2014-11-05
  • 本文字数:1350 字

    阅读完需:约 4 分钟

软件开发团队希望拥有长期稳定的软件架构,但是硬件、软件和网络速度的技术却在高速发展,就这需要架构做出重的大调整,甚至抛弃之前的整个代码库。在这种背景下, Thoughtworks 的作者和顾问 Martin Fowler 在他近期的博客中介绍了牺牲的架构。

牺牲的架构意味着要接受一种现实,那就是在几年内团队将需要(希望)抛弃他们之前构建的一些东西。Martin 提到,这意味着当这一时刻到来时,要立刻思考如何让这些东西更容易被替换掉,但是软件设计人员却很少思考如何设计他们的产出物,让它们如何支持将来的替换。

对于许多人来说,抛弃代码库是一种失败的标志,或许考虑到软件开发所固有的探索特性也能够表示理解,但仍然会感到强烈的挫败感。但是,现在你抛弃几年前写的代码,通常能够写出更好的代码。

Martin 举了一个 eBay 的例子,他们的做法与牺牲的架构是一致的,他们在一段时间之后把 perl 脚本移植成了 c++ 代码,又在一段时间之后移植成了 java 代码。能够支撑 1996 年 ebay 的架构不会成为能够支撑 2006 年 ebay 的架构。1996 年的这一版不能处理 2006 年的负载压力,但是 2006 年的版本对于构建和维护来讲太复杂了,而且是针对 1996 版之后的需求逐步演变而来的。

EPAM 系统的开发人员 Dmitry Cheryasov 也支持牺牲的架构,因为这是业务转变的需要。他在 Y Combinator 的讨论中共享了他的观点,他说:

为了在合适的时机重新构建而构建。它就像抛弃原型,只是代码已经投入使用罢了。当你的业务增长的时候,你可能不得不抛弃之前的一些或者全部的代码库(就像 eBay 的做法,第二次提到了)。这并不意味着之前的解决方案不好:一点也不,在当时的情况下它们非常恰当。

谷歌的高级研究员 Jeff Dean 在他的陈述中提到,在代码库太旧之前就重新设计或者抛弃掉。

当前正确的设计对于十倍或者百倍的增长可能就是非常错误的了,可以针对十倍的增长进行设计,但在增长到百倍之前就要计划去重写了。

Martin 说,在早期的软件系统中,很少保证软件事实上需要做到什么,所以重点是更加关注特性变更的灵活性而非性能或有效性。 Stack Overflow Stack Exchange Network 的联合创始人 Jeff Atwood 创造了一种新的说法“性能就是一种特性”。所以团队可以把性能特性和其他的特性一起来排序。最初它的优先级不高,但是开发阶段后期就要提高它的优先级了。

Martin 说牺牲的架构不会引起质量的缺乏。对于一个健康的代码库来说,关键是模块化。

好的模块化是一个健康代码库的关键部分,当要更换一个系统时,模块化通常能够带来巨大的帮助。最好的一种做法就是,在系统早期系统就探索最好的模块化结构应该是什么样的,以便你能够基于替换的认知去进行构建。由于在早期时它就被设计成了全部系统都是可以牺牲的,随着系统的增长要牺牲独立模块时就会更加的高效,因为如果你有良好的模块边界,就只做简单地替换就可以了。

Justin Meyer 是 jQuery 顾问和 JavaScriptMVC CanJS jQueryPP 的联合创始人,他在近期的博客中分享了模块化的重要性,他说:

模块化是一个可维护性应用最重要的特性。一个模块化的应用不会浪费,部件可以被修改、替换或者抛弃掉,而不会影响到应用的其他部件。

Martin 说,写牺牲的架构的团队决定了牺牲的时机,也了解代码在未来牺牲掉是一件好事。

查看英文原文: Martin Fowler Describes “Sacrificial Architecture”

2014-11-05 03:493013

评论

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

龙蜥社区与您相约 2023 KubeCon

OpenAnolis小助手

开源 容器 云原生 龙蜥社区 kata

企业即时通讯解决方案,WorkPlus助力高效沟通与协作

BeeWorks

企业即时通讯

IM系统,WorkPlus如何成为企业即时通讯协作的首选?

BeeWorks

IM聊天系统

产品解读 | 数据服务平台:KDP

KaiwuDB

聚焦华为全联接大会:和鲸科技与华为携手助推交叉学科应用型数据科学人才培养

ModelWhale

华为 人才培养 数据科学 高等教育 交叉学科

2000字说清音视频在社交娱乐场景中的应用!

X2Rtc

音视频 RTC 社交娱乐 融合通信

根据人类反馈进行强化学习的5大关键步骤

澳鹏Appen

大模型 数据训练 生成式AI LLM RLHF

如何选择适合企业的移动应用管理平台?

BeeWorks

DeFi 集成:扩大加密货币交易平台开发的视野

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 区块拉开发

开辟ICT新视野 直通华为云专家:一堂华为云Astro低代码启蒙课 ——华为云HCSD校园沙龙之西安站

云计算 软件开发 低代码 华为云

袋鼠云代码检查服务,揭秘高质量代码背后的秘密

袋鼠云数栈

大数据 数据中台 代码检查

用智能文字识别技术赋能古彝文数字化之路

dvlinker

人工智能 深度学习 合合信息 古彝文 智能文字识别技术

Sovit2D组态设计 Web Scada烟气脱硫工艺流程

2D3D前端可视化开发

物联网 组态软件 工业控制 工业自动化 烟气脱硫

2023-09-27:用go语言,在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始, 并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0

福大大架构师每日一题

福大大架构师每日一题

基于Java+vue开发的企业级人力资源管理系统

金陵老街

企业沟通平台私有部署,让沟通更高效数据更安全

BeeWorks

腾讯大牛耗时1个月整理的"JVM学习笔记"深入底层,面面俱到!

小小怪下士

Java JVM

玩转 CODING 自动化助手,助力高效研发!

CODING DevOps

低代码开发框架 助力企业打造新时代技术底座

力软低代码开发平台

一文了解企业如何实现文件自动化实时同步

镭速

文件同步

腾讯云数据库再获顶会认可,论文入选VLDB2023

极客天地

支持私有化部署的WorkPlus,助您构建定制化的即时通讯平台

BeeWorks

软件测试 | AI大模型应用开发实训营来啦~ 大模型学习资料免费领

测试人

人工智能 程序员 AI 软件测试 大数据模型

免费但很全能,Amazon CodeWhisperer 让编程更快

科技热闻

一文教你理解Kafka offset

越长大越悲伤

kafka

打造次世代分析型数据库(四):几十张表关联?小Case!

腾讯云大数据

数据库

专业私有化视频会议软件,WorkPlus Meet助力企业构建高效协作的沟通平台

BeeWorks

Docker 入门教程(简明易懂、零基础篇)

程序员万金游

#运维 #后端 #docker

Martin Fowler阐述“牺牲的架构”_架构_Savita Pahuja_InfoQ精选文章