不要再说微服务可以解决一切问题了!

Spring-Cloud架构入门(二)微服务基本包结构--转载请注明出处 注:相关代码可以查看以下git项目: 框架包:https://gitee.com/zhouzhongzhi/framework-base.git 客户端:https://gitee.com/zhouzhongzhi/customer-service.git 生产端:https://gitee.com/zhouzhongzhi/service-demo.git 注册中心:https://gi... 阅读详情

受到 Netflix 和亚马逊等科技巨头的喜爱,微服务已经成为现代软件开发的新宠,尽管它们已有十多年的历史。但是,尽管有好处,但这种范式很容易出错。那么,让我们来探讨一下微服务是什么,更重要的是,它们不是什么。

01

什么是微服务?

微服务架构是一种软件设计方法,它将应用程序分解为通过定义明确的 API 进行通信的小型独立服务。由于每个服务都可以由自治团队开发和维护,因此它是最具可扩展性的软件开发方法。

02

微服务与单体架构

微服务设计与单体开发截然相反。单体是一个实现所有功能的大型代码库(“厨房水槽”)。一切都在一个地方,没有一个组件可以孤立地工作。这意味着应用程序必须作为一个整体进行测试。

从好的方面来说,单体应用很容易启动和运行。举个例子,Airbnb 是从“The Monorail”开始的,它是一个 Ruby on Rails 单体应用程序。虽然公司还很小,但开发人员可以快速迭代。由于单体架构不同部分之间的关系是透明的,因此进行广泛的更改很容易。

然而,随着公司的发展和团队规模的扩大,单体开发变得更加困难。很快,系统就不能再装在一个头上了——移动部件太多了,所以事情变慢了。

微服务使公司能够保持团队规模小而敏捷。这个想法是将应用程序分解为可以由紧密结合的团队自主开发和部署的小型服务。

03

微服务的好处

可扩展性

公司采用微服务的主要原因是可扩展性。服务可以独立开发和发布,无需在组织内安排大规模的协调工作。

误隔离

拥有分布式系统的一个好处是能够避免单个故障点。您可以使用支持云的技术在不同的可用区部署微服务,确保您的用户永远不会遇到中断。

较小的团队

使用微服务,开发团队可以保持小而有凝聚力。小组越小,沟通开销越少,协作越好。

亚马逊通过他们的两个披萨团队将团队规模发挥到了极致。这意味着一个团队应该足够小,可以吃两个比萨饼。

选择技术堆栈的自由

对于单体应用,语言和技术堆栈选项几乎从一开始就设置好了。新开发人员必须适应过去做出的任何选择。

相比之下,每个微服务都可以使用最适合解决手头任务的技术堆栈。因此,团队可以为工作和他们的技能选择最佳工具。例如,您可以使用 Go 或 C 实现高性能服务,并使用 Erlang 或 Elixir 实现高容错微服务。

更频繁的发布

随着小团队迭代速度更快,开发和测试周期更短。而且,由于他们还可以随时部署更新,微服务的部署频率比单体应用要高得多。

04

微服务架构设计挑战

有这么多好处,似乎为新项目选择微服务是一件轻而易举的事。但是微服务设计也带来了一些严峻的挑战:

  • Small:适用于团队规模和代码库。微服务必须小到足以被一个人完全理解。如果从头开始重写它需要超过 sprint 的时间,那么你的微服务就太大了。
  • 专注于一件事:服务必须专注于问题的一个方面或只执行一项任务。
  • 自治:自治允许团队选择最合适的语言堆栈和数据模型。这通常意味着每个微服务都有自己的数据库或持久层,不与其他服务共享。
  • 与有界上下文一致:在软件中,我们创建模型来表示我们想要解决的问题。有界上下文表示给定模型的限制。上下文是服务的自然边界,因此找到它们是设计良好微服务架构的一部分。
  • 松耦合:虽然微服务可以依赖于其他微服务,但我们必须注意它们的通信方式。每次跨越有界上下文时,都需要某种程度的抽象和翻译,以防止一个服务中的行为更改影响其他服务。
  • 可独立部署:由于是自治且松耦合的,团队可以在几乎没有外部协调或集成测试的情况下部署他们的微服务。微服务应该通过定义明确的 API 进行通信,并使用翻译层来防止一项服务中的行为更改影响其他服务。

05

当微服务不是微服务时

你怎么知道你是否在做正确的微服务设计?如果您的团队可以在不与其他团队协调的情况下随时部署更新,并且如果其他团队可以类似地部署他们的更改而不影响您,那么恭喜您,您掌握了微服务的诀窍。

