摘要:微服务项目的依赖关系在微服务化架构中软件项目被拆分成多个自治的服务服务之间通过网络协议进行调用通常使用透明的远程调用在领域每个服务上线后对外输出的接口为一个包在微服务领域包被分为一方库二方库三方库一方库本服务在进程内依赖的包二方库在服务外通
微服务项目的依赖关系
在微服务化架构中, 软件项目被拆分成多个自治的服务, 服务之间通过网络协议进行调用, 通常使用透明的 RPC 远程调用.
在 Java 领域, 每个服务上线后, 对外输出的接口为一个 jar 包. 在微服务领域, jar 包被分为一方库、二方库、三方库.
一方库: 本服务在 JVM 进程内依赖的 jar 包.
二方库: 在服务外通过网络通信或 RPC 调用的服务的 JAR 包.
三方库: 所依赖的其他公司或者组织提供的服务或者模块.
微服务项目的层级结构Java 微服务项目的层级结构一般为: 服务导出层、接口层和逻辑实现层, 如下图.
其中, 每个层级的职责和最终的表现形式如下:
服务导出层: 最后会打包成一个 War 包, 包含服务的实现 Jar 包、接口 Jar 包, 以及 Web 项目导出 RPC 服务所需要的配置文件等.
服务接口层: 包含业务接口、依赖的 DTO 及需要的枚举类等, 最后打包成 Jar 包, 并发布到 Maven 服务器上, 也包含在服务导出层的 War 包中.
服务实现层: 包含业务逻辑实现类、依赖的第三方服务的包装类, 以及下层数据库访问的 DAO 类等, 最后打包成 Jar 包, 包含在服务导出层的 War 包中.
Java 平台下微服务实现层的架构图:
本地服务层通过 DAO 层与数据库进行交互. 这里使用了数据库事务, 保证了数据存取的强一致性, 业务流程层通过组合本地服务和外部服务来完成业务逻辑的实现, 由于有远程服务的依赖, 因此只能保证数据的最终一致性.
这里有一个反模式, 切记永远不要在本地事务终调用远程服务, 在这种场景下如果远程服务出现了问题, 则会拖长事务, 导致应用服务器占用太多的数据库连接, 让服务器负载迅速攀升, 在严重情况下会压垮数据库. 顺便说一下, 虽然我们要竭力避免这种场景的发生, 但是数据库也应该有负载熔断机制.
Java 平台下微服务实现层的反模式架构
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72940.html
摘要:前言这里筑梦师是一名正在努力学习的开发工程师目前致力于全栈方向的学习希望可以和大家一起交流技术共同进步用简书记录下自己的学习历程个人学习方法分享本文目录更新说明目录学习方法学习态度全栈开发学习路线很长知识拓展很长在这里收取很多人的建议以后决 前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程...
摘要:近日,微软对外发布了容器服务公共预览版。同时,和微软在容器服务方面进行了广泛技术合作。重点的和两项开源技术将微软的与其他云容器服务提供商区分开来。是目前最成熟的容器编排引擎,微软正是看中了这点才选择了与合作。 小数点分享:开源技术 Docker 的轻量化、敏捷性以及可移植性的优点,使其在全球IT领域广受瞩目,并将在 2016 年迎来全面爆发。微软对于 Mesos 的支持,我们期待未来...
阅读 1212·2021-11-08 13:25
阅读 1418·2021-10-13 09:40
阅读 2746·2021-09-28 09:35
阅读 703·2021-09-23 11:54
阅读 1093·2021-09-02 15:11
阅读 2398·2019-08-30 13:18
阅读 1634·2019-08-30 12:51
阅读 2657·2019-08-29 18:39