- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
与替代架构相比,使用微服务的优缺点是什么?
使用微服务时是否有经验法则?
最佳答案
优点
Building Microservices中的Sam Newman列举了微服务的主要优点,如下所示:
技术异质性
通过包含多个协作服务的系统,我们可以决定使用不同的
每个内部都有技术。这使我们能够为每个工作选择合适的工具,而不是
必须选择一种更加标准化,一刀切的全能方法
最低公分母。
flex
flex 工程中的一个关键概念是隔板。如果系统的一个组成部分
失败,但是这种失败并没有解决,您可以将问题与其余
系统可以继续工作。服务边界成为您显而易见的隔壁。在一个
整体服务,如果服务失败,一切都会停止。与单片
系统,我们可以在多台机器上运行以减少发生故障的机会,但是
微服务,我们可以构建处理服务全部失败并降级的系统
功能相应。
缩放比例
借助庞大的整体服务,我们必须将所有内容一起扩展。一小部分
我们整个系统的性能都受到限制,但是如果该行为被锁定在
巨大的整体应用程序,我们必须将所有内容按比例缩放。用
较小的服务,我们可以扩展那些需要扩展的服务,从而使我们能够运行
在较小,功能较弱的硬件上使用系统的其他部分。
易于部署
将单行更改为一百万行长的整体应用程序需要整体
为了发布更改而部署的应用程序。这可能会产生很大的影响,
高风险部署。在实践中,最终会发生影响重大的高风险部署
很少是由于可以理解的恐惧。
借助微服务,我们可以更改单个服务并独立部署
该系统的其余部分。这使我们可以更快地部署代码。如果有问题
发生时,可以快速将其隔离到单个服务,从而使快速回滚易于实现
实现。
组织一致性
微服务使我们能够更好地将架构与组织保持一致,从而帮助我们
最小化在任何一个代码库上工作的人员数量,以达到团队的最佳位置
规模和生产力。我们还可以在团队之间转移服务所有权,以保持
在一项服务上工作的人们在同一地点。
可组合性
分布式系统和面向服务的体系结构的主要 promise 之一是
我们为功能复用提供了机会。通过微服务,我们允许
为不同目的而以不同方式使用的功能。这可以是
当我们考虑消费者如何使用我们的软件时,这一点尤其重要。
优化可替换性
如果您在中型或大型组织中工作,那么您很可能知道一些
坐在角落的庞大,令人讨厌的旧系统。一个没人想碰的人。那一个
对您的公司的运营至关重要,但这恰好是用一些奇怪的Fortran编写的
变体,并且只能在25年前使用寿命终止的硬件上运行。为什么没有
被替换了吗?你知道为什么:它太大而且工作风险很大。
由于我们的单个服务规模较小,因此以更好的价格替换它们的成本
实现,甚至完全删除它们,都更易于管理。
缺点
微服务的最重要缺点是它们具有以下所有相关的复杂性:
分布式系统,虽然我们已经学到了很多有关如何管理分布式系统的知识
系统还不错。如果你要来
从整体系统的 Angular 来看,您必须在处理方面做得更好
部署,测试和监视以释放 yield 。你会
还需要对您如何扩展系统并确保它们
有 flex 。如果发生分布式交易或CAP定理之类的事情,也不要感到惊讶
要么开始让您头痛!
闭幕致辞
只是引用Martin Fowler:
One reasonable argument we've heard is that you shouldn't start with amicroservices architecture. Instead begin with a monolith, keep itmodular, and split it into microservices once the monolith becomes aproblem.
关于architecture - 微服务:优点和缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903605/
如果您设计分布式应用程序以实现轻松扩展,或者您只想使用 Amazon、Google 或 Microsoft 提供的任何新的“云计算”产品,那么您通常最终会使用一些典型的概念或组件: 分布式 blob
根据uncle Bob's Clean Architecture 、企业和应用程序业务规则(概念上由命令组成)位于外部接口(interface)层之下的层中。因此,无论何时调用接口(interface
我在网上找不到它的任何实现实际上为您提供了一种与框架无关且实用的实现方式。 我已经看到了几个解决它的低于标准的建议: 使存储库方法成为原子 使用例原子化 它们都不是理想的。 案例#1 :大多数用例依赖
我正在查看 Sparkle 项目的配置并注意到它们设置: 架构 = ppc i386 x86_64 有效架构 = i386 x86_64 来自苹果的有效架构描述: Space-separated li
只听本周的podcast并认为将您的一些经验组合在一起会很好,在这些经验中,您已经看到设计的“架构”方面比应有的支配更多东西。 Java 在这方面经常受到负面报道,而且随着 Java EE 的复杂性增
我正在阅读 Bob Martin (https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html) 的清洁架构
OSGi是模块化架构,JavaBeans是组件架构。有什么区别? 最佳答案 OSGi 和 Java Beans 之间的主要区别在于类加载器的工作方式。在标准 .jar 文件或 EJB 中,rt.jar
我对 Clean Architecture 中的 Gateway to Entity 依赖有疑问。我认为以下同心圆图形经常被介绍为整洁的架构。 在上图中,Gateway并没有直视Entity。但是,还
我试图理解 TOGAF 9 的核心概念。 无论我多长时间阅读 TOGAF 手册中的解释,我都无法理解 Enterprise Continuum 和 Architecture Repository 之间
如果 Kappa 架构直接对流进行分析,而不是将数据拆分为两个流,那么在像 Kafka 这样的消息系统中,数据存储在哪里?或者它可以在数据库中进行重新计算? 单独的批处理层是否比使用流处理引擎重新计算
它们的含义是什么,我可以将它们设置为不同的值吗? 最佳答案 架构是您想要构建的架构,有效的架构是您可以设想使用您的代码库构建的架构。 所以也许您只想为 armv7 构建二进制文件,但相同的源代码可以为
我现在正在尝试在 Xcode 4.0 中构建的项目遇到问题,希望有人可以为我解释一下。 我正在尝试使用 ZBar SDK 并遵循此处概述的指南中概述的说明: http://zbar.sourcefor
在基于 Apple Silicon 的机器上使用 Interface builder 时,我当前的项目会引发 IBDesignable 错误。 我尝试排除用于调试的 arm64 架构,以及我在互联网上
Xcode 项目中出现警告: crypto was rejected as an implicit dependency for 'libcrypto.a' because its architect
我正在 Xcode 5 中开始新项目。我想使用 iOS SDK 7 开发应用程序,但部署目标为 iOS 5.0。当我在 Xcode 中创建新项目并尝试将部署目标更改为 5.0 时,我收到了这条消息:
编辑 :这个问题可能是旧的,它与 xcode 3 有关。 我正在开发一个需要 voip 支持的 iPhone 应用程序,所以我添加了 pjsip 的 ARM 版本图书馆。但如果我使用 iPhone 模
我们最近将最低 iOS 支持设置为 4.0,并开始使用 LLVM 编译器对当前可用的应用程序进行新更新。 将“架构”和“有效架构”设置为仅 armv7 是否会排除 iPhone 3G 等 armv6
我想在我的 64 位机器上启用额外的架构(32 位)。我做了 dpkg --print-architecture 来了解已知的架构,即 amd64 。之后我做了 dpkg --print--forei
操作系统:OS X Yosemite 版本 10.10.1 XCode:未安装 应用程序加载器3.0 (620) PhoneGap:3.7.0 PhoneGap 构建:在线 (build.phoneg
我们已经构建了一个具有多个 native 绑定(bind)的 Xamarin 应用程序(iOS、Android)。该应用程序在设备和模拟器上运行良好,我们能够毫无问题地构建存档(显然)。 问题是当我们
我是一名优秀的程序员,十分优秀!