失去微服务提供的好处的最可靠方法是不遵守解耦规则。如果我们仔细观察,我们会发现微服务都是关于自治的。当这种自主权丧失时,团队必须在开发和部署期间进行协调。需要完美的集成测试来确保所有微服务协同工作。

即便如此,详尽的测试也无法捕捉到所有问题。当出现问题时,耦合服务是很难调试的。当问题被发现时,修复它并不总是像回滚更新那么容易。

这些都是分布式计算带来的问题。如果您曾经使用过云服务,您就会知道将服务或机器分布在多个地理位置与在同一站点上运行所有内容不同。分布式系统具有更高的延迟,可能存在同步问题,并且更难管理和调试。这种高度耦合的服务架构实际上是一个分布式单体架构,具有两全其美的优点,也没有微服务应该带来的任何好处。

如果您在不与其他团队协调或依赖其他微服务的特定版本来部署您的微服务的情况下无法进行部署,那么您只是在分发您的单体应用。

06

当微服务不是最佳选择时

微服务并没有取代单体。两者都是有效的方法。事实上,当团队仍在探索他们正在构建的东西时,单体应用可能是最佳选择。

单体应用就像是项目的自然起点,因为它易于开发、快速迭代、快速部署、易于调试,并且更能容忍设计错误。在可扩展性成为问题之前,单体应用可以让您走得更远。

07

微服务架构适合您吗?

微服务是我们开发软件的最具可扩展性的方式。但它们不是免费的午餐。如果您不小心,它们会带来一些很容易发生冲突的风险。当团队正在成长并且您需要保持快速和敏捷时,它们非常有用。但是你需要对要解决的问题有一个很好的理解,否则你最终会得到一个分布式的单体。

微服务精髓:深入探索 Erlang 强大内功心法 微服务是一种软件开发架构风格,将一个大型应用程序拆分成一系列小型、自治的服务。每个服务都可以独立开发、部署和扩展,通过轻量级通信机制进行交互。这种架构风格具有许多优势,包括松耦合、可伸缩性、独立部署和故障隔离等。 阅读详情

相关推荐

Microservices Patterns Thierry Legrand

微服务是一个非常热门的开发模式,它的出现使得应用变得更加灵活、可扩展,降低了单个应用的复杂性,但是同时也给系统的设计、开发和维护带来了新的复杂性。本书通过描述微服务架构的模式、原则、组件及其适用场景,阐述微服务架构在分布式系统中发挥重要作用,并总结实践经验,提升架构能力,提供指导性建议,将对微服务架构的学习和使用进行到底。本书面向开发人员和架构师,从微服务架构的历史、演化、原理、模式、原则、组件及适用场景等方面,详细地介绍微服务架构设计方法论。其中包括理论知识和实践案例。

AI天才研究院 2245

SpringCloud-微服务架构演变

SpringCloud-微服务架构演变

小学生波波 3521

gen_microservice:Erlang 微服务

Erlang gen_microservice 这个库解决了用 Erlang 实现微服务的问题。 您的代码只需要将行为gen_microservice添加到您的模块,实现几个回调,您就可以在隐身启动中使用一个微服务。 我们为您带来的是让WhatsApp的规模数以百万计的用户和金钱,在这里,免费的魔力。 特征 Full Hot Code Reload :该库实现了一些魔法,让您的应用程序无需后台停机即可升级。 异步和同步回调:使用这个库,你可以拥有像现代应用程序一样的完全异步代码,或者像旧的单体应用程序一样使用同步回调,你的选择,我们不限制你。 容错:我知道大多数高级开发人员不会编写错误,但是对于允许初级开发人员将代码推送到生产的特殊情况,我们需要被覆盖。 该库与 Erlang 的九个九运行时无缝集成,因此我们也为您提供了相关信息。 分布式系统 分布式系统是当今的话题。 您的TOD

SpringCloudAlibaba微服务环境搭建版本冲突避坑指南

1. maven项目中如何进行版本管理 2. SpringCloud版本描述 3. SpringCloud\SpringCloudAlibaba\SpringBoot版本对用

baidu_40120883的博客 2509

erlang_otp_22.2_win64&rabbitmq-server-3.8.3.zip

erlang_otp_22.2_win64.exe & rabbitmq-server-3.8.3.exe

Image Sensor常见分辨率下HTS,VTS设置

image sensor,HTS,VTS

propor的专栏 4975

微服务不是架构演变的终点!

本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。作者:...

xmt1139057136的专栏 2693

Jetson AGX Orin 部署 JetPack:从依赖缺失到系统升级的完整排障指南

