「springcloud 2021 系列」Seata 彻底解决分布式事务问题
分布式事务
单体应用
单体应用中,一个业务操作需要调用三个模块完成,此时数据的一致性由本地事务来保证。
微服务应用
随着业务需求的变化,单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。
在微服务架构中由于全局数据一致性没法保证产生的问题就是分布式事务问题。简单来说,一次业务操作需要操作多个数据源或需要进行远程调用,就会产生分布式事务问题。
Seata 简介
Seata 是一款开源的 分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Seata 以高效并且对业务 0 侵入的方式,解决 微服务 场景下面临的分布式事务问题。
协议分布式事务处理过程的三个组件:
-
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚
-
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务
-
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚
一个典型的分布式事务过程:
- TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID
- XID 在微服务调用链路的上下文中传播
- RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖
- TM 向 TC 发起针对 XID 的全局提交或回滚决议
- TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求
Spring Cloud 支持
-
通过 Spring MVC 提供服务的服务提供者,在收到 header 中含有 Seata 信息的 HTTP 请求时,可以自动还原 Seata 上下文
-
支持服务调用者通过 RestTemplate 调用时,自动传递 Seata 上下文
-
支持服务调用者通过 FeignClient 调用时,自动传递 Seata 上下文
-
支持 SeataClient 和 Hystrix 同时使用的场景
-
支持 SeataClient 和 Sentinel 同时使用的场景
Seata 安装
docker-compose
-
使用 Nacos 作为注册中心
-
准备
registry.conf
文件注册 seata 服务到 nacos 注册中心;指定 seata 配置的方式为 file ,即文件类型
registry {type = "nacos"nacos {# seata 服务注册在 nacos 上的别名,客户端通过该别名调用服务application = "seata-server"# 指定注册至nacos注册中心的分组名group = "SEATA_GROUP"# 请根据实际生产环境配置nacos服务的ip和端口serverAddr = "192.168.123.22:8848"# nacos上指定的namespacenamespace = ""# 指定注册至nacos注册中心的集群名 cluster = "default"username = "nacos"password = "nacos"}
}config {type = "file"file {name="file:/root/seata-config/file.conf"}
}
-
准备
file.conf
文件配置存储模式为 db,并指定数据库的 host、user、password 等,更多配置
# 存储模式
store.mode=dbstore.db.datasource=druid
store.db.dbType=mysql# 需要根据 mysql 的版本调整 driverClassName
# mysql8 及以上版本对应的 driver:com.mysql.cj.jdbc.Driver
# mysql8 以下版本的 driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver# 注意根据生产实际情况调整参数 host 和 port
store.db.url="jdbc:mysql://192.168.123.22:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"# 数据库用户名
store.db.user=test# 用户名密码
store.db.password=testMysql
store.mode
为 db 模式需要在数据库 seata-server
创建对应的表结构,[建表脚本]
创建一个 seata-server 数据库,建表 sql 位于 doc/seata/db_store.sql
中,以 mysql 为例:
-- The script used when storeMode is 'db'
-- the table to store GlobalSession dataCREATE TABLE IF NOT EXISTS `global_table`(`xid` VARCHAR(128) NOT NULL,`transaction_id` BIGINT,`status` TINYINT NOT NULL,`application_id` VARCHAR(32),`transaction_service_group` VARCHAR(32),`transaction_name` VARCHAR(128),`timeout` INT,`begin_time` BIGINT,`application_data` VARCHAR(2000),`gmt_create` DATETIME,`gmt_modified` DATETIME,PRIMARY KEY (`xid`),KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),KEY `idx_transaction_id` (`transaction_id`)) ENGINE = InnoDBDEFAULT CHARSET = utf8;-- the table to store BranchSession dataCREATE TABLE IF NOT EXISTS `branch_table`(`branch_id` BIGINT NOT NULL,`xid` VARCHAR(128) NOT NULL,`transaction_id` BIGINT,`resource_group_id` VARCHAR(32),`resource_id` VARCHAR(256),`branch_type` VARCHAR(8),`status` TINYINT,`client_id` VARCHAR(64),`application_data` VARCHAR(2000),`gmt_create` DATETIME(6),`gmt_modified` DATETIME(6),PRIMARY KEY (`branch_id`),KEY `idx_xid` (`xid`)) ENGINE = InnoDBDEFAULT CHARSET = utf8;-- the table to store lock dataCREATE TABLE IF NOT EXISTS `lock_table`(`row_key` VARCHAR(128) NOT NULL,`xid` VARCHAR(128),`transaction_id` BIGINT,`branch_id` BIGINT NOT NULL,`resource_id` VARCHAR(256),`table_name` VARCHAR(32),`pk` VARCHAR(36),`status` TINYINT NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',`gmt_create` DATETIME,`gmt_modified` DATETIME,PRIMARY KEY (`row_key`),KEY `idx_status` (`status`),KEY `idx_branch_id` (`branch_id`)) ENGINE = InnoDBDEFAULT CHARSET = utf8;CREATE TABLE IF NOT EXISTS `distributed_lock`(`lock_key` CHAR(20) NOT NULL,`lock_value` VARCHAR(20) NOT NULL,`expire` BIGINT,primary key (`lock_key`)) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
- 准备 docker-compose.yaml 文件
将 doc/seata/conf/registry.conf 与 file.conf
放到 /mnt/volume/seata/config
文件夹中。nacos、seata 容器配置如下:
version: '3.5'services:nacos-registry:image: nacos/nacos-server:2.0.3container_name: nacos-registry#command:restart: always#https://nacos.io/zh-cn/docs/quick-start-docker.htmlenvironment:- "MODE=standalone"ports:- 8848:8848# http://seata.io/zh-cn/docs/ops/deploy-by-docker-compose.html# chmod 777 /mnt/volume/seataseata:image: seataio/seata-server:1.4.2container_name: seataenvironment:# 指定seata服务启动端口- SEATA_PORT=8091# 注册到nacos上的ip。客户端将通过该ip访问seata服务- SEATA_IP=192.168.123.22- SEATA_CONFIG_NAME=file:/root/seata-config/registryrestart: alwaysvolumes:# 因为registry.conf中是nacos配置中心,只需要把doc/seata/conf/registry.conf与file.conf放到/mnt/volume/seata/config文件夹中- /mnt/volume/seata/conf:/root/seata-config- /mnt/volume/seata/logs:/root/logsports:- "8091:8091"
- 启动容器
运行 docker-compose -f docker-compose-env.yml up -d
启动 nacos、seata 容器
可以看到 seata-server 成功注册到nacos注册中心
环境变量
seata-server 支持以下环境变量:
- SEATA_IP
可选, 指定 seata-server 启动的 IP, 该 IP 用于向注册中心注册时使用
- SEATA_PORT
可选, 指定 seata-server 启动的端口, 默认为 8091
- STORE_MODE
可选, 指定 seata-server 的事务日志存储方式, 支持 db
, file
, redis
(Seata-Server 1.3及以上版本支持), 默认是 file
- SERVER_NODE
可选, 用于指定 seata-server 节点 ID, 如 1
,2
,3
…, 默认为 根据ip生成
- SEATA_ENV
可选, 指定 seata-server 运行环境, 如 dev
, test
等, 服务启动时会使用 registry-dev.conf
这样的配置
- SEATA_CONFIG_NAME
可选, 指定配置文件位置, 如 file:/root/registry
, 将会加载 /root/registry.conf
作为配置文件,如果需要同时指定 file.conf
文件,需要将 registry.conf
的config.file.name
的值改为类似 file:/root/file.conf
:
项目实战
源码:https://github.com/langyastudio/langya-tech/tree/master/spring-cloud
数据库准备
-
业务数据库
- seat-order:存储订单的数据库
- seat-storage:存储库存的数据库
- seat-account:存储账户信息的数据库
-
日志回滚表
每个业务数据库都需要添加日志回滚表
Seata AT 模式需要使用日志回滚表 undo_log 表
完整 SQL 如下:
-- seat-order:存储订单的数据库
create database `seat-order`;
use `seat-order`;CREATE TABLE `seat-order`.`order_tbl`
(`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` varchar(255) DEFAULT NULL COMMENT '用户id',`commodity_code` varchar(255) DEFAULT NULL COMMENT '商品编码',`count` int(11) DEFAULT 0 COMMENT '数量',`money` int(11) DEFAULT 0 COMMENT '金额',`status` int(1) DEFAULT NULL COMMENT '订单状态:0:创建中;1:已完结',PRIMARY KEY (`id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8;-- Seata AT 模式需要使用日志回滚表 undo_log 表
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `seat-order`.`undo_log`
(`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDBAUTO_INCREMENT = 1DEFAULT CHARSET = utf8;-- seat-storage:存储库存的数据库
create database `seat-storage`;
use `seat-storage`;CREATE TABLE `seat-storage`.`storage_tbl`
(`id` int(11) NOT NULL AUTO_INCREMENT,`commodity_code` varchar(255) DEFAULT NULL COMMENT '商品编码',`count` int(11) DEFAULT 0 COMMENT '数量',PRIMARY KEY (`id`),UNIQUE KEY (`commodity_code`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8;
INSERT INTO `seat-storage`.`storage_tbl` (`id`, `commodity_code`, `count`)
VALUES (1, 'C00321', 100);-- Seata AT 模式需要使用日志回滚表 undo_log 表
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `seat-storage`.`undo_log`
(`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDBAUTO_INCREMENT = 1DEFAULT CHARSET = utf8;-- seat-account:存储账户信息的数据库
create database `seat-account`;
use `seat-account`;CREATE TABLE `seat-account`.`account_tbl`
(`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` varchar(255) DEFAULT NULL COMMENT '用户id',`money` int(11) DEFAULT 0 COMMENT '金额',PRIMARY KEY (`id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8;
INSERT INTO `seat-account`.`account_tbl` (`id`, `user_id`, `money`)
VALUES (1, 'U100001', 1000);-- Seata AT 模式需要使用日志回滚表 undo_log 表
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `seat-account`.`undo_log`
(`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDBAUTO_INCREMENT = 1DEFAULT CHARSET = utf8;
完整数据库示意图:
客户端配置
对 seata-order-service、seata-storage-service 和 seata-account-service 三个 seata 的客户端进行配置,它们配置大致相同,下面以 seata-order-service 的配置为例
-
修改 application.yml 文件
-
数据库连接url、账号、密码
-
自定义事务组的名称
-
nacos 注册配置
-
spring:application:name: order-servicedatasource:name: '"orderDataSource"'type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.123.22:3306/seat-order?useSSL=false&serverTimezone=UTCusername: testpassword: testMysqldruid:initial-size: 2max-active: 20min-idle: 2cloud:nacos:discovery:server-addr: 192.168.123.22:8848username: naocspassword: nacosalibaba:seata:#自定义事务组名称需要与 seata-server 中的对应tx-service-group: business-serviceseata:enabled: trueservice:disable-global-transaction: falsegrouplist:default: 192.168.123.22:8091vgroup-mapping:#事务分组名=集群名称#集群名需要与Seata-server注册到Nacos的cluster保持一致business-service: default# if use registry centerregistry:nacos:cluster: defaultserver-addr: 192.168.123.22username: nacospassword: nacostype: nacos
-
修改全局事务处理
使用
@GlobalTransactional
注解开启分布式事务,如@GlobalTransactional(timeoutMills = 300000, name = "spring-cloud-business-tx")
事务问题
这里会创建三个服务,一个订单服务,一个库存服务,一个账户服务。该操作跨越三个数据库,有两次远程调用,很明显会有分布式事务问题。
- 当用户下单时,会在订单服务中创建一个订单
- 然后通过远程调用库存服务来扣减下单商品的库存
- 再通过远程调用账户服务来扣减用户账户里面的余额
- 最后在订单服务中修改订单状态为已完成
事务演示
通过 @GlobalTransactional 参数,实现所有服务数据要么执行、要么不执行
如果分布式事务生效的话, 那么以下等式应该成立:
-
用户原始金额(1000) = 用户现存的金额 + 货物单价 (2) * 订单数量 * 每单的货物数量(2)
-
货物的初始数量(100) = 货物的现存数量 + 订单数量 * 每单的货物数量(2)
在本示例中,模拟了一个用户购买货物的场景,seata-storage-service 负责扣减库存数量,seata-order-service 负责保存订单,seata-account-service 负责扣减用户账户余额。
为了演示样例,在 seata-account-service 中使用 random.nextBoolean() 的方式来随机抛出异常,模拟了在服务调用时随机发生异常的场景。
-
运行 seata-order-service、seata-storage-service、seata-account-service、seata-business-service 四个服务
-
调用接口进行下单操作后查看数据库:http://localhost:18081/seata/feign
由于 account 服务抛出异常,此时可以发现下单后数据库数据并没有任何改变
-
在 seata-account-service 中屏蔽
throw new RuntimeException
异常后,继续接口@GetMapping(value = "/account", produces = "application/json") public String account(String userId, int money) {--------if (random.nextBoolean()){//throw new RuntimeException("this is a mock Exception");}----- }
正常执行,发现数据库中的数据发生变化
参考
Seata 官方文档
使用 Seata 彻底解决 Spring Cloud 中的分布式事务问题!
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 通用循环bat脚本
ECHO off chcp 65001 set i1 :LOOP adb shell xxx.xxxx set now_time%time:~0,2%:%time:~3,2%:%time:~6,2% & set /a ii1 & call echo 当前运行第%i%次,当前时间为%now_time% & GOTO LOOP pause...
2024/5/5 5:47:25 - lua中 do end 的用法
在 Lua 中,使用 do-end 将一条或多条语句包起来作为一个语句块儿(block),形成一个作用域,在这个作用域中定义的局部变量只在当前作用域有效,出了作用域之后就会被垃圾回收器自动回收! local x1…...
2024/4/18 14:02:20 - stm32,基础led
首先两个最重要文件led.c与led.h 先写led.h #ifndef __LED_H #define __LED_H #include "sys.h"#define LED0 PBout(5) //我们要用5,所以他是5 #define LED1 PEout(5) //如果不李姐,可以右键看他定义void LED_Init(void); //初始化 #endif我…...
2024/5/5 7:12:22 - 对面向对象编程的理解
面向对象编程强调的是编程的思想,将客观存在的一切事物都理解为计算机中的对象,当我们通过编写程序的方式去解决一些业务问题时,应该首先想到的是用什么对象去解决这个问题,其次是才是解决这个问题的步骤。也就是先有结构…...
2024/4/27 10:51:42 - props配置项 组件之间传值
场景 共用组件的使用 只使用一部分 还需要有自己的 在App组件中 <template><div class"container">//name,sex,age传的属性<Student name"小鸡炖蘑菇" sex"好" :age18></Student></div> </template><sc…...
2024/4/18 1:48:27 - element 规则验证
rules: { name: [ /*required 是否必填 trigeer 触发检查的方式 blur 失去焦点时检查 change 值发生改变时触发*/ { required: true, message: 请输入活动名称, trigger: blur }, /*min 最小值 max 最大值 注意: type默认为string min和max则…...
2024/5/5 5:56:36 - MySQL——DML语言
插入语句(insert) 方式一 语法: insert into 表名(列名1,...) values(值1,...);插入的值类型要与列兼容列和值的个数必须一致可以省略列名,此时默认所有列 方式二 语法: insert into 表名 set 列名1值1, 列名2值…...
2024/5/5 5:36:39 - UA OPTI544 量子光学4 光与介质相互作用 2-level System Approximation
UA OPTI544 量子光学4 光与介质相互作用 2-level System ApproximationInteracting、State Space与薛定谔方程Rotating Wave ApproximationRabi Solution电偶极矩期望的运动方程上一讲提到在time-independent atomic Hamitonian与time-dependent driving term都已知的时候&…...
2024/4/24 5:06:23 - Process ‘command ‘C:/Program Files/Java/jdk1.8.0_192/bin/java.exe‘‘ finished with non-zero exit valu
Process ‘command ‘C:/Program Files/Java/jdk1.8.0_192/bin/java.exe’’ finished with non-zero exit value 1 解决...
2024/4/27 12:59:41 - 22条API设计的实践
来源:22条API设计的最佳实践 来源:dockone.io/article/2434604 原文:https://betterprogramming.pub/22-best-practices-to-take-your-api-design-skills-to-the-next-level-65569b200b9 曾经因为一个糟糕的API而感到沮丧吗? 在…...
2024/4/20 4:53:08 - Python常用语法糖
变量交换 # Unrecommended temp a a b b temp# Recommended a, b b, a 链式比较 # Unrecommended if grade > 60 and grade < 90:print("passed")# Recommended if 60 < grade < 90:print("passed") 三目运算 Python 不支持三目运算符…...
2024/4/13 3:37:41 - 关于orm传递ctx的一点理解
一、ctx来源于request的ctx,保证再一个request的timeout超时内保证返回给用户信息,可能是超时信息 二、orm传递ctx的一些好处: 1、ctx可以做一些链路追踪的事情比如,用户信息都在ctx,应用id,可以做一些日志记录 2、ctx…...
2024/4/13 3:37:36 - Excel样式
//生成一个表格 XSSFWorkbook workbook new XSSFWorkbook(); //声明一个工作薄 XSSFSheet sheet workbook.createSheet("XXXXX");//样式 XSSFCellStyle sheetStyle workbook.createCellStyle();//位置 sheetStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//左右…...
2024/4/5 1:53:52 - Java培训机构怎么选?java学习很难吗?
随着互联网行业的快速发展,以Java为突出代表的IT培训机构也如雨后春笋般出现,但面对如此多的培训机构学员的选择越多,需要考虑的点就越多,那么如何选java培训机构呢? 不论是java培训机构还是其他IT培训类机构,一般分…...
2024/4/19 14:22:39 - 新网站排名优化有哪些需要注意的规则?
为什么有的网站可以做的排名那么靠前,而有的网站进行优化之后还是排名在后面,流量和排名效果没有达到预期的效果,虽然说新网站排名优化不需要太多的技术,但是想让网站保持长久那么网站优化的规则还是需要了解清楚的,下…...
2024/5/3 1:40:19 - 升级springboot 版本 常见问题
Spring Boot 升级所遇到的坑们s 1.5.x升级到2.1.x https://www.cnblogs.com/zhengshuangliang/p/12661606.html org.springframework.boot.autoconfigure.*jar包冲突的解决方案 https://blog.csdn.net/a954553391/article/details/107948955...
2024/5/3 2:41:12 - C# 如何将List拆分成多个子集合
C# 如何将List拆分成多个子集合/// <summary> /// 将集合进行分组/// </summary>/// <param name"myList">原集合</param>/// <param name"GroupNum">每组的数量 ps:最后一组数量不足时按照剩余数量统计</param>/// &…...
2024/4/19 16:05:11 - Win32 API中的宽字符 学习笔记
TCHAR 是一个宏,当前项目默认是什么编码格式,在编译的时候就会转换为什么样的编码格式...
2024/4/13 3:38:26 - opencv里面使用caffe模型
opencv可以加载很多主流的深度学习模型,比如caffe、onnx、TF cv::dnn::readNet cv::dnn::readNetFromCaffe cv::dnn::readNetFromDarknet cv::dnn::readNetFromONNX cv::dnn::readNetFromTensorflow cv::dnn::readNetFromTorch cv::dnn::readNetFromModelOptimizer…...
2024/4/20 3:38:32 - 操作系统面试总结
操作系统进程与线程的区别(7)进程和线程进程与线程的联系进程的状态进程的运行状态,详细讲一下什么是线程同步?线程如何进行通信?讲一下线程池线程同步的几种方式的区别?应用场景?进程间通信方式…...
2024/4/13 3:38:26
最新文章
- 文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳捕集和电转气的综合能源系统优化调度》
本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...
2024/5/5 9:42:04 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 医院内外网安全通讯:实现安全与便捷的跨网即时通讯
医院作为医疗信息化程度较高的机构之一,内部数据传输频繁,网络安全问题备受关注。医院内外网隔离是确保医院网络安全性和保密性的关键措施。然而,医院在业务开展中经常需要进行内外网数据交换,比如患者数据传输至内网,…...
2024/5/3 2:23:09 - OpenHarmony实战:Combo解决方案之ASR芯片移植案例
本方案基于 OpenHarmony LiteOS-M 内核,使用 ASR582X 芯片的 DEV.WIFI.A 开发板进行开发移植。作为典型的 IOT Combo(Wi-FiBLE)解决方案,本文章介绍 ASR582X 的适配过程。 编译移植 目录规划 本方案的目录结构使用 Board 和 So…...
2024/5/5 8:30:07 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57