首页 > 其他分享 >微服务架构服务间调用如何规范

微服务架构服务间调用如何规范

时间:2024-01-09 10:37:16浏览次数:29  
标签:调用 架构 流程 任务 单据 服务

目前微服务架构应用非常普遍,我们在获得其带来的优势的同时,需要思考是否解决了其带来的问题。

在以往学习Spring Boot的过程中,就遇到关于Service循环依赖的问题。微服务架构中服务间相互依赖的问题仍然十分普遍,针对这个问题,我咨询过公司的架构师,他们的回答是无法解决/避免。显然上述回答是让我无法信服的,个人认为这是一种没有深度思考的回答,是一种仅站在技术维度,而未站在管理维度思考的结果。

分布式单体

为什么这么认为,首先我们需要考虑一个问题,为什么我们要从单体架构转向微服务架构。其中一个核心且普遍的原因是随着持续的迭代,单体架构内部服务间耦合度越来越高,逻辑越来越复杂,对一个业务点的变更常常导致牵一发而动全身的后果。答案显而易见,如果微服务间的服务调用缺少规范,那么同样在后续迭代过程中会面临同样的问题,受微服务特性的影响,这种问题的复杂度可能会更高。 之前看到国外技术专家针对该问题的论述,一针见血的将其定义为:分布式单体。

业务场景分析

为什么会出现服务间相互依赖的问题,需要根据实际的业务场景(针对业务场景分析,作为技术/研发人员常常会陷入技术思维而脱离业务场景开发,这是由行业或角色分工导致的)进行分析。

举个例子,实际业务中通常从建单(创建单据)开始,通过单据驱动业务流程,例如根据单据创建一个任务,任务执行完成后单据状态变更。在微服务架构中,可能会涉及两个服务间的交互:单据服务和任务服务。两个简单流程:一是单据服务调用任务服务创建任务;二是任务服务调用单据服务更新单据状态。为便于区分,将流程一定义为正向流程,流程二定义为逆向流程

一般情况下,正向流程会设计为同步调用,这是由业务特性决定的,例如单据开始【执行作业】,单据状态变更的同时需要保证任务创建成功,否则任务无法正常驱动。通过业务场景分析逆向流程是否需要同步调用,任务执行成功通知单据状态变更:任务执行成功状态变更实际上并不受单据状态更新成功与否的影响,即任务执行完成只需要通知单据即可,可设计为异步通知。这种场景下一般可借助消息中间件来完成。

解决方案

根据业务特性,我们在实际的开发中,正向流程中服务依赖一般设计为同步调用;逆向流程通过消息通知方式,即任务完成后发送领域事件(领域驱动设计),单据服务监听任务消息完成状态更新。 以上处理方式保证了服务间只有单向调用,彻底隔离了服务间相互调用的影响,是完全自上而下的调用方式,同时在设计中也借鉴了EDA架构(事件驱动架构)的思想。

优势:

  • 一是完全自上而下的服务调用,结构简单清晰,管理、维护、学习成本低;
  • 二是满足大部分业务场景需求;
  • 三是逆向流程采用EDA架构,伸缩性、性能均得到提升

标签:调用,架构,流程,任务,单据,服务
From: https://blog.51cto.com/u_16279811/9157114

相关文章

  • 使用 Ubuntu 20.04 进行初始服务器设置
    前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。使用Ubuntu20.04进行初始服务器设置介绍首次创建新的Ubuntu20.04服务器时,应该执行一些重要的配置步骤作为初始设置的一部分。这些步骤将提高服务器的安全性和可......
  • MQTT服务器连接不上的问题
    问题描述环境:阿里云服务器Ubuntu22.04.3LTS,安装mosquitto后,在虚拟机端订阅消息出现报错(以前用阿里云Ubuntu20.04LTS的服务器装上就能用),以下服务器ip是我乱填的mosquitto_sub-t/iotstuff-h129.25.125.124-p1883Error:Connectionrefused解决办法查看服务器的端口占......
  • ARM64和X64架构之间的区别
    ARM64和X64架构之间的区别ARM64(也称为Aarch64)是一种64位的处理器架构,源自英国ARM公司设计的RISC(精简指令集计算机)架构。这种架构以其低功耗、高性能以及广泛应用于移动设备如智能手机和平板电脑而知名。近年来,由于其性能提升和能效优势,ARM64也开始在服务器和某些个人电脑平台上得到......
  • 系统存储架构升级分享
    一、业务背景系统业务功能:系统内部进行数据处理及整合,对外部系统提供结果数据的初始化(写)及查询数据结果服务。系统网络架构:部署架构对切量上线的影响\-内部管理系统上线对其他系统的读业务无影响分布式缓存可进行单独扩容,与存储及查询功能升级无关通过缓存层的隔离,系统......
  • openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败
    openGauss学习笔记-190openGauss数据库运维-常见故障定位案例-服务启动失败190.1服务启动失败190.1.1问题现象服务启动失败。190.1.2原因分析配置参数不合理,数据库因系统资源不足,或者配置参数不满足内部约束,启动失败。由于部分数据节点状态不正常,导致数据库启动失败。......
  • elixir erlang 简单调用学习
    实际上基于elixir的mix进行erlang以及elixir的互调用开发处理是很方便的,mix直接就包含了构建erlang代码同时对于代码的互调用,只要使用符合语言格式要求就行了,以下是一个简单的互调用学习项目准备项目结构 ├──README.md├──lib│├──a.ex│└──er_app......
  • 服务器超线程的好处
    服务器超线程的好处1、提高性能:超线程通过提高整体系统吞吐量显着提高服务器性能。通过允许多个线程在单个物理内核上同时执行,超线程减少了空闲时间并最大限度地利用了可用资源。这会加快任务执行速度并缩短应用程序的响应时间,尤其是在多线程工作负载中。2、增强的多任务处理:超线......
  • 服务器超线程的好处有哪些
    服务器超线程的好处1、提高性能:超线程通过提高整体系统吞吐量显着提高服务器性能。通过允许多个线程在单个物理内核上同时执行,超线程减少了空闲时间并最大限度地利用了可用资源。这会加快任务执行速度并缩短应用程序的响应时间,尤其是在多线程工作负载中。2、增强的多任务处理:超线......
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式
    微服务彻底改变了应用程序开发世界,将大型整体系统分解为更小、更易于管理的组件。这种架构风格的特点是独立、松散耦合的服务,带来了从可扩展性、模块化到更高的灵活性等众多优势。DevOps团队如何最好地利用这种方法来实现最高效率?答案在于理解并有效地采用微服务设计模式。在本文......
  • 「微服务」Saga 模式 如何使用微服务实现业务事务-第二部分
    在上一篇文章中,我们看到了实现分布式事务的一些挑战,以及如何使用Event/Choreography方法实现Saga的模式。在本文中,我们将讨论如何通过使用另一种类型的Saga实现(称为Command或Orchestration)来解决一些问题,如复杂事务或事件的循环依赖性。Saga的命令/编曲序列逻辑在编曲方法中,我们......