项目从0到1,架构选型 :单体架构优先考虑

当我听到关于团队使用微服务架构的故事时,我注意到了一个共同的现象。

  1. 几乎所有成功的微服务故事都是从一个过于庞大的庞然大物开始的,后来这个庞然大物被拆分了
  2. 我所听说的几乎所有从零开始构建微服务系统的案例,最终都陷入了严重的麻烦。

这种模式导致我的许多同事认为,你不应该用微服务开始一个新项目,即使你确信你的应用程序足够大,值得这样做。
在这里插入图片描述
微服务是一种有用的体系结构,但即使是它们的拥护者也说,使用它们会产生显著的微服务溢价,这意味着它们只对更复杂的系统有用。这种溢价,本质上是管理一套服务的成本,将会拖慢团队的速度,而倾向于为更简单的应用程序提供一个整体。这导致了对单体优先策略的有力论证,在这种策略中,您应该首先将新应用程序构建为单体,即使您认为它可能会在以后从微服务架构中受益。

第一个原因是经典的雅格尼。当你开始一个新的应用程序时,你有多确定它对你的用户有用?可能很难扩展一个设计糟糕但成功的软件系统,但这仍然比它的反面要好。正如我们现在所认识到的,通常发现一个软件想法是否有用的最好方法是构建一个简单的版本,然后看看它的效果如何。在第一阶段,你需要优先考虑速度(以及反馈的周期时间),所以微服务的溢价是你应该避免的拖累。

从微服务开始的第二个问题是,只有在服务之间有良好的、稳定的边界时,它们才能很好地工作——这本质上是绘制正确的BoundedContexts集合的任务。服务之间的任何功能重构都比在一个整体中要困难得多。但是,即使是在熟悉的领域工作的经验丰富的架构师,在开始时也很难得到正确的边界。通过首先构建一个整体,您可以在微服务设计在其上刷上一层糖霜之前弄清楚正确的边界是什么。它还为您提供了开发细粒度服务所需的microservice先决条件的时间。

我听说过不同的执行“巨石优先”策略的方法。合乎逻辑的方法是仔细设计一个整体,注意软件内部的模块化,包括API边界和数据存储方式。做好这一点,向微服务的转变就相对简单了。然而,如果我听过大量这样的故事,我就会对这种方法感到更放心。

更常见的方法是从一个整体开始,逐渐剥离边缘的微服务。这样的方法可以在微服务体系结构的核心留下一个庞大的单体,但是大多数新的开发都发生在微服务中,而单体相对静止。

另一种常见的方法是完全更换巨石。很少有人认为这是一种值得骄傲的方法,然而,建造一块巨石作为祭祀建筑是有好处的。不要害怕建立一个你会抛弃的庞然大物,特别是如果一个庞然大物可以让你快速进入市场。

我遇到的另一种方法是从几个粗粒度的服务开始,这些服务比您期望的要大。使用这些粗粒度服务来习惯使用多个服务,同时享受这样的粗粒度减少了必须进行的服务间重构的数量。然后随着边界的稳定,分解成更细粒度的服务。

虽然我的大部分联系人都倾向于单一优先的方法,但这绝不是一致的。相反的观点认为,从微服务开始可以让您习惯在微服务环境中开发的节奏。以一种足够模块化的方式构建一个单体,以便它可以很容易地分解成微服务,这需要很多,也许是太多的纪律。通过从微服务开始,你可以让每个人从一开始就习惯在独立的小团队中开发,并且通过服务边界将团队分开可以在需要时更容易地扩展开发工作。这对于系统替换尤其可行,因为您有更好的机会尽早提出足够稳定的边界。

尽管证据很少,但我认为除非您在团队中具有构建微服务系统的合理经验,否则不应该从微服务开始。

我觉得我还没有足够的轶事来确定如何决定是否使用“单一优先”策略。这些都是微服务的早期阶段,相对而言,很少有趣闻轶事可以借鉴。因此,任何人在这些话题上的建议都必须被视为试探性的,无论他们多么自信地争辩。

Sam Newman描述了一个团队考虑在新项目中使用微服务的案例研究。

  • 注1:
    您不能假设您可以任意取一个系统并将其分解为微服务。大多数系统的模块之间都有太多的依赖关系,因此无法合理地拆分。我听说过很多这样的例子:试图分解一块巨石,结果很快就弄得一团糟。我也听说过一些逐步实现微服务的成功案例——但这些案例需要一个相对较好的模块化设计作为开始。
  • 注2:
    严格来说,我认为你应该称之为“双石”,但我认为这种方法遵循了单石优先策略的本质:从粗粒度开始获取知识,然后再拆分。

