14.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--CAP
CAP 是一款专为 .NET 生态设计的开源框架,其核心目标是解决微服务中跨服务数据一致性问题。在分布式系统中,传统事务无法跨服务保证数据一致性,CAP 通过本地事务与消息记录绑定,再利用消息中间件(如 RabbitMQ、Kafka 等)进行异步通信,实现最终一致性,从而优化性能并降低系统耦合。
在 .NET 平台上,CAP 定位为高效、灵活的分布式事务解决方案。自项目诞生以来,依托社区不断迭代,CAP 已逐步完善消息可靠传递、重试补偿、日志监控等关键功能,并在微服务架构中成为核心组件,帮助开发者构建稳定、可扩展的分布式应用。
一、CAP 概述
1.1 CAP 定义与简介
-
CAP 主要功能及设计理念
CAP 是一款专为分布式系统和微服务设计的开源框架,核心目标在于解决跨服务数据一致性问题。它通过将本地数据库事务与消息记录绑定,在提交本地事务的同时记录消息,再由后台异步任务确保消息发送到消息中间件(如 RabbitMQ、Kafka 等),从而实现最终一致性。设计理念侧重于降低系统耦合、优化性能和简化开发难度,为分布式事务提供轻量级且高可靠性的解决方案。 -
核心概念
- 事件驱动:系统各个模块通过事件通知触发业务操作,解耦业务逻辑。
- 发布/订阅模型:消息生产者发布事件,消费者订阅并处理,实现模块之间的异步通信。
- 分布式事务:通过消息与数据库操作的联动,确保跨系统操作在一定条件下达到最终一致性,避免传统分布式事务带来的性能瓶颈。
1.2 核心特性与优势
-
统一接口封装多种消息队列
CAP 提供统一的编程接口,屏蔽了底层消息队列(如 RabbitMQ、Kafka、ActiveMQ、Azure Service Bus 等)的差异,使开发者可以灵活切换或同时使用多种消息中间件,而无需针对各个中间件编写冗余代码,从而提高开发效率与系统兼容性。 -
内置持久化机制与重试机制
为了确保消息的可靠投递,CAP 内置了持久化机制,在本地记录消息发送状态,同时利用自动重试机制处理网络异常或暂时性故障,确保消息能够在各种异常场景下最终被成功消费。 -
支持分布式事务与最终一致性
通过将本地事务与消息发送绑定,CAP 能够在跨服务调用时实现分布式事务处理,确保在跨系统操作中达到最终一致性,有效解决传统分布式事务方案中复杂度高、性能低的问题。
二、核心架构与原理
2.1 系统架构总览
CAP 采用模块化设计,其架构主要包含以下几个部分:
-
消息生产者
在业务操作完成时,生产者会在本地事务中记录待发送消息。该记录作为持久化存储的一部分,保证本地事务与后续消息投递的一致性,从而为分布式事务提供基础支持。 -
中间件适配层
这一层提供了统一接口,屏蔽了不同消息队列(如 RabbitMQ、Kafka 等)之间的差异。适配层负责将本地存储的消息转换为目标中间件所需的格式,并负责后续的消息传输,确保系统扩展性和灵活性。 -
事务协调组件
事务协调组件负责将本地事务与消息记录绑定,当本地事务成功时,触发消息发送;在出现异常时,则启动补偿机制和自动重试,确保最终一致性。 -
消息消费者
消费者通过订阅指定的消息队列,接收并处理来自生产者的消息,实现业务逻辑的异步执行,同时配合重试和错误处理机制保证消息的可靠消费。
2.2 工作原理解析
-
发布订阅模型
CAP 采用发布订阅模型实现消息的异步传递。消息生产者在完成业务处理时,将事件数据记录到本地持久化存储中,同时发布消息;后台任务会从数据库中读取这些消息,通过中间件适配层转换格式,并发送到相应的消息队列。消费者订阅队列后接收消息,并在成功处理后发送确认,确保消息仅被消费一次,从而实现系统解耦与高效异步通信。 -
分布式事务处理
为保障跨服务、跨数据库的数据一致性,CAP 通过“本地事务与消息记录绑定”的方式将数据库操作与消息发送整合到一个事务中。只有在数据库操作成功提交后,消息才会被标记为可发送状态,进而推送到消息中间件,最终实现分布式事务中的最终一致性保障。 -
内置重试和补偿机制
当消息在发送或消费过程中出现异常时,CAP 内置的重试机制会自动重试投递操作,以应对网络故障或临时不可用等问题。若重试多次仍无法成功,系统还会触发补偿机制,记录错误日志或发送告警,确保异常情况被及时发现并处理,从而维护整个系统的数据一致性与稳定性。
三、环境配置与安装
3.1 NET Core 环境版本要求
CAP 是专为 .NET Core 开发的解决方案,因此需要在支持 .NET Core 的平台上运行。当前版本通常建议使用较新的 .NET Core 版本(如 .NET Core 3.1 或更新版本),以确保获得最佳的性能、安全性和长期支持。实际使用时,应根据项目需求和 CAP 文档中指定的最低版本要求进行环境配置。
3.2 对应消息队列服务的支持及预配置要求
使用 CAP 时,需要预先部署并配置所选用的消息队列服务,如 RabbitMQ、Kafka、ActiveMQ、Azure Service Bus 等。不同中间件可能具有各自的安装、连接和认证配置要求。开发者应确认相应消息服务已正确启动,并在 CAP 的配置文件中配置好连接字符串、交换机、队列名称等参数。此外,为了确保消息持久性和准确投递,部分场景还需要配置持久化数据存储(如 SQL Server、MySQL、PostgreSQL 等),以便 CAP 对消息记录进行管理与重试控制。
3.3 安装与集成步骤
-
NuGet 安装包介绍及安装命令示例
要在项目中引入 CAP,可通过 NuGet 包管理器安装核心库及所需的消息队列和数据库支持包。例如:Install-Package DotNetCore.CAP Install-Package DotNetCore.CAP.RabbitMQ Install-Package DotNetCore.CAP.SqlServer
Tip:根据实际使用的消息队列和数据库,选择相应的适配包进行安装。
-
ASP.NET Core 中的 CAP 注册与配置方法
在 ASP.NET Core 项目中,需在Program.cs
中注册 CAP 服务,并配置相关选项:services.AddCap(x => {x.UseSqlServer("YourConnectionString");x.UseRabbitMQ(options =>{options.HostName = "localhost";options.UserName = "guest";options.Password = "guest";}); });
这段代码配置了使用 SQL Server 作为持久化存储,RabbitMQ 作为消息队列。
-
配置文件示例及参数说明
在appsettings.json
中,可添加 CAP 的相关配置:{"ConnectionStrings": {"DefaultConnection": "Server=.;Database=capdb;Trusted_Connection=True;"},"RabbitMQ": {"HostName": "localhost","UserName": "guest","Password": "guest"} }
然后在
Program.cs
中读取这些配置:services.AddCap(x => {x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));x.UseRabbitMQ(options =>{options.HostName = Configuration["RabbitMQ:HostName"];options.UserName = Configuration["RabbitMQ:UserName"];options.Password = Configuration["RabbitMQ:Password"];}); });
通过以上配置,CAP 将能够正确连接到指定的数据库和消息队列,实现消息的发布与订阅功能。
四、CAP 的高级功能与扩展
4.1 多种传输和存储的支持
-
支持的消息中间件类型及配置要点
CAP 支持多种主流消息中间件,包括:
- RabbitMQ:基于 AMQP 协议的开源消息代理软件,需配置主机名、用户名和密码等连接信息。
- Kafka:高吞吐量的分布式消息系统,需配置 Kafka 的连接字符串和相关主题信息。
- ActiveMQ:支持多种传输协议的消息中间件,需配置 ActiveMQ 的连接地址和队列信息。
- Azure Service Bus:微软提供的云端消息服务,需配置服务总线的连接字符串和命名空间等信息。
- Amazon SQS:AWS 提供的消息队列服务,需配置访问密钥、区域和队列名称等信息。
- NATS:轻量级、高性能的消息系统,需配置 NATS 的服务器地址和相关主题信息。
- Redis Streams:基于 Redis 的流式消息功能,需配置 Redis 的连接信息和流名称等。在使用这些中间件时,需根据各自的配置要求,在 CAP 的配置文件中正确设置连接参数,以确保消息的正常传输。
-
消息持久化策略
CAP 在消息发送前,采用本地消息表机制,将消息持久化到数据库中,与业务数据在同一事务中提交,确保消息不会因系统异常而丢失。此外,CAP 内置了异步重试机制,当消息发送失败时,会根据配置的重试策略自动进行重试,直到消息成功发送或达到最大重试次数。这种持久化与重试机制相结合的策略,增强了系统在面对网络波动或服务异常时的鲁棒性,确保消息的可靠投递。
4.2 事务管理与保证一致性
-
CAP 如何实现分布式事务
CAP 通过“本地消息表(Outbox)”模式实现分布式事务的协调。在业务操作中,CAP 将事件消息与本地数据库操作封装在同一个事务中,确保两者同时成功或失败。当本地事务提交后,CAP 会将消息记录到数据库的消息表中,并由后台任务异步将消息发送到消息中间件。这种方式避免了传统分布式事务中复杂的两阶段提交(2PC)协议,提高了系统的性能和可用性。 -
最终一致性和补偿机制的处理逻辑
CAP 采用最终一致性模型,结合重试和补偿机制,确保系统在出现异常时仍能保持数据一致性。当消息发送或消费失败时,CAP 会根据配置的重试策略自动进行重试。如果多次重试仍失败,CAP 提供了补偿机制,允许开发者根据具体业务场景手动或自动执行补偿操作,以修复数据不一致的问题。这种设计使得系统在面对网络波动或服务异常时,仍能保证数据的最终一致性。
五、总结
CAP 是一款专为 .NET 生态设计的开源框架,旨在解决微服务架构中跨服务的数据一致性问题。通过将本地数据库事务与消息记录绑定,并利用消息中间件(如 RabbitMQ、Kafka 等)进行异步通信,CAP 实现了最终一致性,优化了系统性能并降低了耦合度。在 .NET 平台上,CAP 定位为高效、灵活的分布式事务解决方案。自项目诞生以来,CAP 不断迭代,完善了消息可靠传递、重试补偿、日志监控等关键功能,成为微服务架构中的核心组件,帮助开发者构建稳定、可扩展的分布式应用。CAP 的核心特性包括:统一封装多种消息队列,提供一致的编程接口;内置持久化机制和自动重试机制,确保消息可靠投递;支持分布式事务处理,通过本地事务与消息发送的绑定,实现跨服务的数据一致性。此外,CAP 提供了灵活的配置方式,支持多种消息中间件和数据库,适配不同的业务场景。其模块化设计和易用性,使得在 ASP.NET Core 等 .NET 应用中集成 CAP 变得简单高效。CAP 为 .NET 开发者提供了一个轻量级、高可靠性的分布式事务解决方案,简化了微服务架构中复杂的事务处理,提升了系统的稳定性和可维护性。
相关文章:
14.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--CAP
CAP 是一款专为 .NET 生态设计的开源框架,其核心目标是解决微服务中跨服务数据一致性问题。在分布式系统中,传统事务无法跨服务保证数据一致性,CAP 通过本地事务与消息记录绑定,再利用消息中间件(如 RabbitMQ、Kafka 等…...
智能资源管理机制-重传机制
一、发送端资源管理的核心机制 1. 滑动窗口(Sliding Window) 这是TCP协议的核心优化设计: 窗口动态滑动:发送端不需要保留所有已发送的分组,只需维护一个"发送窗口"窗口大小:由接收方通告的接…...
【Linux网络与网络编程】08.传输层协议 UDP
传输层协议负责将数据从发送端传输到接收端。 一、再谈端口号 端口号标识了一个主机上进行通信的不同的应用程序。在 TCP/IP 协议中,用 "源IP","源端口号","目的 IP","目的端口号"&…...
局域网下ESP32-S3 LED灯的UDP控制
在局域网下通过IP地址控制ESP32-S3上的LED,可以使用UDP或TCP协议。以下是一个基于UDP协议的完整示例,包括ESP32-S3的服务器代码和一个简单的Python客户端代码。 ESP32-S3 服务器代码 import socket import time import network import machineled Non…...
call、bind、apply
call、bind、apply它们三个都是函数的方法,都可以用于改变this的指向问题。 var person "liangxiao" let obj {name:"张三",say:function() {console.log(this.name);} }obj.say(); setTimeout(function() {obj.say(); },1000) obj.say()打…...
Redis 哨兵模式 搭建
1 . 哨兵模式拓扑 与 简介 本文介绍如何搭建 单主双从 多哨兵模式的搭建 哨兵有12个作用 。通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。 当哨兵监测到master宕机,会自动将slave切换成master,然后通过…...
客户端负载均衡与服务器端负载均衡详解
客户端负载均衡与服务器端负载均衡详解 1. 客户端负载均衡(Client-Side Load Balancing) 核心概念 定义:负载均衡逻辑在客户端实现,客户端主动选择目标服务实例。典型场景:微服务内部调用(如Spring Cloud…...
Ningx负载均衡
Ningx负载均衡 upstream(上游)配置负载均衡1、weight(加权轮询)2、ip_hash(负载均衡)3、url hash负载均衡4、least_conn(最小连接负载均衡) upstream(上游)配置负载均衡 Nginx负载均衡 参考: nginx从安装…...
头歌软件工程导论UML画图题(基于starUML)
一.结构化分析方法-数据流图 本关卡需要画图的一共有5关,直接将此图画好每关提交一次即可,以下的所有图均以此方法提交 二.面向对象分析之用例图 三.面向对象分析之类图 注意此处创建Class之后,双击Class出现以下选项 点击相应的选项创建属性…...
智能车摄像头开源—9 动态权、模糊PID、速度决策、路径优化
目录 一、前言 二、动态权 1.概述 2.偏差值加动态权 三、模糊PID 四、速度决策 1.曲率计算 2.速度拟合 3.速度控制 五、路径 六、国赛视频 一、前言 在前中期通过识别直道、弯道等元素可进行加减速操作实现速度的控制,可进一步缩减一圈的运行速度ÿ…...
java基础 this和super的介绍
this和super this关键字的用法super关键字的用法this与super的区别和注意事项 this关键字的用法 this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针 class Person{private String name;private int age;public String …...
《Python星球日记》第25天:Pandas 数据分析
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 订阅专栏:《Python星球日记》 目录 一、引言二、数据分组与聚合1. 分组操…...
C++在Linux上生成动态库并调用接口测试
加减乘除demo代码 项目结构 CPP/ ├── calculator.cpp ├── calculator.h ├── main.cpp 头文件 #ifndef CALCULATOR_H #define CALCULATOR_H#ifdef __cplusplus extern "C" {#endifdouble add(double a, double b);double subtract(double a, double b…...
Cesium.js(6):Cesium相机系统
Camera表示观察场景的视角。通过操作摄像机,可以控制视图的位置、方向和角度。 帮助文档:Camera - Cesium Documentation 1 setView setView 方法允许你指定相机的目标位置和姿态。你可以通过 Cartesian3 对象来指定目标位置,并通过 orien…...
机器学习中的数学(PartⅡ)——线性代数:概述
首先引入代数和线性代数的概念: 在将一些直观的、基于经验或直觉的概念转化为严格的数学或逻辑定义时,一种常用方法是构建一组对象和一组操作这些对象的规则,这就是代数。线性代数是研究向量和某些操作向量的规则。 其次从更广泛的意义上定…...
基于双闭环PID控制器的永磁同步电机控制系统匝间故障Simulink仿真
欢迎微♥关注“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2013Rb)软件。建议采用matlab2013 Rb及以上版本打开。(若需要其他版本可联系代为转换,高于该版本的matlab均可正…...
在51单片机上实现平滑呼吸灯:50us定时器PWM实战指南
在51单片机上实现平滑呼吸灯:50us定时器PWM实战指南 引言 本文将详细介绍如何在51单片机平台上,通过精确的50us定时器中断实现无闪烁的呼吸灯效果。相比常见的125us实现方案,50us定时器能提供更高的PWM频率和更细腻的亮度控制。 硬件设计 基本电路配置 主控芯片:SC92F8…...
asm汇编源代码之CPU型号检测
提供1个子程序: 1. CPU型号检测 CPUTYPE 无输入参数,返回值AX指示CPU类型(报歉,当时最新CPU型号只有80486) 函数的返回值详细描述如下 CPUTYPE PROC FAR ;OUT: AX01, 8086; AX02, 80286; AX03, 80386; AX04, 80486 UP; ; more source code at http://www.ahj…...
提高课:数据结构之树状数组
1,楼兰图腾 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm>using namespace std;typedef long long LL;const int N 200010;int n; int a[N]; int tr[N]; int Greater[N], lower[N];int lowbit(int x) {ret…...
python可变对象与不可变对象
文章目录 Python 中的可变对象与不可变对象不可变对象(Immutable Objects)可变对象(Mutable Objects)重要区别 Python 中的可变对象与不可变对象 在 Python 中,对象可以分为可变对象(mutable)和不可变对象(immutable),这是 Python 中非常重要的概念&…...
C++学习之金融类安全传输平台项目git
目录 1.知识点概述 2.版本控制工具作用 3.git和SVN 4.git介绍 5.git安装 6.工作区 暂存区 版本库概念 7.本地文件添加到暂存区和提交到版本库 8.文件的修改和还原 9.查看提交的历史版本信息 10.版本差异比较 11.删除文件 12.本地版本管理设置忽略目录 13.远程git仓…...
果篮问题 Python
# 给你两个长度为 n 的整数数组,fruits 和 baskets,其中 fruits[i] 表示第 i 种水果的 数量,baskets[j] 表示第 j 个篮子的 容量。 # 你需要对 fruits 数组从左到右按照以下规则放置水果: # 每种水果必须放入第一个 容量大于等于 …...
Spring 是如何解决循环依赖的?
在使用 Spring 框架进行开发时,循环依赖是一个常见而棘手的问题。循环依赖指的是两个或多个 bean 之间的相互依赖,导致 Spring 容器无法正常创建这些 bean。下面将深入探讨 Spring 如何解决循环依赖问题,并提供一些最佳实践。 什么是循环依赖…...
部署NFS版StorageClass(存储类)
部署NFS版StorageClass存储类 NFS版PV动态供给StorageClass(存储类)基于NFS实现动态供应下载NFS存储类资源清单部署NFS服务器为StorageClass(存储类)创建所需的RBAC部署nfs-client-provisioner的deployment创建StorageClass使用存储类创建PVC NFS版PV动态供给StorageClass(存储…...
深入理解 PyTorch 的 nn.Embedding:词向量映射及变量 weight 的更新机制
文章目录 前言一、直接使用 nn.Embedding 获得变量1、典型场景2、示例代码:3、特点 二、使用 iou_token nn.Embedding(1, transformer_dim) 并访问 iou_token.weight1、典型场景2、示例代码:3、特点 三、第一种方法在模型更新中会更新其值吗?…...
go语言内存泄漏的常见形式
go语言内存泄漏 子字符串导致的内存泄漏 使用自动垃圾回收的语言进行编程时,通常我们无需担心内存泄漏的问题,因为运行时会定期回收未使用的内存。但是如果你以为这样就完事大吉了,哪里就大错特措了。 因为,虽然go中并未对字符串…...
操作系统
操作系统 操作系统(OperatingSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统…...
《JVM考古现场(十八):造化玉碟·用字节码重写因果律的九种方法》
"鸿蒙初判!当前因果链突破十一维屏障——全体码农修士注意,《JVM考古现场(十八)》即将渡劫飞升!" 目录 上卷阴阳交缠 第一章:混沌初开——JVM因果律的量子纠缠 第二章:诛仙剑阵改—…...
【2】k8s集群管理系列--包应用管理器之helm(Chart语法深入应用)
一、Chart模板:函数与管道 常用函数: • quote:将值转换为字符串,即加双引号 • default:设置默认值,如果获取的值为空则为默认值 • indent和nindent:缩进字符串 • toYaml:引用一…...
汇编获取二进制
mov_.S mov %r8d,0 nop执行命令: gcc -c mov_.S 会输出 mov_.o 文件:objdump -D mov_.o : mov_.o: 文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 <.text>:0: 44 89 04 25 00 00 00 mov %r8d,0x0…...
《嵌套调用与链式访问:C语言中的函数调用技巧》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、嵌套调用(一)定义(二)实现方式(三)优点(四)缺点 二、链式…...
txt、Csv、Excel、JSON、SQL文件读取(Python)
txt、Csv、Excel、JSON、SQL文件读取(Python) txt文件读写 创建一个txt文件 fopen(rtext.txt,r,encodingutf-8) sf.read() f.close() print(s)open( )是打开文件的方法 text.txt’文件名 在同一个文件夹下所以可以省略路径 如果不在同一个文件夹下 ‘…...
前端工程化之新晋打包工具
新晋打包工具 新晋打包工具前端模块工具的发展历程分类初版构建工具grunt使用场景 gulp采用管道机制任务化配置与api简洁 现代打包构建工具基石--webpack基于webpack改进的构建工具rollup 推荐举例说明package.jsonrollup.config.mjsmy-extract-css-rollup-plugin.mjssrc/index…...
Python语言介绍
Python 是一种高级、通用、解释型的编程语言,由 Guido van Rossum 于 1991 年首次发布。其设计哲学强调代码的可读性和简洁性。 Python通过简洁的语法和强大的生态系统,成为当今最受欢迎的编程语言之一。 一、核心特点 Python 是一种解释型、面向对象、…...
关于 Spring Boot 部署到 Docker 容器的详细说明,涵盖核心概念、配置步骤及关键命令,并附上表格总结
以下是关于 Spring Boot 部署到 Docker 容器的详细说明,涵盖核心概念、配置步骤及关键命令,并附上表格总结: 1. Docker 核心概念 概念描述关系镜像(Image)预定义的只读模板,包含运行环境和配置(…...
Tomcat 服务频繁崩溃的排查方法
# Tomcat 服务频繁崩溃排查方法 当Tomcat服务频繁崩溃时,可以按照以下步骤进行系统化排查: ## 1. 检查日志文件 **关键日志位置**: - catalina.out (标准输出和错误) - catalina.log (主日志) - localhost.log (应用相关日志) - host-mana…...
分布式系统-脑裂,redis的解决方案
感谢你的反馈!很高兴能帮到你。关于你提到的“脑裂”(split-brain),这是一个分布式系统中的常见术语,尤其在像 Redis Cluster 这样的高可用集群中会涉及。既然你问到了,我会从头解释“脑裂”的含义、Redis …...
MySQL InnoDB 索引与B+树面试题20道
1. B树和B+树的区别是什么? 数据存储位置: B树:所有节点(包括内部节点和叶子节点)均存储数据。 B+树:仅叶子节点存储数据,内部节点仅存储键值(索引)。 叶子节点结构: B+树:叶子节点通过双向链表连接,支持高效的范围查询。 查询稳定性: B+树:所有查询必须走到叶子…...
深入解析 Spring AI Alibaba 多模态对话模型:构建下一代智能应用的实践指南
一、多模态对话模型的技术演进 1.1 从单一文本到多模态交互 现代AI应用正经历从单一文本交互到多模态融合的革命性转变。根据Gartner预测,到2026年将有超过80%的企业应用集成多模态AI能力。Spring AI Alibaba 对话模型体系正是为这一趋势量身打造,其技…...
2025年ESWA SCI1区TOP:动态分类麻雀搜索算法DSSA,深度解析+性能实测
目录 1.摘要2.麻雀搜索算法SSA原理3.孤立微电网经济环境调度4.改进策略5.结果展示6.参考文献7.代码获取 1.摘要 污染物排放对环境造成负面影响,而可再生能源的不稳定性则威胁着微电网的安全运行。为了在保障电力供应可靠性的同时实现环境和经济目标的平衡ÿ…...
MySQL Error Log
MySQL Error Log Error Log 的开启Error Log 查看Error Log 滚动 MySQL Error Log MySQL主从复制:https://blog.csdn.net/a18792721831/article/details/146117935 MySQL Binlog:https://blog.csdn.net/a18792721831/article/details/146606305 MySQL Ge…...
让DeepSeek API支持联网搜索
引子 DeepSeek官网注册的API token是不支持联网搜索的,这导致它无法辅助分析一些最新的情况或是帮忙查一下互联网上的资料。本文从实战角度提供一种稳定可靠的方法使得DeepSeek R1支持联网搜索分析。 正文 首先登录火山方舟控制台,https://www.volcen…...
SQL 语句说明
目录 数据库和数据表什么是 SQL 语言数据操作语言(DML)1、SELECT 单表查询通过 WHERE 对原始数据进行筛选通过 聚合函数 获取汇总信息通过 ORDER BY 对结果排序通过 GROUP BY 对数据进行分组通过 HAVING 对分组结果进行筛选 2、SELECT 多表查询3、INSERT…...
PostgreSQL内幕探索—基础知识
PostgreSQL内幕探索—基础知识 PostgreSQL(以下简称PG) 起源于 1986 年加州大学伯克利分校的 POSTGRES 项目,最初以对象关系模型为核心,支持高级数据类型和复杂查询功能。 1996 年更名为 PostgreSQL 并开源,逐…...
Springboot项目正常启动,访问资源却出现404错误如何解决?
我在自己的springboot项目中的启动类上同时使用了SprinBootApplication和ComponentScan注解, 虽然项目能够正常启动,但是访问资源后,返回404错误,随后在启动类中输出bean,发现controller创建失败: 而后我将ComponentScan去掉后资源就能访问到了. 原因 SprinBootApplication本身…...
MaxPooling层的作用(通俗解释)
MaxPooling层的作用(通俗解释) MaxPooling层是卷积神经网络中非常重要的组成部分,它的主要作用可以用以下几个简单的比喻来理解: 1. 信息压缩器(降维作用) 就像把一张高清照片缩小尺寸一样,M…...
0.DockerCE起步之Linux相关【完善中】
ubuntu用户组&权限&文件/目录 服务启停操作 sudo systemctl start docker # 启动服务3,4 sudo systemctl stop docker # 停止服务 sudo systemctl restart docker ps top 以下内容参考 Vim编辑器 Linux系统常用命令 管理Linux实例软件源 Cron定时任务 在Linux系统上…...
树莓派Pico C/C++ OpenOCD调试环境搭建(Windows)
树莓派Pico C/C OpenOCD调试环境搭建(Windows) 参考资料和背景 从上次树莓派Pico C/C 开发环境搭建(一键完成版)后,一直想找个合适调试器,最后测试了多种方案,还是使用另一块树莓派pico作为picoprobe 来调试比较方便,其中参考的…...
【图像生成之21】融合了Transformer与Diffusion,Meta新作Transfusion实现图像与语言大一统
论文:Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model 地址:https://arxiv.org/abs/2408.11039 类型:理解与生成 Transfusion模型是一种将Transformer和Diffusion模型融合的多模态模型,旨…...
《人件》第二章 办公环境
二、办公环境 电话铃不停的响,打印机维修人员顺道过来聊聊天,复印机不工作了,人事部不停催促更新的能力调查表,下午3点之前就要提交时间表…然后一天就这样过去了。 2.1 家具警察 人们怎么使用空间、需要的桌子空间多大、花多少小…...