Seata 多语言体系建设

分布式事务Seata的使用详解 Seata 是一款开源的分布式事务解决方案,它可以帮助用户在分布式系统中实现 ACID 事务。Seata 提供了高效、简单、易用的分布式事务解决方案,支持多种语言和多种场景,如微服务架构、云原生应用等。 阅读详情

文|赵新(花名:于雨 )

蚂蚁集团可信原生部工程师

阿里开源先锋人物、阿里开源大使

负责蚂蚁可信原生技术部 DB Mesh 系统开发,以及容器和分布式事务开源工作

本文 3846 字 阅读 10 分钟

|引语|

分布式事务是微服务技术体系中非常关键的的一个技术节点,当下最流行且经过大规模生产验证的高质量分布式事务实现无疑是 Seata。Seata 社区过去四年长期专注于 Java 语言实现,在 Java 领域是事实上的分布式事务技术标准平台。

在诸如 gRPC 等微服务体系都在进行多语言建设的当下,分布式事务也应该有多种语言支持。所以在规划 2022 年 Seata  Roadmap 时,其中一个非常的关键点就是 Seata 的多语言技术体系建设。在经过半年的准备特别是完成了 Seata v1.5.2 发版后,社区在今年(2022 年)下半年的重点任务就是全力建设 Seata 的多语言实现。

PART. 1--关键技术点

Seata Java 版本经过四年建设后,已经形成了一个非常庞大的技术体系。在进行多语言建设时,想要在半年内让多语言版本 Seata 的功能与 Seata Java 完全对齐,是不可能的。社区需要综合考量当下的实际迫切需求以及未来的发展方向,先找出 Seata 多语言版本的关键技术点。

1. 事务模式

Seata 提供了 TCC、SAGA、AT 和 XA 四种经典事务模式。下图是四种模式的发布时间。

各种模式有其各样的特点:

AT 模式

算是阿里体系独创的事务模式,其本质属于两阶段事务,其二阶段的 commit/rollback 由框架自动生成,对业务没有侵入,用户友好度高于 TCC 模式,可完美接续 Spring 事务,开发效率也较高,也是当前用户最多的一种模式。在 v1.5.2 已经发版的当下时间节点来看,AT 模式下通过全局锁来实现数据的隔离性,对于同一个资源的事务处理只能串行操作,性能一般。

TCC 模式

需要业务层参与者实现 prepare/commit/rollback 接口,其性能在四种模式下最好,数据可见性、隔离性也不错,流行程度仅次于 AT。特别适用于对吞吐、性能、隔离性要求都比较高的金融业务。

SAGA 模式

