热门标签 | 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.技术边界

 

如何建模服务

 

 


推荐阅读
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 前后端分离的企业级微服务架构microservices-platformzlt-microservices-platformgit地址:https:gitee.co ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
  • 说出来你可能不信,我用三天做了一个完整的项目
    Java在人工智能中能起到什么作用?作为编程语言中的扛把子,Java20多年稳定不倒,就在于它的稳定性,维护成本极低。这使得 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • tcp/ip 高清大图
    为什么80%的码农都做不了架构师?转载于:https:my.oschina.netgsbhzb ... [详细]
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社区 版权所有