我从我的同事那里偷了很多想法:James Lewis, Sam Newman, Thiyagu Palanisamy和Evan Bottcher。斯蒂芬·蒂尔科夫(Stefan Tilkov)对早期草稿的评论在澄清我的想法方面发挥了关键作用。查德·库里创造了可爱的雕文龙。Steven Lowe, Patrick Kua, Jean Robert D’amore, Chelsea Komlo, Ashok Subramanian, Dan Siwiec, Prasanna Pendse, Kief Morris, Chris Ford和Florian Sellmayr在我们的内部邮件列表中讨论了草稿。

在这里插入图片描述

自从微服务第一次进入软件世界的视野以来,我和我的同事们就一直在写关于微服务的文章。本指南页面有关于何时使用微服务、开始时应该具备的实践、如何有效地测试它们以及如何分解单体的文章。 - by Martin Fowler

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/290201.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

easyexcel复杂表头导出

easyexcel复杂表头导出 /*** ClassName ColumnWidthStyleStrategy* Description: excel导出列长度**/ public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {private static final int MAX_COLUMN_WIDTH 200;private final Map<Integer, Map…

驱动开发-1

一、驱动课程大纲 内核模块字符设备驱动中断 二、ARM裸机代码和驱动有什么区别&#xff1f; 1、共同点&#xff1a; 都能够操作硬件 2、不同点&#xff1a; 1&#xff09;裸机就是用C语言给对应的寄存器里面写值&#xff0c;驱动是按照一定的套路往寄存器里面写值 2&#xff09…

多级缓存:亿级流量的缓存方案

文章目录 一.多级缓存的引入二.JVM进程缓存三.Lua语法入门四.多级缓存1.OpenResty2.查询Tomcat3.Redis缓存预热4.查询Redis缓存5.Nginx本地缓存6.缓存同步 一.多级缓存的引入 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未…

22.JSP技术

JSP起源 在很多动态网页中&#xff0c;绝大部分内容都是固定不变的&#xff0c;只有局部内容需要动态产生和改变。如果使用Servlet程序来输出只有局部内容需要动态改变的网页&#xff0c;其中所有的静态内容也需要程序员用Java程序代码产生&#xff0c;整个Servlet程序的代码将…

司铭宇老师:汽车销售培训-如何提升4S店获客能力

一、数据分析与客户画像 1.数据收集与分析 4S店应当充分利用现有资源&#xff0c;收集客户信息、车辆信息、消费行为等数据。通过数据清洗、整理和分析&#xff0c;挖掘客户需求、喜好和购车习惯等关键信息。此外&#xff0c;还可以通过合作伙伴、互联网渠道等途径&#xff0…

【C++】开源:libmodbus通信协议库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍libmodbus通信协议库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#x…

阿里云服务器2核4G多少钱?阿里云服务器2核4G配置活动价格详解

阿里云服务器2核4G配置是很多个人和一般企业用户的首选云服务器配置&#xff0c;阿里云服务器2核4G的价格并不是一成不变的&#xff0c;而是跟云服务器实例规格、带宽、云盘、地域等因素有关&#xff0c;本文将详细介绍阿里云服务器2核4G配置的价格及相关因素&#xff0c;帮助用…

计算机基础:网络基础

目录 ​​​​​​​一.网线制作 1.制作所需要工具 网线制作标准 ​编辑 2.水晶头使用 3.网线钳使用 4.视频教学 二.集线器、交换机介绍 1.OSI七层模型 2.TCP/IP四层参考模型 3.集线器、交换机。路由器介绍 集线器 交换机 路由器 区别 三.路由器的配置 1.路由器设…

3-高可用-隔离术

隔离是指将系统或资源分割开&#xff0c;系统隔离是为了在系统发生故障时&#xff0c;能限定传播范围和影响范围&#xff0c;即发生故障后不会出现滚雪球效应&#xff0c;从而保证只有出问题的服务不可用&#xff0c;其他服务还是可用的。 比较多的隔离手段有线程隔离、进程隔…

【蓝桥杯一对一保奖辅导】国奖学姐蓝桥杯经验分享

目录 写在前面有关报名费如何准备&#xff1f;看书 /练习 /分类 /总结比赛技巧与指导 写在前面 蓝桥杯对于计算机专业相关的同学来说是非常值得参加的。 蓝桥杯相对于ACM比赛而言获奖难度较小&#xff0c;只要掌握技巧&#xff0c;拿到 省一甚至国奖是比较容易的&#xff0c;但…

移动端手机图片裁剪

移动端手机图片裁剪-遇见你与你分享

华为atlas300安装教程

1、安装包位置&#xff1a; /data/ai_install_packages 2、添加HwHiAiUser用户&#xff1a; groupadd -g 1000 HwHiAiUser useradd -g HwHiAiUser -u 1000 -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash 3、安装驱动&#xff1a; ./Ascend-hdk-310p-npu-driver_6.0.0_l…