热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务与Monolith:选择哪一个?

“微服务”是业界的流行词,对吗?除微服务外,设计的其余设计标记为“Monolith”。但是作为一名架构师,当您尝试基于特定域创建新软件时,会做什么?采用微服务时,无需判断任何问题,

“微服务”是业界的流行词,对吗? 除微服务外,设计的其余设计标记为“ Monolith”。 但是作为一名架构师,当您尝试基于特定域创建新软件时,会做什么? 采用微服务时,无需判断任何问题,因为这很受欢迎,每个人都在后面运行,或者停下来一秒钟,然后考虑您的公司基础架构,员工专业知识,并根据选择微服务来考虑。

作为一名架构师,我们有责任在需要时选择微服务,而不是顺其自然,而是使用微服务。 在本教程中,我将讨论几个方面,在您采用微服务之前,我认为这是最重要的。 我很乐意听到我错过的任何其他建议或方面,甚至是反逻辑。 这是我在微服务和所谓的Monolith这两种架构中工作时的实现。

微服务与Monolith:选择哪一个?

让我们从选择微服务作为默认架构之前要考虑的方面开始。

1.项目助理的优势:在获得项目时,要考虑的第一个参数是要在该项目中工作的助理人数以及他们的经验是什么。 如果您的实力很弱,例如10-12则不要使用Microservices,因为Microiservices意味着独立的服务,而座右铭是“您构建它,然后运行它”。 因此,一个团队应该完成对微服务的所有权。 如果从统计角度来看您的助理人员人数很少,则每个人或两个人将拥有两个或三个微服务的所有权,这会造成严重问题。 知识仅限于他们,他们将成为Pivot员工。 另一方面,如果座右铭是一个人/两个人拥有两个或三个微服务,那么开发人员应该只关注一小部分,但要知道有关该服务的一切都将崩溃。 那么您对此有何看法?

2.微服务及其相关知识:微服务是一种新架构,与微服务有很多相互关联的概念,例如分布式Artechtures规则,例如高可用性,弹性,服务发现,CAP定理,域驱动设计,断路器模式,分布式缓存机制,路由跟踪等。不仅仅是DevOps文化与微服务紧密结合,以释放微服务的全部功能。 因此,您需要了解CI / CD工具及其文化(自动部署)。 该团队应该高效地为微服务驱动所有这些。 如果将微服务部署在云或容器中,则团队应该了解云架构(PCF,Amazon,Bluemix等)或容器架构(Docker,Docker Swarm,Messos,Kubernetes等)。 仔细考虑团队知识,始终认为当您与微服务打交道时,它意味着多个服务和多个团队,因此每个团队成员应清楚地了解所有相关知识,以独立运行其微服务。 如果您没有这样的休闲时间,请确保每个团队都有一个或两个人,他们知道所有相关知识,以便他们可以教育自己的团队。

3.组织基础架构:另一个重要方面是组织基础架构。 适应微服务之前,请务必检查您的组织采用哪种模式。 根据Conway的法律,无论您的组织结构在代码实现中得到体现。 那么检查一下,您的组织是否采用了敏捷技术? 是由跨技术成员(如UI,中间层,数据库)组成的团队吗?部署和QA测试模式是什么?您的组织是否遵循手动部署和手动测试,或者他们已经或将要采用DevOps文化?组织将要部署的工件是组织中安装了应用程序服务器并部署工件或组织迁移到云的服务器很少。 基于这些参数,选择是否要采用微服务。 如果组织有自己的服务器(很少)安装了应用程序服务器,那么在这种情况下,所有不同的微服务构件都将部署相同的服务器空间,这将无法满足水平扩展的要求,因此采用微服务的情况将很危险。 同样,在手动测试和手动部署的情况下(如果您采用微服务),对于运营团队和质量检查团队来说也是一场噩梦。 对于开发人员而言,将更改集成到SIT中并进行测试也是一场噩梦。

4.域的重要性:检查您正在处理的域的性质。 坐在Business analysist上,了解这有多重要,是否需要将域划分为子域,以便在Domain不是很复杂的情况下,根据该决策将相关功能封装在上下文中? 最好坚持使用Monolith。 无需创建上下文映射并在绑定上下文中封装子域。

5.项目预算 :这是需要注意的另一个重要方面。 考虑一下该项目的预算。 项目的性质是固定投标或TNM类型。 微服务项目比整体方案昂贵,因为它需要更多的服务器或云基础架构,自动化管道,资源计数,所有团队都应该是跨技能的团队。 因此,就基础架构和资源水平而言,它比Monolith的成本高得多。 因此,请考虑与您的项目相适应的预算(我想给您一个提示:请不要向任何人发布。作为一名优秀的Loyal Architect,请务必考虑收入边际,在预算较小的情况下,模块化的整体结构要优于微服务它用于收益。将来,如果您希望转用微服务,那也是可能的。)

结论:如今,微服务技术以这种方式受到打击。 新手或中级开发人员认为Monolith不好,这是所有模块相互绞死的BBOM(大泥巴)。 但是,如果您维护模块化方法,那么这是很好的,并且在很多情况下,当我们的资源有限时,它比微服务更好。 因此,请谨慎选择不要顺其自然。 我总是建议首先使用Monolith,但将其模块化。 如果您使用Java 9和Module,则可以采用SOA,但可以从模块化的一个开始,并且在实际需要时(例如,模块边界将泄漏,或者您无法在模块之间维护非循环图(DAG)),然后考虑一下喙Monolith基于DDD,可以向微服务倾斜。

在此之前,我想说的是:不要像其他人采用微服务那样使用微服务。 在需要时采用它。 我看到很多情况下某些项目尝试采用微服务,但是由于缺乏知识,他们创建了一个既不是微服务也不是Monolith的项目。 他们创建了许多服务,没有适当的封装,并且每个服务彼此链接在一起,因此一个敏捷团队无法独立决定是否部署一个微服务,多个团队,多个工件相互依赖,团队互相指责为:功能跨越许多服务,这是一个可怕的情况。 我将在以后的文章中对此进行讨论。 但是现在,在采用微服务之前,请三思而后行,因为Ben叔叔曾说过“强大的力量伴随着巨大的责任感”。

翻译自: https://www.javacodegeeks.com/2018/10/microservice-monolith-choose.html


推荐阅读
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
author-avatar
泄漏磁的_956
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有