本文详细介绍了在Jetson AGX Orin开发板上部署JetPack SDK的完整排障指南,包括解决依赖缺失、系统升级和常见错误处理。通过确认硬件版本、配置正确的软件源、执行系统升级和安装核心组件等步骤,帮助开发者顺利完成JetPack的安装与配置,确保AI开发环境的稳定运行。

weixin_29172963的博客 160

Reactive Microservices 项目常见问题解决方案

Reactive Microservices 项目常见问题解决方案 项目基础介绍和主要编程语言 Reactive Microservices 是一个完全致力于微服务架构的 Typesafe Activator 模板。该项目展示了不同的微服务通信风格,使用了 Scala、Akka、Play 以及其他 Scala 生态系统中的工具。通过这个项目,开发者可以学习到微服务架构中的不同模式、通信协议和各种微...

gitblog_00698的博客 1073

Cadence 设计实践笔记-小哥allegro 2层板笔记

规范建立文件夹本章节主要跟着B站PCB入门首选视频-小哥Cadence Allegro 2层板视频,结合自己的实践一步步完成一个完整的PCB板的设计。规范建立文件夹建立八个文件夹我使用的Cadence 17.4 有些差异原理图绘制原图绘制首先要熟悉原理图工作原理工作原理下面是这个项目的原理图重点关注电源新建原理图库打开Cadence 软件创建项目新建工程 File ==========》Project我这里选择了Enable PSPice 试试能不能仿真,新建项目如下。

我的专栏 1481

新手别怕!用‘东北天’和‘右前上’坐标系,5分钟搞懂惯性导航姿态矩阵(含Python验证代码)

本文通过‘东北天(ENU)’和‘右前上(RFU)’坐标系,详细解析惯性导航中的姿态矩阵概念。包含Python代码验证,帮助新手快速理解坐标变换、欧拉角及旋转矩阵的构建与应用,特别强调有限转动不可交换性与无限转动次序无关的区别。

weixin_29062255的博客 333

Microservices-with-Go:构建高可用微服务架构

Microservices-with-Go:构建高可用微服务架构 项目介绍 Microservices-with-Go 是一本由 Packt Publishing 出版的书籍的代码仓库,旨在帮助开发者利用 Go 语言构建可扩展和可靠的微服务架构。本书深入浅出地介绍了微服务开发中的最佳实践和解决方案,通过实践案例让读者更好地理解和掌握微服务的关键技术。 项目技术分析 本书涵盖了微服务开发中的多个关键...

gitblog_00763的博客 1473

Vue2项目实战:海康威视WEB无插件开发包V3.4从下载到多画面预览(附完整代码)

本文详细介绍了在Vue2项目中集成海康威视WEB无插件开发包V3.4实现多画面监控预览的完整实战方案。内容涵盖从开发包下载、Nginx代理配置、核心组件封装到多画面并发加载与性能优化的全流程,并提供了完整的代码示例,帮助开发者高效解决浏览器无插件播放与多路视频流加载的难题。

c7d8e9的博客 321

终极微服务调试指南:GoogleCloudPlatform/microservices-demo全链路问题排查实战

GoogleCloudPlatform/microservices-demo是一个基于云原生架构的微服务示例项目,包含10个微服务组件,全面展示了Kubernetes、Istio和gRPC等技术的实战应用。本文将带你掌握这个微服务项目的全链路问题排查技巧,轻松应对复杂分布式系统中的调试挑战。 ## 微服务架构概览:理解系统拓扑是调试的基础 在开始调试前,首先需要清晰了解整个微服务架构的组成和交

gitblog_00070的博客 914

使用DCA1000和EVM板进行数据采集

目录 1. 准备工作 1.1 硬件 1.2 软件 2. 驱动安装 3. 设置静态IP地址 4. 采集数据 5. 采集的数据文件的格式 6. 数据采集存储的数据流 参考资料 1. 准备工作 1.1 硬件 EVM板,电源线(5V,>2.5A),USB线 DCA1000,电源线(5V,>2A),USB线,网线,60pin Samtec cable 1.2 软件 mmWave Studio Matlab Runtime Engine v8.5.1 将DCA1000和EVM板

qq_42235129的博客 1万+

以 Joule 驱动的生成式开发:把需求文档直接变成可运行的 SAP 应用

