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

聊聊,数据库,事务,内嵌,tcp,连接 · 浏览次数 : 184

小编点评

**服务内部嵌套TCP连接的利弊与解决策略** **利点:** * 原点性事务控制:内部 TCP 连接可以确保两个操作之间的原子性。 * 性能优化:内部连接可以针对特定事务进行性能优化。 * 安全性:内部 TCP 连接可以通过加密和认证来增强安全性。 **弊点:** * 网络抖动:建立和维护 TCP 连接可能导致网络抖动。 * 资源消耗:每个 TCP 连接都需要消耗系统资源。 * 连接维护开销:维护大量 TCP 连接可能会增加数据库管理系统的开销。 * 连接延迟:建立和维护 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调用的返回码进行手动事务提交或回滚。事务传播级别,尽量使用当前事务。
    增加一个查询的动作,用于检索RPC的操作是否正常进行。

  2. 无强一致性

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

与聊聊数据库事务内嵌TCP连接相似的内容:

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

最近再看项目代码,发现很多的service里面,喜欢在事务内部再去调用HTTP请求,简单分析下此种方式的利弊与解决策略。 概述 在数据库内部嵌套TCP连接(一般是HTTP调用或是RPC远程调用)。 @Transactional(rollbackFor = Exception.class) publi

SQLSERVER 事务日志的 LSN 到底是什么?

一:背景 1. 讲故事 大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 .mdf 的合成前面的文章已经有所介绍,这篇我们来聊一下 .ldf 的一些内部知识,比如 LSN。

[转帖]OpenAI 道歉:Redis bug 致 ChatGPT 故障、数据泄露

https://www.163.com/dy/article/I0N6HEIT0511D6RL.html OpenAI表示,Redis的开源库bug导致了发生在周一的ChatGPT故障和数据泄露事件,当时一些用户可以看到其他用户的个人信息和聊天查询内容。 ChatGPT在侧边栏中显示了用户执行的以往

聊聊分布式事务一致性与本地消息表

我个人比较推崇本地消息表模式来实现最终一致性。首先本地消息表的设计不仅可以解决事务一致性的问题,对于消息队列常见问题中的消息丢失与消息幂等其实都是可以通过本地消息表来解决;其带来的好处是多重的。 ### 什么是分布式事务一致性 大白话就是对数据源进行拆分后,多库多机器的多数据库事务一致性问题。因为此

聊聊分布式解决方案Saga模式

### Saga模式 Saga模式使用一系列本地事务来提供事务管理,而一个本地事务对应一个Saga参与者,在Saga流程里面每一个本地事务只操作本地数据库,然后通过消息或事件来触发下一个本地事务,如果其中一个本地事务失败了,Saga就会执行一系列补偿事务来实现回滚操作。(补偿事务简单来讲就是对之前本

聊聊 QianKun JS 沙箱的那些事

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:空山 什么是沙箱 沙箱即 SandBox,它是一种安全机制,用于严格控制访问资源。通过在程序中创建一个独立的运行环境,把一些来源不可信、具有破坏力或者又是无法

聊聊Flink必知必会(四)

### 概述 Flink Streaming API借鉴了谷歌数据流模型(Google Data Flow Model),它的流API支持不同的时间概念。Flink明确支持以下3个不同的时间概念。 Flink明确支持以下3个不同的时间概念。 (1)事件时间:事件发生的时间,由产生(或存储)事件的设备

计算机网络那些事之 MTU 篇

哈喽大家好,我是咸鱼 今天我们来聊聊计算机网络中的 MTU (Maximum Transmission Unit) 什么是 MTU ? MTU(Maximum Transmission Unit)是指数据链路层中的最大传输单元 通俗点来讲,MTU 是指数据链路层能够传输的最大数据帧的大小(以字节为单

Canvas简历编辑器-我的剪贴板里究竟有什么数据

Canvas图形编辑器-我的剪贴板里究竟有什么数据 在这里我们先来聊聊我们究竟应该如何操作剪贴板,也就是我们在浏览器的复制粘贴事件,并且在此基础上聊聊我们在Canvas图形编辑器中应该如何控制焦点以及如何实现复制粘贴行为。 在线编辑: https://windrunnermax.github.io/

聊一聊Java中的Steam流

在我们的日常编程任务中,对于集合的制造和处理是必不可少的。当我们需要对于集合进行分组或查找的操作时,需要用迭代器对于集合进行操作,而当我们需要处理的数据量很大的时候,为了提高性能,就需要使用到并行处理,这样的处理方式是很复杂的。流可以帮助开发者节约宝贵的时间,让以上的事情变得轻松。