是一种长事务解决方案,其一阶段正向服务和二阶段补偿服务都由业务开发实现,可以很方便地与微服务框架进行结合,其性能仅次于 TCC 模式。因为其方便编排的特点,它在微服务编排领域有大量应用,当然使用时需要用户写 JSON 文件对服务进行编排。但其数据隔离性不好,业务数据有被脏写的风险。社区目前正在进行 SAGA 注解化工作(https://github.com/seata/seata/pull/4577),可进一步提升其性能与易用性。

XA 模式

不同于其他三种「补偿型」事务,它提供了最严格的隔离性:可以保证全局视角的数据一致性,即保证了用户不会出现脏读。Seata XA 模式的接口与 AT 模式基本一致,算是对用户比较友好的一种事务模式,它是对 XA 协议的严格实现。XA 模式的缺点是其事务范围比较长,其性能最低。

四种模式的发版顺序如下:

每种事务模式在阿里体系内都有各自的业务场景,其出现与演进都是迎合了各自业务场景现有的痛点。AT 和 XA 是不需要理解业务语义的,作用于 DB driver + DB 层面,TCC 和 SAGA 则需要业务层面自实现回滚幂等类逻辑,按照数据面和业务面来切分,依据对业务的入侵程度,四种模式归类如下图。

分布式事务的基石是通信框架、SQL 解析以及数据库连接驱动实现等。得益于 Java 语言丰富的生态,Seata Java 版本可以很方便地站在这些 “巨人” 肩上展开相应的工作,这也是其他语言无法望其项背的。例如,主流数据库都提供了其 Java 版本的 DB driver。但当把工作背景放到多语言场景下时,就需要考量各个语言相关技术点的实现程度了。

四种事务模式,AT 模式本质是应用层的事务,需要把数据库层面做过的 Redo/Undo 在应用层再做一遍,其中非常关键的一个技术点是:AT 模式需要介入数据源做 SQL 拦截,对 SQL 进行解析。单单考量 SQL 解析这个单技术点,Java 和 Python 语言有 antlr,Go 语言有 TiDB 提供的可自由使用的 pingcap/parser,但目前很多其他语言在这块都是空白的。

所以社区在考量现实情况后,除了 Go 和 Python 版本,在进行多语言版本建设时,没有 SQL 解析包的语言版本先不提供 AT 模式的实现。

2. 通信协议

不论哪种事务模式,都构建在 Seata 独有的架构之上。

图片来自 seata 官网

Seata 总体架构由如下角色构成:

事务协调器 Transaction Coordinator

简称 TC,维护全局事务和分支事务的状态,驱动全局事务提交或者回滚。

事务管理器 Transaction Manager

简称 TM,定义全局事务的范围,提交或者回滚全局事务。

资源管理器 Resource Manager

简称 RM,和分支事务在同一个应用,进行分支事务的注册,报告分支事务的状态,驱动分支事务的提交或者回滚。

TC 与 TM 以及各个 RM 之间使用 netty 框架进行长链接通信。具体而言,Seata Java 版本的通信协议是在四层 TCP 协议之上又定义了一套私有的二进制双向通信协议。其关键点在于 Seata Java 版本站在了 netty 这个巨人肩上。

回到多语言这个背景下,很多语言并没有提供一套成熟的 TCP 通信框架。譬如 Dubbo 在建设其 Go 版本 dubbo-go 时,为了在 TCP 之上实现与 Dubbo 的私有二进制协议通信,本人前期的工作重点是先实现 TCP 通信框架 getty(https://github.com/apache/dubbo-getty),然后再实现其序列化协议 dubbo-go-hessian2(https://github.com/apache/dubbo-go-hessian2)。如果把语言切换成 JS、PHP 或者 Python,相关通信协议建设需要耗费社区大量精力。

Seata 2019 年就在 API 层适配了 gRPC 的事务上下文传递,为了方便 Seata 多语言版本的建设,Seata Java 框架本身正在进行一项重要工作:Seata Client (包括 TM 和 RM)基于 gRPC 与 Seata Server(TC)集群进行通信。希望借助于 gRPC 的多语言优势,节省多语言版本在通信层面的工作量。

3. 配置和注册中心

类似于其他微服务框架,Seata 自身除了上一节提到的内部组件外,还依赖于注册中心和配置中心。微服务上层的应用通过配置中心找到注册中心,再通过注册中心发现 Seata 的各个服务组件。一个典型的完备的 Seata 服务架构如下图。

Seata Java 这套架构可以很方便的嵌入注入 Dubbo、SOFARPC 以及 Spring 等 Java 微服务框架中。其中两种非常重要的外部依赖组件是:

Config Centre

依据参考文档 1 和 3,配置中心的作用是 “放置着各种配置文件”,客户端通过配置中心的配置 “去读取全局事务开关, 事务会话存储模式” 等事务配置信息。

Seata Java 支持的配置中心类型有 File、Nacos 、Apollo、Zk、Consul、Etcd3 等。

Registry Centre

依据参考文档 2,注册中心记录了服务路由和寻址映射关系。服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址进行调用。比如 Seata Client 端(TM、RM)对 Seata Server(TC)集群进行服务发现就是通过注册中心进行的。

Seata Java 支持的注册中心有 File 、Nacos 、Eureka、Redis、Zk、Consul、Etcd3、SOFA 等。

先不论这套体系的复杂程度与维护成本,在进行 Seata 多语言体系建设时,遇到的关键问题是:这些组件的多语言支持情况参差不齐。Seata 其他语言版本不可能为了支持这些组件,让 Seata 社区自己去构建起这些组件的多语言客户端实现。

愚以为,解决这个问题的手段,不是去裁剪 Seata Java 的现有实现,而是扩展 Seata Java 的功能支持新的更多的配置中心与注册中心。在云原生时代的当下,大部分云平台的底座是 Kubernetes,大部分微服务体系都在基于 K8s 构建其新技术形态。所以 Seata 多语言体系可以用如下形式构建起新的 name server:

使用 K8s 的 ConfigMap 存储 Seata 的配置数据:

一般地,Seata 是作为其他微服务平台如 Spring Cloud Alibaba、Dubbo、HSF、SOFARPC 等框架的组件使用的。这些框架本身就有配置中心的概念,支持了 Nacos、Apollo、SOFARegistry 等流行的配置中心,Seata 可以复用这些框架现有的配置中心,减少维护成本。

多语言版本的 Seata 的配置类型可以先实现 File 类型,使用 Seata 的微服务应用运行在 Kubernetes 平台上时,通过 ConfigMap 挂载 Seata 的配置。

使用 K8s 的 API server 或者 DNS 组件充当 Seata 的注册中心:

同理于配置中心,Seata 的注册中心也可以复用其所在的微服务框架的注册中心,如 Nacos、Etcd、Zookeeper 等。运行在 Kubernetes 平台上时,把 API server 当作注册中心,多语言版本的 Seata 优先实现 File 类型,配置 API server 地址即可。

Seata server(就是 TC)可以多 namespace 部署,每个 namespace 下可以有多个 TC 集群,Seata Client(包括 TM 和 RM)可以通过 service 形式获取 TC 集群地址,这样既达到了 TC 高可用的目的,也方便在客户端层面对 TC 集群进行负载均衡。 

PART. 2--总结

通过对事务模式、通信协议以及配置与注册中心的讨论,可以看到,在进行 Seata 多语言体系建设时,并不是让 Seata 多语言实现完全以 Seata Java 版本为参照向其靠拢,而是 Seata Java 版本作为 Seata 多语言体系的一部分共同进化。

PART. 3--整体工作进度

计算机行业有个 TIOBE 排行榜,定期更新各种主流计算机语言的流行度。参照这个排行榜中前 10 大流行语言,本人月初(2022 年 7 月)在 Seata 两大钉钉群发起了 Seata 多语言投票,统计结果如下:

根据投票结果以及社区相关人才技术储备情况,社区决定先重点投入 Go、Python、JS 三种语言建设上。几种语言当前工作推进情况如下:

seata-go

项目地址:https://github.com/seata/seata-go

社区钉群:33069364

seata-python

项目地址:https://github.com/opentrx/seata-python

社区钉群:44788121

seata-js

项目地址:https://github.com/seata/seata-js

社区钉群:44788119

seata-rust

项目地址:https://github.com/seata/seata-rust

社区钉群:44791799

seata-php

项目地址:https://github.com/seata/seata-php

社区钉群:44788115

历史上,Seata 曾经有两个 Go 版本,分别是 2019 年由张旭贡献的 seata-go 和 2020 年由刘晓敏贡献的 seata-golang。为了统一建设,目前已经把这两个项目合并,seata-go 完成度是多语言版本中最高的,实现了 TCC 和 AT 模式。目前 XA 和 Saga 模式的实现也在推进中,预计秋季可发布第一个版本。其次完成度比较高的是 seata-python,提供了 AT 事务模式。

考虑到 Seata 目前大部分开发者和用户都在国内,Seata 社区建设了多个语言社区群,以推进语言版本的开发工作。

Seata 多语言体系建设工作目前正在如火如荼地展开中,欢迎行业同仁入群参与其中,与我们一起推动 Seata 各个语言版本的实现,提升各个语言微服务框架的事务技术水平,开创分布式技术建设新局面!

 【参考文档】 

1. Seata 应用侧启动过程剖析——注册中心与配置中心模块:

https://seata.io/zh-cn/blog/seata-client-start-analysis-02.html

2. Seata 注册中心实现原理:

https://seata.io/zh-cn/blog/seata-config-center.html

3. Seata 配置中心实现原理:

https://seata.io/zh-cn/docs/user/registry/index.html

4. Seata 企业版:

https://developer.aliyun.com/article/928860

SpringCloud+Seata+nacos案例(包含源码 Seata及nacos安装教程) 金三银四到了,送上一个小福利!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!throw new IllegalArgumentException(“商品不存在”); 阅读详情

相关推荐

SpringCloud-Alibaba之Seata入门及踩坑(1)

今天老顾主要介绍了seata版本关系,以及源项目中的文件目录含义,和如何安装seata server,在操作过程中,小伙伴们一定要注意相关的配置文件。一定不要搞错了对应的seata版本,之前seata的1.0.0之前的版本配置信息的位置是不一样的,千万记住哦。下篇我们就介绍实战案例,以及会遇到的一个大坑,以及解决方案。自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

2401_83916241的博客 1021

搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型

Seata分布式事务AT、TCC、SAGA、XA模式选型主要是根据不同的业务进行相应的选型,如SAGA,需要调用第三方的支付的场景的时候,可以使用这个方案,SAGA是形成一定的事件流,反向的回滚的时候按照反向的事件流进行回滚。

meser88的博客 362

分布式事务之Seata

Seata有四种模式 AT模式:无侵入式的分布式事务解决方案,适合不希望对业务进行改造的场景,但由于需要添加全局事务锁,对影响高并发系统的性能。该模式主要关注多DB访问的数据一致性,也包括多服务下的多DB数据访问一致性问题。通过更新前快照回滚、更新后快照对比在二阶段提交时是否有人修改(为不受Seata代理的数据源做兜底),解决脏写。 优点: 一阶段完成直接提交事务,释放数据库资源,性能比较好 利用全局锁实现读写隔离 没有代码侵入,框架自动完成回滚和提交

天之道居同文。 1377

如何提升 C# 应用中的性能

本文介绍的关键优化技巧包括:基于测量的针对性优化、内存管理最佳实践、高效的异步编程模式、合理的数据结构选择、数据库访问优化以及生产环境监控等。值得注意的是,性能优化应当遵循"先测量后优化"的原则,避免过早和过度的优化。同时,在追求性能提升的过程中,不应牺牲代码的可维护性和可读性。最终,持续学习最新的 .NET 性能优化技术,结合实际应用场景进行实践和验证,是保持应用竞争力的关键。.NET 的垃圾回收机制虽然自动化了内存管理,但不当的对象分配策略会导致频繁的 GC 暂停,影响应用响应速度。

sdgfafg_25的博客 920

seata事务提交流程

Phase1:Seata 的 JDBC 数据源代理通过对业务 SQL 的解析,把业务数据在更新前后的数据镜像组织成回滚日志,利用 本地事务 的 ACID 特性,将业务数据的更新和回滚日志的写入在同一个 本地事务 中提交(也就是 undolog 功能)。注意:全局事务的开始是在 TM 的业务代码中开始的,比如@GlobalTransactional处,而 RM 的注册是在数据层开始的,首先进行数据操作并记录 undolog 数据,然后进行 RM 分支注册,再进行本地事务提交,最后上报给 TC 事务状态。

2401_83916394的博客 767

C# 微服务的事务管理与数据一致性:从混乱到优雅的零数据丢失实战

文章摘要:本文探讨了分布式事务的核心挑战与解决方案,涵盖了多种事务模式及其适用场景。2PC协议适用于强一致性场景,但存在单点故障问题,可通过Raft协议解决。TCC模式通过资源预留与补偿机制,确保事务的原子性,适用于电商等资源预留场景。Saga模式采用事件驱动,支持最终一致性,适用于长流程场景如订单物流。此外,本地消息表与消息队列(MQ)组合方案能有效减少网络延迟,提升性能。文章还提供了详细的代码实现,展示了2PC、TCC等模式的具体应用与补偿机制设计。

墨夶的博客 1677

一文搞懂 Seata 分布式事务 TCC 模式及解决空回滚、幂等、悬挂问题

一文搞懂 Seata 分布式事务 TCC 模式及解决空回滚、幂等、悬挂问题

weixin_46209120的博客 2039

SeatFace人脸识别C#版源码

由于文件太大传不了,MODEL文件夹下缺失seeta_fr_v1.0.bin文件,请百度下载. 代码可以编译通过。

【09】分布式事务Seata 之 TCC事务模式

准备工作 第一步:先创建一个空工程:seata-tcc 第二步:将无事务订单项目解压到seata-tcc文件夹下。(可访问 git 仓库 https://gitee.com/benwang6/seata-samples下载无事务订单项目) 第三步:在IDEA 按两下 shift 搜索add maven project,选择需要导入的模块的pom.xml文件,将项目都导入工程中。 TCC事务入门案例 父工程添加seata依赖 打开父工程order-parent的pom.xml文件,取消seata依赖的注释。

XQ_898878888的博客 665

C#类库完整版.zip

包含开发中所用到的几乎所有的net类,比较适合不同阶段的Net开发者

分布式事务终极方案:Seata在PHP微服务架构的落地实践.pdf

文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 PHP——Web开发的可靠伙伴!从快速搭建动态网站到处理复杂业务逻辑,它简洁灵活又强大。全球超80%服务器运行,海量框架与库助力开发。无论新手入门还是老兵深耕,PHP都能高效交付价值,持续赋能互联网创新!

「活动推荐」冲冲冲!2022 国际开源节有新内容

本周推荐阅读Seata 在蚂蚁国际银行业务的落地实践Kusion 模型库和工具链的探索实践Seata 多语言体系建设Go 原生插件使用问题全解析 ...

金融级分布式架构 152

WebRTC音频传输实战:从采集到播放的完整链路解析(附RTP包处理细节)

本文深入解析了WebRTC音频传输的完整链路,从麦克风采集、音频处理与编码,到RTP打包、网络发送,再到接收端的NetEQ抗抖动处理与最终播放。文章以Linux PulseAudio为例,详细剖析了线程模型、缓冲区管理及RTP包处理等关键细节,旨在帮助开发者优化实时音频应用的延迟、卡顿与回声问题。

tea88的博客 853

Seata多语言支持:Go语言客户端的实现与使用

Seata作为一款高性能的分布式事务解决方案,已在Java生态中得到广泛应用。随着Go语言在微服务领域的普及,Seata社区推出了Go语言客户端实现,使Go开发者能够无缝接入Seata的分布式事务管理体系。本文将深入剖析Seata Go客户端的架构设计、核心功能实现及实际应用场景,帮助开发者快速掌握这一跨语言解决方案。 ## Seata多语言生态架构 Seata的多语言支持采用"共享TC服务+...

gitblog_00131的博客 1150

硬件原理图分析

文章目录1 硬件原理图分析1.1 MCU部分1.2 NB部分1.3 电源部分 1 硬件原理图分析 1.1 MCU部分 MCU接口部分没啥需要注意,都是常规操作。 1.2 NB部分 U4是用来防静电的。 由于NB的以上几个引脚只支持1.8V,所以这里需要3.3V转1.8V的电路。只要把握住谁改变电平就好分析是怎么实现电平转换的了。 1.3 电源部分 图中的MOS是用来实现USB和电池同时插入时只能USB供电功能的。 ...

木子皿--啥都不会的菜鸟 8170

西门子交换机环网冗余设置(实战篇2.2)

MRP的重组时间为 200ms 因此 PROFINET 通信必须选择大于 200ms 的看门狗时间,看门狗。ET200SP默认为 2ms*3=6ms) MRP 的重组时间为 200ms 故系统会报出看门狗超时。更新,默认是 3 个周期,超出设置的周期数就会报 IO 设备故障。时间不是直接配置的,而是作为没有 IO 数据可接受的更新周期,也就是允许几个周期没有数据。来达到大于 200ms 的看门狗时间的要求(看门狗时间 可接受更新周期数 更新时间)。是IO 控制器和 IO 设备)

weixin_42580591的博客 366

Seata-php 半年规划

文|赵新(花名:于雨)蚂蚁集团 Seata 项目开源负责人开放原子开源基金会代码贡献之星郭成(花名:星北)Seata-php 项目共同发起人蚂蚁集团技术专家刘岳健Seata-php 项目共同发起人、Hyperf 开发组成员广东快客电子商务有限公司高级后端工程师本文5894字 阅读12分钟|导语|通俗地讲,seata-php 是 Seata 的 PHP 语言实现,它实现了 Java 和...

金融级分布式架构 344

手把手教你学Simulink--基础微电网场景实例:基于Simulink的混合交直流微电网架构仿真

本文基于Simulink构建混合交直流微电网仿真模型,通过交流子网(风电+交流负荷)和直流子网(光伏+储能+直流负荷)的协同控制,实现系统效率提升8.5%。重点介绍了混合架构原理、下垂控制策略及Simulink建模方法,包括核心模块实现、协调控制器代码和仿真参数设置。通过三种工况测试验证了系统性能:功率转移响应时间<0.5s,电压波动<5%,显著优于传统独立子网架构。文章还提供了进阶优化方向和完整代码清单,为微电网仿真研究提供实用参考。

MHD0815的博客 129

Seata分布式事务部署与多语言集成实战指南

分布式事务是微服务架构中的关键技术,用于保证跨服务的数据一致性。Seata作为开源的分布式事务解决方案,采用AT、TCC等模式实现事务协调。其核心原理是通过TC(Transaction Coordinator)协调RM(Resource Manager)完成二阶段提交。在生产环境中,Seata的高可用部署需要结合Nacos注册中心和MySQL集群,同时要注意JDK版本兼容性问题。对于Java生态,需正确配置tx-service-group等参数;非Java服务可通过HTTP API接入,但需处理事务悬挂问题

weixin_33713350的博客 318

S/4HANA 迁移前的必修课:用 SCMON 找出沉睡的自定义代码

SAP S/4HANA迁移项目中,SCMON工具能有效解决历史代码评估难题。通过监控ABAP对象调用情况,SCMON可识别40-60%处于"沉睡"状态的自定义代码。配置时需注意监控周期(建议3-6个月)和数据保留期(建议1年),并配合Time Slices功能进行时段分析。工具导出的调用数据可与测试覆盖率对比,帮助决策代码迁移优先级。实际应用中需结合业务场景,建议与SUSG工具配合使用,并保持持续监控。SCMON虽不能完全替代人工判断,但其提供的客观数据能显著提升迁移决策的科学性,建议在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 291

EMB电子机械制动执行器五大核心部件选型解析

本文介绍了EMB电子机械制动执行器五大核心部件的选型方案:采用无刷直流电机作为驱动源,兼具高扭矩和快速响应特性;选用滚珠丝杠传动机构,实现高效旋转-直线转换;行星齿轮减速器满足紧凑空间内的增扭需求;QT450-QT550材质的钳体确保刚度要求;应变片式压力传感器实现夹紧力精确测量。各部件选型综合考虑了性能、可靠性和空间限制,为EMB系统设计提供了完整解决方案。

m0_59012156的博客 1737

SpringCloudAlibaba-Seata整合

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。

weixin_45982841的博客 832

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1400

分布式事务-Seata

Seata 文章目录 文章目录1. 什么是Seata?2. 发展历史3. 微服务中的分布式事务问题4. Seata如何解决分布式事务?4.1 Seata解决分布式事务设计原理:4.2 如何定义分布式事务:4.3 Seata有3个基本组件:4.4 Seata管理分布式事务的典型生命周期:5. SpringCloud集成Seata5.1 运行Seata5.1.1 Seata下载地址 [http...

Mr.Kong 9384

166、Sim2Real中的强化学习:域随机化与鲁棒策略

第二,训练时监控每个随机化维度对策略梯度的贡献,如果某个维度对loss的方差贡献极小,说明策略已经忽略它了,要么加大范围,要么删掉。第四,如果条件允许,用真实数据来校准随机化分布——采集真机上的传感器数据,拟合出参数分布,再把这个分布作为随机化的采样依据,这比拍脑袋定范围靠谱得多。动态随机化是很多人忽略的维度。域随机化的核心思想说白了就一句话:别去精确建模现实,而是把仿真环境本身变成一个随机分布的集合,让策略在“各种乱七八糟的物理参数”里都见过世面,这样到了真机上,不管现实落在哪个参数区间,策略都能兜住。

sundong_81的博客 27

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Seata解析-seata核心类NettyRemotingServer详解

本文基于seata 1.3.0版本 NettyRemotingServer是TM服务端的核心类之一,它用于启动netty,监听服务器端口,接收TM、RM的请求,它还为不同的请求创建不同的处理器。本文将详解NettyRemotingServer类。 下图是NettyRemotingServer的继承图,里面的方法是public的: ...

龚厂长的博客 1517

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: KusionStack 开源|Kusion 模型库和工具链的探索实践
下一篇: 专访|开源之夏新星牛学蔚
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值