摘要:SAP BTP的AI助手Joule正在改变开发方式,支持从自然语言描述自动生成数据模型、服务、UI及测试代码。在SAP Business Application Studio中,Joule能根据业务需求生成结构化代码,并提供代码补全、重构、解释等功能。开发者需注意避免上传敏感数据,并对AI生成的代码进行人工审核。Joule特别针对ABAP开发进行了优化,提供符合SAP规范的代码建议,帮助迁移遗留系统。此外,它还能快速生成CAP项目原型,但所有AI生成内容都需经过严格测试验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 343

不要再说微服务可以解决一切问题了

微服务架构提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,形成分布式调用,为用户提供最终价值。因此无论是创业型公司还是互联网独角兽企业,都将微服务架构当成一把利刃,用它解决项目在开发中所遇到的一切问题。目前,能够支持微服务架构的开源技术有很多,那么微服务架构真的很容易吗?通过互联网大会以及企业内部培训等方式和多家创业型公司的CTO和架构师交流后发现,很多项目以微服务架构规划开始,经过几次迭代后却以单体架构收尾,导致项目失败。项目复盘后分析后得出,失败主要是由于缺乏实战经验,在架构设计阶段不

博文视点(北京)官方博客 671

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

为什么你的微服务失败了一半?Microservices Recipes揭秘SOA时代的5大陷阱

微服务转型失败?开源电子书《Microservices Recipes:The Architect's Field Guide》(Microservices Recipes 微服务架构实战指南)用20个章节复盘了微服务架构的常见死法:你的系统很可能只是把 SOA 时代的5大陷阱换了件 Kubernetes 的新衣。读完本文,你将快速定位团队正在踩的坑,并拿到对应章节的解法。 ## 陷阱一:ESB

gitblog_01117的博客 979

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

微服务雪崩问题及解决方案

Sentinel是阿里巴巴开源的一款微服务流量控制组件。丰富的应用场景、完备的实时监控、广泛的开源生态、完善的SPI扩展点•直接:对当前资源限流•关联:高优先级资源触发阈值,对低优先级资源限流。•链路:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流快速失败:QPS超过阈值时,拒绝新的请求warm up: QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机。排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;

weixin_49564779的博客 3454

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring Microservices 开源项目常见问题解决方案

Spring Microservices 开源项目常见问题解决方案 项目基础介绍 Spring Microservices 是一个开源的微服务架构示例项目,由 Packt Publishing 发布。该项目主要基于 Spring 框架,使用 Java 作为主要的编程语言,同时包含了 HTML、CSS 和 Dockerfile 等其他辅助性语言。 新手常见问题与解决方案 问题一:如何配置项目环境? ...

gitblog_00323的博客 750

微服务(Microservices)概述

微服务(Microservices)概述

博客 1671

Docker部署微服务问题及解决

Docker部署微服务问题及解决

m0_52380556的博客 1612

3分钟上手微服务部署:Google microservices-demo Helm Chart实战指南

你是否还在为微服务部署的复杂性而头疼?配置零散、依赖繁琐、版本混乱——这些问题往往让开发者在部署环节耗费大量精力。本文将以Google开源的[microservices-demo](https://link.gitcode.com/i/5ee4f19c562a98443fa35712f948e335)项目为例,带你通过Helm Chart实现微服务的一键部署,从环境准备到应用访问全程只需3分钟。读...

gitblog_00611的博客 424

microservices_MicroServices体系结构可以解决您的所有问题吗?

microservices IT是您每天都能发现新事物的领域。 如今,整个开发人员社区网站都充斥着MicroServices和Docker相关的内容。 其中MicroServices的想法非常令人兴奋,并鼓励采用更好的方法来构建软件系统。 但是,与任何建筑风格一样,每种方法都各有利弊。 在讨论MicroServices方法的优点和缺点之前,首先让我说一下我对MicroServices的了解...

danpu0978的博客 126

微服务架构解决了什么问题

引语: 学习了沈剑老师的《微服务架构究竟解决了什么问题》课程,记录一下学习笔记。 现在基本上互联网公司招人就是问微服务,那么为什么要用微服务架构?它究竟解决了什么问题?有什么好处和缺点呢? 课程里有一句话很有感触就是不能大家都在用什么技术你就要用什么技术,应该是要了解它的优势和缺陷,对于合适的场景使用合适的技术架构。 传统互联网架构的问题 先看下典型的互联网架构。 方式一:从客户端到反向代理,再到高可用的web集群,web服务在直接访问db集群。 方式二:应用服务和dao,数据库都放在同一台服务器上 然后

我想问问天的专栏 2004
上一篇: UGeek大咖说 | 直播回顾:可观测之超融合存储系统的应用与设计
下一篇: 优维科技荣登“2022中国未来独角兽TOP100”榜单
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值