在2015年的OSCON上,我做了一个简短的谈话(14分钟)关于什么是架构以及为什华体会体育网页版入口么它很重要。
软件架构指南华体会体育网页版入口
当软件行业中的人们谈论“架构”时,他们指的是软件系统内部设计中最重要方面的模糊定义概念。华体会体育网页版入口良好的体系结构华体会体育网页版入口很重要,否则将来添加新功能会变得更慢、更昂贵。
像软件界的许多人一样,我一直对“架构”这个词保持警惕,因为它常常意味着与编程的分离和一种不健康的浮夸。华体会体育网页版入口但是我通过强调好的架构是能够支持自身发展的,并且与编程紧密交织在一起的东西来解决我的担忧。华体会体育网页版入口我职业生涯的大部分时间都围绕着这样的问题:优秀的体系结构是什么样的,团队如何创建它,以及如何在我们的开发组织中最好地培养体系结构华体会体育网页版入口思维。这个页面概述了我对软件架构的观点,并向您指出了更多关于这个站点上的架构的材料。华体会体育网页版入口
www.rodiba.com上关于软件架构的材料指南。华体会体育网页版入口
建筑是什么?华体会体育网页版入口
软件世界中的人们长期以来一直在争论架构的定义。华体会体育网页版入口对一些人来说,它就像一个系统的基本组织,或最高级别组件连接在一起的方式。我对这个问题的思考是由和拉尔夫·约翰逊的邮件往来他质疑这种措辞,认为没有客观的方法来定义什么是基本的,什么是高层次的,而更好的架构观才是华体会体育网页版入口专家开发人员对系统设计的共同理解。
拉尔夫·约翰逊在QCon演讲
第二种常见的架构定义风格是,它是“需要在项目早期做出的设计决策”,但Ralph也华体会体育网页版入口抱怨这一点,他说它更像是你希望在项目早期就能做出正确的决定.
他的结论是“华体会体育网页版入口建筑是关于重要的东西。不管那是“.乍一看,这听起来很老套,但我发现它蕴含着丰富的内涵。这意味着从体系结构的角度思考软件的核心是决定什么是重要的(即什么是体系结构的),然后花费精力保持这些体系结构元素处于良好的状态。对于想要成为架构师的开发人员来说,他们需要能够识别哪些元素是重要的,识别哪些元素如果不加以控制可能会导致严重的问题。
拉尔夫的邮件构成了我的IEEE软件专栏,讨论了软件体系结构的含义和架构师的角色。华体会体育网页版入口
为什么架构如此重要华体会体育网页版入口?
华体会体育网页版入口对于软件产品的客户和用户来说,体系结构是一个棘手的课题——因为它不是他们能立即感知到的东西。但是一个糟糕的体系结构华体会体育网页版入口是造成cruft增长的主要原因,cruft是阻碍开发人员理解软件能力的软件元素。包含大量粗制滥造的软件很难修改吗Y,导致特性到达更慢,缺陷更多。
这种情况与我们通常的经验相反。我们习惯于把“高质量”的东西看成是成本更高的东西。对于软件的某些方面,例如用户体验,这可能是正确的。但是当涉及到架构和内部质量的其他方面时,这种关系就华体会体育网页版入口相反了。高的内部质量可以更快地交付新功能因为碍事的东西少了。
虽然我们可以在短期内牺牲质量来换取更快的交付速度,但在cruft的堆积产生影响之前,人们低估了cruft导致整体交付速度变慢的速度。虽然这是无法客观衡量的,但有经验的开发者会这么认为对内在品质的关注在几周内就会得到回报,而不是几个月。
应用程序体系结构华体会体育网页版入口
软件开发中的重要决策随着我们所考虑的环境的规模而变化。华体会登录网址常见的规模是应用程序的规模,因此称为“应用程序体系结构”。华体会体育网页版入口
定义应用程序体系结构的第一个问题是,对应用程序是什么没有明确的定义。华体会体育网页版入口我的观点是应用程序是一种社会结构:
- 被开发人员视为单个单元的代码体
- 业务客户视为单个单元的一组功能
- 有资金的人认为这是一个单一的预算
这种松散的定义导致应用程序的潜在规模很大,开发团队中的人员从几个到几百人不等。(你会注意到,我把规模看成涉及的人数,我觉得这是衡量这类事情最有用的方法。)这与企业架构之间的关键区别在于,围绕着社会建设,存在着相当程度的统一目标。华体会体育网页版入口
应用程序边界
软件开发中尚未确定的问题之一是确定软件的边界是什么。华体会登录网址(浏览器到底是不是操作系统的一部分?)许多面向服务体系结构的支持者认为应用程序正在消失——因此未来的企业软件开华体会体育网页版入口发将是关于将服务组装在一起。华体会登录网址
我不认为应用程序消失的原因与应用程序边界难以划分的原因是一样的。本质上应用是社会建构:
Microservices指南
微服务体系结构模式是一种将单个应用程序开发为一组小服务的方法,每个小服务运行在自己的进程中,并与轻量级机制(通常是HTTP资源API)通信。这些服务是围绕业务功能构建的,可以通过完全自动化的部署机制独立部署。对这些服务的集中管理非常少,这些服务可能用不同的编程语言编写,并使用不同的数据存储技术。虽然它们的优势使它们在过去几年中非常流行,但它们也带来了分销增加、一致性减弱和需要成熟的运营管理的成本。
Serverless架华体会体育网页版入口构
无服务器架构是一种应用华体会体育网页版入口程序设计,它结合了第三方“后端即服务”(BaaS)服务,和/或包括在“功能即服务”(FaaS)平台上托管的临时容器中运行的自定义代码。通过使用这些思想以及类似于单页应用程序的相关思想,这样的体系结构在很大程度上消除了对传统的始终在线服务器组件的需求。华体会体育网页版入口无服务器体系结构可以从华体会体育网页版入口显著降低的操作成本、复杂性和工程交付时间中受益,代价是增加对供应商依赖性和相对不成熟的支持服务的依赖。
微前端
好的前端开发是很难的。扩展前端开发以便许多团队可以同时在一个大型而复杂的产品上工作是更加困难的。在本文中,我们将描述最近的一种趋势,即将前端整体分解为许多更小、更易于管理的片段,以及这种体系结构如何提高处理前端代码的团队的有效性和效率。华体会体育网页版入口除了讨论各种好处和成本之外,我们还将介绍一些可用的实现选项,并深入研究演示该技术的完整示例应用程序。
GUI架华体会体育网页版入口构
表示域数据分层
将一个信息丰富的程序模块化的最常见的方法之一是将它分为三个层次:表示层(UI)、领域逻辑(又名业务逻辑)和数据访问。因此,你经常会看到web应用程序被分成知道如何处理HTTP请求和呈现HTML的web层,包含验证和计算的业务逻辑层,以及处理如何管理数据库或远程服务中的持久数据的数据访问层。
企业架构华体会体育网页版入口
应用程序体系结构集中于某种形式的概念华体会体育网页版入口应用程序边界内的体系结构,而企业体系结构则是跨大型企业的体系结构。这样的组织通常太大了,无法将所有的软件组合到任何类型的内聚组中,因此需要跨具有许多代码库的团队进行协调,这些代码库彼此独立开发,资金和用户彼此独立运行。
企业架构的大部分内容都是关于理解什么值华体会体育网页版入口得进行中心协调,以及该协调应该采取什么形式。一个极端是中央架构组,必须批准企业中每个软件系统的所有架华体会体育网页版入口构决策。这样的团队减慢了决策制定,不能真正理解跨如此广泛的系统组合的问题,导致糟糕的决策。但另一个极端是完全没有协调,导致团队重复工作,不同系统无法相互操作,团队之间缺乏技能开发和交叉学习。
像大多数具有敏捷思维的人一样,我更喜欢在去中心化方面犯错误,这样会更接近混乱的岩石,而不是令人窒息的控制。但在海峡的那一边仍然意味着我们必须避免触礁,以及一种以最大限度地减少实际成本的方式来最大化当地决策的方法。
企业架构师加入团队
企业架构组经常因每天的华体会体育网页版入口开发而分离。这可能导致他们对开发工作的认识过时,开发团队不能从公司的角度出发。看到这种情况经常发生,我的同事(Thoughtworks CTO) Rebecca认为企业架构师可以通过加入开发团队而更有效地工作。
企业架构师在精益企业中的角色
当组织采用敏捷思维时,企业架构不会消失,但企业架构师的角色会发生变化。华体会体育网页版入口企业架构师不再做选择,而是帮助其他人做出正确的选择,然后传播这些信息。企业架构师仍然需要形成一个愿景,但随后需要在团队之间建立桥梁,以建立学习社区。这将允许团队探索新的方法并相互学习,企业架构师是这种增长的伙伴。
产品/项目
软件项目是资助和组织软件开发的一种流行方式。华体会登录网址他们将工作组织成临时的、只进行构建的团队,并在业务案例中获得特定的收益。相反,产品模式使用持久的、构思构建运行的团队处理持久的业务问题。产品模式允许团队快速地重新定位,减少他们的端到端周期时间,并允许通过使用短周期迭代来验证实际收益,同时维护软件的体系结构完整性以保持长期有效性。
建筑师电梯-参观上层楼层
许多大型组织发现他们的IT引擎与行政顶层隔了许多层,这也将业务和数字战略从执行这些战略的重要工作中分离出来。架构师的主要角色是乘坐顶层公寓和引擎室之间的电梯,在需要支持这些数字化工作的地方停下来:自动化软件制造,最小化前期决策,并随着技术发展影响组织。
使用REST进行企业集成
大多数内部REST api都是为单个集成点构建的一次性api。在本文中,我将讨论使用非公共api时的约束和灵活性,以及跨多个团队进行大规模RESTful集成的经验教训。