热门标签 | 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


推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
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社区 版权所有