首页 > 数据库 >聊聊数据库事务内嵌TCP连接

聊聊数据库事务内嵌TCP连接

时间:2023-09-13 10:58:43浏览次数:45  
标签:内嵌 事务 调用 HTTP 数据库 TCP 聊聊 连接

最近再看项目代码,发现很多的service里面,喜欢在事务内部再去调用HTTP请求,简单分析下此种方式的利弊与解决策略。

概述

在数据库内部嵌套TCP连接(一般是HTTP调用或是RPC远程调用)。

@Transactional(rollbackFor = Exception.class)
public Boolean inviteUser(..){
    // service 调用
    userService.add(..);
	// HTTP调用
    httpClient.post(..,20)
}

优点:

  1. 保障两个操作间的原子性、隔离性。
  2. 事务控制: 建立TCP连接可以使数据库管理系统更好地控制和监视事务。它可以跟踪连接的状态和事务的执行进度,从而更容易实现事务管理和恢复。
  3. 性能优化: 内部TCP连接可以针对特定的事务进行性能优化。例如,可以为事务分配更多的系统资源,以提高其执行速度。
  4. 安全性: 内部TCP连接可以通过加密和认证来增强安全性,确保只有授权的用户或应用程序能够访问数据库

弊端:

  1. TCP连接可能会超时,导致事务变成长事务。
  2. 网络抖动出现异常,可能会导致前一个正常的操作回滚。
  3. 资源消耗: 每个TCP连接都需要消耗系统资源,包括内存和处理能力。在高负载情况下,内部建立TCP连接可能导致资源耗尽,影响其他事务的执行。
  4. 连接维护开销: 维护大量的TCP连接可能会增加数据库管理系统的开销。每个连接都需要管理、维护和监视,这可能会导致性能下降。
  5. 复杂性: 内部TCP连接引入了更复杂的架构,需要更多的管理和维护工作。这可能需要更多的开发和管理工作,并增加了系统的复杂性。
  6. 连接延迟: 建立和维护TCP连接需要时间,这可能会导致事务的启动延迟。对于需要快速响应的事务,这可能是一个不利因素。

解决方案

评估审视多个操作调用之间是否有强一致性。

  1. 有强一致性

必须手动开启事务,根据HTTP调用的返回码进行手动事务提交或回滚。事务传播级别,尽量使用当前事务。

  1. 无强一致性

手动开启事务,或是使用自动事务注解,但最后可以通过事件监听器回调事务接口的afterCommit方法,再进行HTTP调用。事务传播级别,尽量使用当前事务。

标签:内嵌,事务,调用,HTTP,数据库,TCP,聊聊,连接
From: https://www.cnblogs.com/zhiyong-ITNote/p/17698926.html

相关文章

  • 探究TCP/IP协议栈
    TCP/IP协议栈,这是一个似乎既熟悉又陌生的名词。在我们的日常生活中,无论我们是在使用智能手机浏览网页,还是在电脑上发送电子邮件,甚至是在进行视频聊天,我们都在无形中与TCP/IP协议栈打交道。那么,TCP/IP协议栈究竟是什么呢?今天,就让我们一起来揭开它的神秘面纱。一、什么是TCP/IP协议栈......
  • 网络协议百科全书:28张图带你搞懂TCP
    大家好,我的网工朋友。不仅仅是网工,只要你是做IT相关的工作,肯定都离不开网络。那网络中最重要的协议,大概非TCP莫属,谁去面试没被问过网络协议的相关问题?谁没买过那本最经典的《TCP/IP详解》 。不得不说,既要看枯燥的讲解,还要理解,还要和工作结合,运用掌握……真没这么简单。而且不学也......
  • TCP协议
    特征面向连接:通讯双发发送数据之前要建立连接可靠交付:提供尽可靠交付的服务,保证消息不错、不乱、不丢面向字节流:不缺分消息边界,发送数据为字节流。使用者需要自己区分消息边界。全双工(full-duplexservice):实时的双向通讯。TCP格式创建连接三次握手 为什么两次握手不行?......
  • 物联网项目-温湿度之 TCP 协议包C#版
    0、背景本协议包参考车联网TCP组包格式,C#写测试客户端。1、代码主函数staticvoidMain(string[]args){//TestData.LoginData();//TestData.PostData();//Console.ReadLine();//return;byte[]re;......
  • Linux网络编程(TCP状态转换关系)
    (文章目录)前言本篇文章来讲解一下TCP的状态转换关系,学习这个状态转换关系对于我们深入了解网络编程是非常有必要的。一、TCP状态转换图二、TCP连接状态转换解析客户端状态转换:1.CLOSED->SYN-SENT:当客户端尝试与服务器建立连接时,客户端从CLOSED状态转换到SYN-SEND状态。......
  • 6 TCP
    packageInternet;importjava.io.IOException;importjava.io.InputStream;importjava.net.ServerSocket;importjava.net.Socket;//服务端:先有服务端再有客户端publicclassTest16_Server{publicstaticvoidmain(String[]args)throwsIOException{......
  • TCP/IP基础
    数据链路层协议(字段类型值)ARP     地址解析协议STP     生成树RSTP    快速生成树MSTP    多生成树ISIS    中间系统到中间系统VLAN    虚拟局域网QINQ    基于802.1q封装双层vlan的二层VPN隧道LACP    链路聚合GVRP    vlan的......
  • linux c++ tcp
    1.TCP/IP协议栈链路层:负责下图所示物理链接标准IP层(网络层):选择合适的路径传输数据,无法解决数据传输错误问题,所以需要TCP/UDP协议作为保障TCP/UDP(传输层):IP层(网络层)解决传输路径问题,确定了路径,就进行传输数据,IP层只关注一个数据包如何进行传输,至于传输过程数据包是否损坏,传输......
  • 深度分析一下标准协议modbus TCP IP和modbus RTU的优劣【以温湿度传感器为例】
    原标题:RS485信号输出的温湿度传感器和RJ45信号输出的温湿度传感器深入分析拓展485信号输出的温湿度传感器 modbusTCP/IP协议和modbusRTU协议是两种不同的通讯协议,它们在通讯方式、数据格式和适用场景等方面存在一定的差异。下面将对这两种协议进行详细介绍和比较。一、mod......
  • 从软件工程师角度聊聊 Kubernetes
    作为软件工程师,我们应该熟悉K8s,尽管它有点像DevOps,但它能让我们更好地了解幕后发生的事情,让我们与部署工作更密切相关,更有责任感。本文将从软件工程师的角度探讨Kubernetes(K8s),我们将介绍其动机、原理和核心组件,助力于开发者们提升Kubernetes的专业知识水平,能更有信心地拥......