项目从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.mzph.cn/news/236012.shtml

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

相关文章

强烈推荐的前端学习资源,先收藏!

今天分享一些个人收藏的前端学习资源,按一下几个维度简单划分了下,有 3D、框架、构建工具等等。由于这些地址都是我个人收藏的,所以带有一些强烈的主观意识,还有很多优秀的网址没有收录进来,会不断更新的,欢…

系统分析师(软考)知识点整理(二)

会计相关 会计是指记录、分类、汇总、计量和报告发送在企业经济活动中的财务数据的行为 #mermaid-svg-YBI5YPWzqWhRB4kI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YBI5YPWzqWhRB4kI .error-icon{fill:#552222…

亚马逊鲲鹏系统引爆广告点击率提升秘籍

在竞争激烈的电商市场,提高广告点击率成为各大卖家争相追求的目标。而如今,亚马逊鲲鹏系统的强大功能再次为卖家们打开了广告优化的新大门。其中,搜索广告功能更是成为提高关键词排名的利器。本文将详细介绍如何通过亚马逊鲲鹏系统实现点击广…

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现KOA-CNN-B…

linux | 软连接与硬链接 | 实测

很多知识,我们都是通过学习其他博主的博客,可是学习的过程 常常需要辩证的去辨别真伪。这很耗精力,最好的方法就是实践去检测。 软链接 和 应链接 在 linux 上操作非常重要 常见场景:最重要的就是,做备份,尤…

Talk | 约翰霍普金斯大学博士生魏晨: De-Diffusion-文本是不同模态的沟通桥梁

本期为TechBeat人工智能社区第557期线上Talk。 北京时间12月20日(周三)20:00,约翰霍普金斯大学博士生—魏晨的Talk已准时在TechBeat人工智能社区开播! 她与大家分享的主题是: “De-Diffusion-文本是不同模态的沟通桥梁题”,介绍了她的团队在如…

Linux---进程状态

目录 一、系统进程状态介绍 1.运行状态 2.阻塞状态 3.挂起状态 二、Linux中的进程状态 1.R (running) 2.S (sleeping) 3.D(disk sleep) 4.T(stopped) 5.t(tracing stop) 6.X(dead&am…

OpenHarmony应用开发环境搭建指南

OpenHarmony的应用开发主要是基于Deveco Studio(目前只支持Windows及Mac平台)搭配相应的SDK进行,现对开发环境的搭建进行说明。 1:Deveco下载安装 下载对应平台的安装包即可。接下来以Windows平台为例,进行开发环境的搭建。 下载…

楼宇对讲、可视门铃案例分析

语音通话芯片:D34018,D34118,D5020,D31101; D34018 单片电话机通话电路,合并了必 需的放大器、衰减器和几种控制 功能,包括发送和接收衰减器、 背景噪声电平检测系统和一个衰 减器控制系统,对发送和接收电 平好于背景噪声做出反…

PyCharm添加自动函数文档注释

目录 1、背景2、开启PyCharm自动函数文档注释 1、背景 规范的函数文档注释有助于他人理解代码,便于团队协作、提高效率。但如果我们自己手写函数文档注释将非常耗时耗力。PyCharm安装后默认没有开启自动化函数文档注释,需要我们开启 2、开启PyCharm自动…

反序列化 [SWPUCTF 2021 新生赛]ez_unserialize

打开题目 查看源代码 得到提示&#xff0c;那我们用御剑扫描一下看看 我们知道有个robots.txt&#xff0c;访问一下得到 那我们便访问一下 cl45s.php看看 得到网站源代码 <?phperror_reporting(0); show_source("cl45s.php");class wllm{public $admin;public …

55.0/CSS 的应用(详细版)

目录 55.1.1 设计边框样式 55.1.2 调整边框的粗细 55.1.3 边框颜色 55.1.4 复合设置边框 55.2 模块的边距 55.3 模块的内边距 55.4 层的应用 55.4.1 层的建立 55.4.2 浮动——float 55.4.3 清除浮动 55.4.4 层的定位 55.4.5 设置层的溢出——overflow 55.4.6 设置鼠…

Linux开发工具——vim篇

vim开发工具的使用 文章目录 vim开发工具的使用认识vimvim常用三种模式vim正常模式命令集模式切换移动光标删除文字赋值替换撤销上一次操作更改跳到指定的行 vim末行模式命令集列出行号跳到文件中的某一行&#xff1a;保存文件离开vim查找字符&#xff1a; 总结题外话&#xff…

spring使用@Autowired @Lazy 注解 解决循环依赖

今天在启动项目时报错&#xff1a;org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘colorController’: Unsatisfied dependency expressed through field ‘projectService’; nested exception is org.springframework.…

使用Dropzone提升开发效率的全方位指南

开发过程中&#xff0c;文件上传、图像处理、脚本执行等任务常常是不可或缺的环节。为了提升开发效率&#xff0c;开发者需要一个强大且灵活的工具。在这方面&#xff0c;Dropzone 是一个非常优秀的选择。本文将介绍如何在各种使用场景下&#xff0c;利用 Dropzone 工具来提高开…

【数据结构和算法】子数组最大平均数 I

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 滑动窗口含义 2.2 滑动窗口一般解法 2.3 方法一&#xff1a;滑动窗口 三、代码 3.1 方法一&#…

异步编程Promise

文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误&#xff08;error&#xff09;和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中&#xff0c;promise的使…

Easyrecovery2024手机版文件数据恢复软件

Easyrecovery是著名数据恢复厂商Kroll Ontrack推出文件的恢复软件&#xff0c;因病毒、误删、U盘故障等问题导致的word/excel/ppt/照片等文件丢失的情况&#xff0c;Easyrecovery能做到较高的恢复成功率&#xff01;Easyrecovery是全球著名数据恢复厂商Kroll Ontrack推出的文件…

.Net Attribute 什么是特性、预定义特性使用(一)

什么是特性&#xff1f; 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面…

Git报错x509: certificate signed by unknown authority

下载报错&#xff1a; Error downloading object: model-00001-of-00008.safetensors (ed3ac49): Smudge error: Error downloading model-00001-of-00008.safetensors (ed3ac4983f682a999b0e4b6f072aad294c4fd9a7e968e90835ba5c4b466d3c7c): LFS: Get https://cdn-lfs.huggin…