欢迎来到第三版“车站旅行车装满了磁带”。在本文中,我将专注于组织扩展的不同方面;扩展团队。
围绕使用面向服务的体系结构与单片架构的讨论已经存在一段时间。大多数球队确实选择了MicroServices路径,因为这些天是“行业标准”。然而,单片设计仍然具有它们的使用和空间,特别是在想法或产品的早期阶段。
我有奢侈品在代码中工作,其中两种方法都是标准。我倾向于微服务。我有理由为什么我将在下面分享。首先,让我们谈谈两个建筑模型。
他们灭绝了吗?不,他们不应该是。如果您正在处理一个可以将其分组成一个包的应用程序代码库,可以部署一次,并且可以在负载均衡器(水平缩放)后面重复,然后无需引入微服务设计的复杂性。
单片设计并不意味着单一负责服务设计是不可能的,从理论上就是谈论的。实际上,由于所有模块都很容易访问,因此随着时间的推移,线条足够快地迅速地进行模糊,如果需要,将系统更加困难,更难以将系统分成较小的碎片。
在我的经验中,单片架构在早期迭代,随着时间的推移速度越来越慢,变化的变化速度。这项警告使单片架构仍然是一个非常有价值的应用开发方法,为初创公司,较小的尺寸小组。
如果一切顺利,现在您需要提供每秒高级请求(因为您有这么多产品的产品),准确,随着%99.9正常运行时间开始展示单片设计的局限性。
Airbnb必须经历这种变化 - 巨大的迁移:从纪念碑到以服务为导向的,由Jessica Tai,2014年,Airbnb Engineering谈谈。 当他们达到某个国家时,许多团队面临的常见问题 连续部署是痛苦的缓慢,因为每个变化都需要整个包装和新部署。 慢速部署导致慢速集成导致慢速集成,从而在每次更改后运行较少量的测试。 曾经是一个快速的代码基础是现在是一个雷区,以造成任何小的变化,因为工程无法了解他们的变化的影响。 无法抽出特定于管理基础架构,数据库连接,管理,模式更改的服务都是耦合的。 部署时无法使用刮擦的容器图像。 (虽然问题列表较低,但在码头的情况下,我的心脏是珍惜的。)
到目前为止,在文章中,我一直在使用面向服务的和微服务作为可互换的术语。我相信,它们是同样的事情,但是,微服务术语确实导致一些人认为每个服务都是微米的微量的,这不是这种风格的架构的要求。
大多数优点位于光谱的相对侧,用于整料的局限性。这不是巧合。这种设计风格当然不仅仅是积极的,需要增加基础设施设计。分布式系统并不容易。但是,优于面向服务的架构;
工程师更加充满自信,因为它们是什么改变的爆炸半径,因为他们知道模块的依赖关系。
人们可以通过查看上面列出的每个方法的阳性和否定来进行呼叫。然而,正如我在文章的顶部所提到的那样,面向服务的架构解锁了墨底没有的缩放机会。一个组织缩放。
有一个很好的问题是当产品需要超过数百名工程师来解决它。祝福和诅咒。保留所有组织自信地灵活才能创新,真的挑战了触及相同代码基础的人数增加。这不与单声号混淆。单声号不需要单片架构。
在单片建筑;在代码审查期间,团队频繁被封锁,因为它很容易触摸其他团队所拥有的代码部分。完成的任何更改都需要完整的构建,互相耦合团队。如果A团队有一个失败的Selenium测试,为什么B团队B块被阻止着陆他们的无关服务变化? (他们不应该是。)
一支团队所拥有的每项服务,单独关注该服务及其消费者,也可以在构建强大的测试基础架构时产生更大的影响,以及与指标和日志记录的集成。团队将觉得更有赋权自信地部署新的变化,因为他们的界限被设置清楚,横向的东西的爆炸半径被衡量,因为团队也能衡量一切。
前端开发也有一个“最近”的地震变化,以及它们如何架构。 在它的核心,就像微服务一样,他们解锁了组织缩放机会。 这种变化是“基于组件的架构”,成为反应的主流。 建立其设计系统的公司不仅可以获得产品开发速度的速度,它们还在扩大其组织以减少耦合作为副作用。 当我被问到与这两种方法一起去哪种方式时,我通常倾向于以“这取决于”的方式回答,并获得不满意的外观。 有了这一说,面向服务的架构上的组织规模的优势不是忽视的东西。