热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

3.微服务设计如何建模服务

1.什么样的服务是好服务1.松耦合如果做到了服务之间的松耦合,那么修改一个服务就不需要修改另外一个服务。使用微服务最重要的一点是,能够独立修改以及部署单

1.什么样的服务是好服务1.松耦合如果做到了服务之间的松耦合&#xff0c;那么修改一个服务就不需要修改另外一个服务。使用微服务最重要的一点是&#xff0c;能够独立修改以及部署单个服务而不需要修改系统的其他部分。什么会导致紧耦合呢&#xff1f;一个典型的错误是&#xff0c;使用紧耦合的方式走服务之间的集成&#xff0c;从而使得一个服务的修改会导致其消费者的修改。一个松耦合的服务应该尽可能的少的知道与之协作的那些服务的信息。这也意味着&#xff0c;应该限制两个服务之间不同调用形式的数量&#xff0c;因为除了潜在的性能问题之外&#xff0c;过度的通信可能会导致紧耦合。2.高内聚我们希望把相关的行为聚集在一起&#xff0c;把不相关的行为放在别处。为什么呢&#xff1f;因为如果你要改变某个行为的话&#xff0c;最好能够只在一个地方修改&#xff0c;然后就尽可能快的发布。如果需要在不同的地方做这些修改的话&#xff0c;那么可能就需要同时发布多个微服务才能交付这个功能。在多个不同的地方进行修改会很慢&#xff0c;同时部署多个服务的风险也很高&#xff0c;这2个都是我们要避免的。所以&#xff0c;找到问题域的边界就可以确保相关的行为能放在同一个地方&#xff0c;并且它们会和其他边界以尽量松耦合的形式进行通信。2.限制上下文<<领域驱动设计>>&#xff1a;认为任何一个给定的领域都包含多个限界上下文&#xff0c;每个限界上下文的东西分成2部分&#xff1a;一部分不需要与外部进行通信&#xff0c;另外一部分则需要。每个上下文都有明确的接口&#xff0c;该接口决定了它会暴露哪些模型给其他的上下文。限界的上下文&#xff1a;一个由显式边界界定的特定职责。如果你想要从一个限界的上下文中获取信息&#xff0c;或者向其发起请求&#xff0c;需要使用模型和它显式边界进行通信。细胞之所以存在&#xff0c;是因为细胞膜定义了什么在细胞内&#xff0c;什么在细胞外&#xff0c;并且确定了什么物质可以通过细胞膜。1.共享的隐藏模型有时候&#xff0c;同一个名字在不同的上下文中有着完全不同的含义。2.模块和服务明白应该共享特定的模型&#xff0c;而不应该共享内部表示这个道理之后&#xff0c;就可以避免潜在的紧耦合风险。我们还识别出了领域内的一些边界&#xff0c;边界内部是相关性比较高的业务功能&#xff0c;从而得到高内聚。这些模块边界就可以成为绝佳的微服务候选。一般来讲&#xff0c;微服务应该清晰地和限界上下文保持一致。熟练之后&#xff0c;就可以省掉在单块系统中先使用模块的这个步骤&#xff0c;而直接使用单独的服务。然而对于一个新的系统而言&#xff0c;可以先使用一段时间的单块系统&#xff0c;因为如果服务之间的边界搞错了&#xff0c;后面修复的代价会很大。所以最好能够等待系统稳定下来之后&#xff0c;再确定哪些东西作为一个服务划分出去。所以&#xff0c;如果服务边界和领域的界限上下文能保持一致&#xff0c;并且微服务可以很好的标识这些限界的上下文。3.过早的划分过早的将一个系统划分为微服务的代价非常高&#xff0c;尤其是面对新领域的时候。很多时候&#xff0c;将一个已有的代码库划分为微服务&#xff0c;要比从头开始构建微服务简单的多。3.业务功能当你在思考组织内的限界上下文时&#xff0c;不应该从共享数据的角度来考虑&#xff0c;而应该从这些上下文能够提供的功能来考虑。先问自己 &#39;这个上下文是做什么用的&#39;&#xff0c;然后再考虑 &#39;它需要什么样的数据&#39;。建模服务时&#xff0c;应该将这些功能作为关键操作提供给其他写作者(其他服务).4.逐步划分上下文一开始你会识别出一些粗粒度的限界上下文&#xff0c;而这些限界的上下文可能又包含一些嵌套的限界上下文。当考虑微服务的边界的时候&#xff0c;首先考虑比较大的&#xff0c;粗鲁度的那些上下文&#xff0c;然后当发现合适的缝隙后&#xff0c;再进一步划分出那些嵌套的上下文。有一种做法是&#xff0c;使用这些嵌套的上下文不直接对外可见。对于外界来说&#xff0c;它们用的还是仓库的功能&#xff0c;但发出的请求其实被透明的映射到了2个或者更多的服务上。通常很难说哪种规则比较合理&#xff0c;但是你应该根据组织结构来决定&#xff0c;到底是使用嵌套的方法还是完全分离的方法。如果是不同的团队维护&#xff0c;那么他们大概会希望都是顶层微服务。如果都是同一个团队管理&#xff0c;那么嵌套结构会更合理。另外一个倾向嵌套方法的原因是&#xff1a;它可以使得架构更成块从而更好的测试。5.关于业务概念的沟通修改系统的目的是为了满足业务需求。我们会修改面向客户的功能。如果把希望分解成为限界上下文来表示领域的话&#xff0c;那么对于某个功能所要做的修改&#xff0c;就更倾向于局限在一个单独的微服务边界之内。这样就减小了修改的范围&#xff0c;并能够更快速的进行部署。微服务之间如何就同一个业务概念进行通信&#xff0c;也是一件很重要的事情。基于业务领域的软件建模不应该止于限界上下文的概念。在组织内部共享的那些相同的术语和想法&#xff0c;也应该被反映到服务的接口上。以跟组织通信相同的方式&#xff0c;来思考微服务之间的通信形式是非常有用的。事实上&#xff0c;通信形式在整个组织范围内都非常重要。6.技术边界

 

如何建模服务

 

 


推荐阅读
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品ling取参考你的选题刚好在下面有,有时间看到机会给您发1ssm资源循环利用2springboot校园考勤系统3ssm防 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • SpringCloud电商平台开发指南:实战案例解析
    本文详细介绍了基于SpringCloud构建的电商平台项目,涵盖了从技术选型到项目部署的全流程,旨在帮助开发者快速掌握电商平台的开发技巧。 ... [详细]
  • Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
    go,通过,map,filter,foreach,等,流,式,ap ... [详细]
  • API网关作为微服务架构中的关键组件,扮演着系统与外部世界交互的唯一接口角色。它不仅封装了系统的内部复杂性,还为不同客户端提供了个性化的API接口。本文将探讨API网关的重要性及其核心功能。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 近期,公司在构建新的交易系统时遇到了一个常见的问题——金额存储。由于涉及资金的操作需要高度的准确性,使用float类型进行金额计算可能会导致不可预见的误差。本文将深入探讨这一问题,并提供解决方案。 ... [详细]
  • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
    Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
  • 学生信息管理系统架构设计与实现
    随着教育机构规模的扩大,学生人数的增多带来了信息管理上的挑战,传统的人工处理方式不仅耗时费力,且效率低下。为此,本文档提出了一种基于现代技术的学生信息管理系统的设计方案,旨在提高信息处理的效率和准确性。 ... [详细]
author-avatar
dachuanghu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有